diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java index 6a063861..8b86a7ba 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java @@ -1,9 +1,10 @@ -package com.czg.controller; +package com.czg.controller.admin; import com.czg.enums.CrudEnum; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ConsInfoDTO; import com.czg.product.param.ConsInfoParam; +import com.czg.product.param.ConsReportDamageParam; import com.czg.product.param.ConsSubUnitParam; import com.czg.product.service.ConsInfoService; import com.czg.product.vo.ConsStatisticsVo; @@ -181,4 +182,5 @@ public class ConsInfoController { ConsStatisticsVo data = consInfoService.statistics(param); return CzgResult.success(data); } -} \ No newline at end of file + +} diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java index 4f77cba1..25350ea0 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java @@ -1,9 +1,15 @@ package com.czg.controller.admin; import com.czg.log.annotation.OperationLog; +import com.czg.product.dto.ShopVendorBillPayDTO; import com.czg.product.dto.ShopVendorDTO; import com.czg.product.service.ShopVendorService; +import com.czg.product.vo.ShopVendorBillPayRecordVO; +import com.czg.product.vo.ShopVendorBillRecordVO; +import com.czg.product.vo.ShopVendorBillVO; +import com.czg.product.vo.ShopVendorSummaryVO; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; @@ -98,4 +104,57 @@ public class ShopVendorController { shopVendorService.deleteShopVendor(id); return CzgResult.success(); } -} \ No newline at end of file + + /** + * 供应商账单统计 + * @return 统计信息 + */ + @GetMapping("summary") + @OperationLog("供应商账单-统计") + public CzgResult summary() { + return CzgResult.success(shopVendorService.summary(StpKit.USER.getShopId())); + } + + /** + * 账单列表 + * @return 账单列表 + */ + @GetMapping("/bill") + @OperationLog("供应商账单-列表") + public CzgResult> bill() { + return CzgResult.success(shopVendorService.billList(StpKit.USER.getShopId())); + } + + /** + * 账单记录 + * @return 记录list + */ + @GetMapping("/bill/record") + @OperationLog("供应商账单-列表") + public CzgResult> bill(@RequestParam Integer vendorId) { + return CzgResult.success(shopVendorService.billRecord(StpKit.USER.getShopId(), vendorId)); + } + + + /** + * 账单支付 + * @return 记录list + */ + @PostMapping("/bill/pay") + @OperationLog("供应商账单-付款") + public CzgResult pay(@RequestBody @Validated ShopVendorBillPayDTO payDTO) { + return CzgResult.success(shopVendorService.pay(StpKit.USER.getShopId(), payDTO)); + } + + + /** + * 账单支付记录 + * @return 记录list + */ + @GetMapping("/bill/pay/record") + @OperationLog("供应商账单-付款记录") + public CzgResult> payRecord(@RequestParam Long flowId) { + return CzgResult.success(shopVendorService.payRecord(StpKit.USER.getShopId(), flowId)); + } + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ConsPayRecordDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ConsPayRecordDTO.java new file mode 100644 index 00000000..9bf0b090 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ConsPayRecordDTO.java @@ -0,0 +1,70 @@ + +package com.czg.product.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 耗材付款记录 实体类。 + * + * @author zs + * @since 2025-04-03 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ConsPayRecordDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 供应商id + */ + private Long vendorId; + + /** + * 出入库id + */ + private Long flowId; + + /** + * 付款金额 + */ + private BigDecimal amount; + + /** + * 付款方式 支付宝 微信 银行卡 现金 + */ + private String type; + + /** + * 付款备注 + */ + private String remark; + + /** + * 操作员工id + */ + private Long userId; + + /** + * 创建时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopVendorBillPayDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopVendorBillPayDTO.java new file mode 100644 index 00000000..0c3b35cb --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopVendorBillPayDTO.java @@ -0,0 +1,40 @@ +package com.czg.product.dto; + +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 供应商 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-20 + */ +@Data +public class ShopVendorBillPayDTO { + /** + * 账单记录id + */ + @NotEmpty(message = "账单记录id不能为空") + private List flowIdList; + /** + * 付款金额 + */ + @DecimalMin(value = "0.01", message = "付款金额不能小于0.01") + private BigDecimal amount; + /** + * 付款类型 + */ + @NotBlank(message = "付款类型不能为空") + private String type; + /** + * 备注 + */ + private String remark; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsPayRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsPayRecord.java new file mode 100644 index 00000000..2ad5e28b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsPayRecord.java @@ -0,0 +1,80 @@ +package com.czg.product.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 耗材付款记录 实体类。 + * + * @author zs + * @since 2025-04-03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_cons_pay_record") +@Accessors(chain = true) +public class ConsPayRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 供应商id + */ + private Long vendorId; + + /** + * 出入库id + */ + private Long flowId; + + /** + * 付款金额 + */ + private BigDecimal amount; + + /** + * 付款方式 支付宝 微信 银行卡 现金 + */ + private String type; + + /** + * 付款备注 + */ + private String remark; + + /** + * 操作员工id + */ + private Long userId; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsPayRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsPayRecordService.java new file mode 100644 index 00000000..f0ce528e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsPayRecordService.java @@ -0,0 +1,17 @@ +package com.czg.product.service; + +import com.czg.product.vo.ShopVendorBillPayRecordVO; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.czg.product.entity.ConsPayRecord; + +/** + * 耗材付款记录 服务层。 + * + * @author zs + * @since 2025-04-03 + */ +public interface ConsPayRecordService extends IService { + + Page getByFlowId(Long shopId, Long flowId); +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java index 2086d50e..493d86aa 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java @@ -1,7 +1,12 @@ package com.czg.product.service; +import com.czg.product.dto.ShopVendorBillPayDTO; import com.czg.product.dto.ShopVendorDTO; import com.czg.product.entity.ShopVendor; +import com.czg.product.vo.ShopVendorBillPayRecordVO; +import com.czg.product.vo.ShopVendorBillRecordVO; +import com.czg.product.vo.ShopVendorBillVO; +import com.czg.product.vo.ShopVendorSummaryVO; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; @@ -57,4 +62,33 @@ public interface ShopVendorService extends IService { */ void deleteShopVendor(Long id); -} \ No newline at end of file + ShopVendorSummaryVO summary(Long shopId); + + /** + * 账单列表 + * + * @param shopId 店铺id + * @return 账单 + */ + Page billList(Long shopId); + + /** + * 账单记录明细 + * + * @param shopId 店铺id + * @param vendorId 供应商id + * @return 分页 + */ + Page billRecord(Long shopId, Integer vendorId); + + /** + * 账单付款 + * @param shopId 店铺id + * @param payDTO 数据 + * @return 是否成功 + */ + Boolean pay(Long shopId, ShopVendorBillPayDTO payDTO); + + Page payRecord(Long shopId, Long flowId); + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillPayRecordVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillPayRecordVO.java new file mode 100644 index 00000000..8da07120 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillPayRecordVO.java @@ -0,0 +1,55 @@ +package com.czg.product.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author Administrator + */ +@Data +public class ShopVendorBillPayRecordVO { + /** + * 付款id + */ + private Long id; + /** + * 耗材名称 + */ + private String conName; + /** + * 单价 + */ + private BigDecimal purchasePrice; + /** + * 数量 + */ + private BigDecimal inOutNumber; + /** + * 付款金额 + */ + private BigDecimal amount; + /** + * 付款方式 + */ + private String type; + /** + * 备注 + */ + private String remark; + /** + * 操作账号 + */ + private String account; + /** + * 账号昵称 + */ + private String nickname; + /** + * 编码 + */ + private String code; + private LocalDateTime createTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillRecordVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillRecordVO.java new file mode 100644 index 00000000..1fda90b6 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillRecordVO.java @@ -0,0 +1,50 @@ +package com.czg.product.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author Administrator + */ +@Data +public class ShopVendorBillRecordVO { + /** + * 记录id + */ + private Long id; + /** + * 耗材名称 + */ + private String conName; + /** + * 单价 + */ + private BigDecimal purchasePrice; + /** + * 数量 + */ + private BigDecimal inOutNumber; + /** + * 应付 + */ + private BigDecimal amountPayable; + /** + * 已付 + */ + private BigDecimal actualPaymentAmount; + /** + * 待付 + */ + private BigDecimal unPaidAmount; + /** + * 备注 + */ + private String remark; + /** + * 创建时间 + */ + private LocalDateTime createTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillVO.java new file mode 100644 index 00000000..ac879872 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillVO.java @@ -0,0 +1,37 @@ +package com.czg.product.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author Administrator + */ +@Data +public class ShopVendorBillVO { + /** + * 供应商名称 + */ + private String name; + /** + * 供应商id + */ + private Long vendorId; + /** + * 账单金额 + */ + private BigDecimal amountPayable; + /** + * 已付款金额 + */ + private BigDecimal actualPaymentAmount; + /** + * 未付款金额 + */ + private BigDecimal unPaidAmount; + /** + * 备注 + */ + private String remark; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorSummaryVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorSummaryVO.java new file mode 100644 index 00000000..dc523325 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorSummaryVO.java @@ -0,0 +1,38 @@ +package com.czg.product.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author Administrator + */ +@Data +public class ShopVendorSummaryVO { + /** + * 全部总金额 + */ + private BigDecimal amountPayable = BigDecimal.ZERO; + /** + * 当月总金额 + */ + private BigDecimal mouthAmountPayable = BigDecimal.ZERO; + /** + * 全部支付金额 + */ + private BigDecimal actualPaymentAmount = BigDecimal.ZERO; + /** + * 当月支付金额 + */ + private BigDecimal mouthActualPaymentAmount = BigDecimal.ZERO; + /** + * 待支付金额 + */ + private BigDecimal unPaidAmount = BigDecimal.ZERO; + /** + * 本月待支付金额 + */ + private BigDecimal mouthUnPaidAmount = BigDecimal.ZERO; + + +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsPayRecordMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsPayRecordMapper.java new file mode 100644 index 00000000..c9782f83 --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsPayRecordMapper.java @@ -0,0 +1,18 @@ +package com.czg.service.product.mapper; + +import com.czg.product.vo.ShopVendorBillPayRecordVO; +import com.mybatisflex.core.BaseMapper; +import com.czg.product.entity.ConsPayRecord; + +import java.util.List; + +/** + * 耗材付款记录 映射层。 + * + * @author zs + * @since 2025-04-03 + */ +public interface ConsPayRecordMapper extends BaseMapper { + + List selectByFlowId(Long shopId, Long flowId); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java index 0b8544e7..490a9a67 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java @@ -3,8 +3,13 @@ package com.czg.service.product.mapper; import com.czg.product.entity.ConsStockFlow; import com.czg.product.param.ConsInfoParam; import com.czg.product.vo.ConsStatisticsVo; +import com.czg.product.vo.ShopVendorBillRecordVO; import com.mybatisflex.core.BaseMapper; +import jakarta.validation.constraints.NotEmpty; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 耗材库存变动记录 @@ -15,4 +20,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ConsStockFlowMapper extends BaseMapper { ConsStatisticsVo getConsStatistics(ConsInfoParam param); -} \ No newline at end of file + + List selectByVendorId(@Param("shopId") Long shopId, @Param("vendorId") Integer vendorId); + + List selectUnPaid(@Param("shopId") Long shopId, @Param("vendorIds") @NotEmpty List vendorIds); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java index d689ce2b..07234afa 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java @@ -1,8 +1,13 @@ package com.czg.service.product.mapper; import com.czg.product.entity.ShopVendor; +import com.czg.product.vo.ShopVendorBillVO; +import com.czg.product.vo.ShopVendorSummaryVO; import com.mybatisflex.core.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 供应商 @@ -13,4 +18,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ShopVendorMapper extends BaseMapper { -} \ No newline at end of file + ShopVendorSummaryVO summary(@Param("shopId") Long shopId); + + + List bill(@Param("shopId") Long shopId); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsPayRecordServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsPayRecordServiceImpl.java new file mode 100644 index 00000000..ae5bbd62 --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsPayRecordServiceImpl.java @@ -0,0 +1,28 @@ +package com.czg.service.product.service.impl; + +import com.czg.product.vo.ShopVendorBillPayRecordVO; +import com.czg.utils.PageUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.product.entity.ConsPayRecord; +import com.czg.product.service.ConsPayRecordService; +import com.czg.service.product.mapper.ConsPayRecordMapper; +import org.springframework.stereotype.Service; + +/** + * 耗材付款记录 服务层实现。 + * + * @author zs + * @since 2025-04-03 + */ +@Service +public class ConsPayRecordServiceImpl extends ServiceImpl implements ConsPayRecordService{ + + @Override + public Page getByFlowId(Long shopId, Long flowId) { + PageHelper.startPage(PageUtil.buildPageHelp()); + return PageUtil.convert(new PageInfo<>(mapper.selectByFlowId(shopId, flowId))); + } +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java index 5c0a266b..92ef6de2 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java @@ -1,21 +1,38 @@ package com.czg.service.product.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.czg.enums.DeleteEnum; +import com.czg.exception.ApiNotPrintException; import com.czg.exception.CzgException; +import com.czg.product.dto.ShopVendorBillPayDTO; import com.czg.product.dto.ShopVendorDTO; +import com.czg.product.entity.ConsPayRecord; +import com.czg.product.entity.ConsStockFlow; import com.czg.product.entity.ShopVendor; +import com.czg.product.service.ConsPayRecordService; +import com.czg.product.service.ConsStockFlowService; import com.czg.product.service.ShopVendorService; +import com.czg.product.vo.ShopVendorBillPayRecordVO; +import com.czg.product.vo.ShopVendorBillRecordVO; +import com.czg.product.vo.ShopVendorBillVO; +import com.czg.product.vo.ShopVendorSummaryVO; import com.czg.sa.StpKit; +import com.czg.service.product.mapper.ConsStockFlowMapper; import com.czg.service.product.mapper.ShopVendorMapper; import com.czg.utils.PageUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; /** @@ -26,6 +43,12 @@ import java.util.List; */ @Service public class ShopVendorServiceImpl extends ServiceImpl implements ShopVendorService { + @Resource + private ConsStockFlowMapper consStockFlowMapper; + @Resource + private ConsStockFlowService consStockFlowService; + @Resource + private ConsPayRecordService consPayRecordService; private QueryWrapper buildQueryWrapper(ShopVendorDTO param) { QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper(); @@ -93,4 +116,73 @@ public class ShopVendorServiceImpl extends ServiceImpl billList(Long shopId) { + PageHelper.startPage(PageUtil.buildPageHelp()); + return PageUtil.convert(new PageInfo<>(mapper.bill(shopId))); + } + + @Override + public Page billRecord(Long shopId, Integer vendorId) { + PageHelper.startPage(PageUtil.buildPageHelp()); + return PageUtil.convert(new PageInfo<>(consStockFlowMapper.selectByVendorId(shopId, vendorId))); + } + + @Override + public Boolean pay(Long shopId, ShopVendorBillPayDTO payDTO) { + // 批量付款 + if (payDTO.getFlowIdList().size() > 1) { + List stockFlows = consStockFlowMapper.selectUnPaid(shopId, payDTO.getFlowIdList()); + + BigDecimal unPaidAmount = BigDecimal.ZERO; + ArrayList records = new ArrayList<>(); + for (ConsStockFlow item : stockFlows) { + unPaidAmount = unPaidAmount.add(item.getAmountPayable().subtract(item.getActualPaymentAmount())); + item.setActualPaymentAmount(item.getAmountPayable()); + records.add(new ConsPayRecord().setShopId(shopId).setVendorId(item.getVendorId()).setType(payDTO.getType()) + .setAmount(item.getAmountPayable().subtract(item.getActualPaymentAmount())) + .setFlowId(item.getId()).setUserId(StpKit.USER.getLoginIdAsLong()).setCreateTime(DateUtil.date().toLocalDateTime())); + } + + if (unPaidAmount.compareTo(payDTO.getAmount()) != 0) { + throw new ApiNotPrintException("批量付款应全部付款"); + } + + consPayRecordService.saveBatch(records); + return consStockFlowService.updateBatch(stockFlows); + }else { + ConsStockFlow stockFlow = consStockFlowMapper.selectOneByQuery(new QueryWrapper().eq(ConsStockFlow::getShopId, shopId).eq(ConsStockFlow::getId, payDTO.getFlowIdList().getFirst())); + if (stockFlow == null) { + throw new ApiNotPrintException("付款账单不存在"); + } + + if (stockFlow.getAmountPayable().compareTo(stockFlow.getActualPaymentAmount()) <= 0) { + throw new ApiNotPrintException("次账单已付款完成"); + } + + if (payDTO.getAmount().compareTo(stockFlow.getAmountPayable().subtract(stockFlow.getActualPaymentAmount())) > 0) { + throw new ApiNotPrintException("付款金额不应超过待付款金额"); + } + + ConsPayRecord consPayRecord = BeanUtil.copyProperties(payDTO, ConsPayRecord.class); + consPayRecord.setShopId(shopId); + consPayRecord.setVendorId(stockFlow.getVendorId()); + consPayRecord.setFlowId(payDTO.getFlowIdList().getFirst()); + consPayRecord.setUserId(StpKit.USER.getLoginIdAsLong()); + consPayRecordService.save(consPayRecord); + stockFlow.setActualPaymentAmount(stockFlow.getActualPaymentAmount().add(payDTO.getAmount())); + return consStockFlowMapper.update(stockFlow) > 0; + } + + } + + @Override + public Page payRecord(Long shopId, Long flowId) { + return consPayRecordService.getByFlowId(shopId, flowId); + } +} diff --git a/cash-service/product-service/src/main/resources/mapper/ConsPayRecordMapper.xml b/cash-service/product-service/src/main/resources/mapper/ConsPayRecordMapper.xml new file mode 100644 index 00000000..46ab1958 --- /dev/null +++ b/cash-service/product-service/src/main/resources/mapper/ConsPayRecordMapper.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml b/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml index f8a3a0c4..ad05381b 100644 --- a/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml @@ -5,16 +5,16 @@ - \ No newline at end of file + + + + diff --git a/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml b/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml index 8425ce76..ff7722c1 100644 --- a/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml @@ -3,4 +3,34 @@ - \ No newline at end of file + + +