소스 검색

收款相关

fubin 2 년 전
부모
커밋
a31493657e

+ 22 - 0
src/main/java/com/dk/mdm/infrastructure/convert/mac/RecPayHandleItemConvert.java

@@ -0,0 +1,22 @@
+package com.dk.mdm.infrastructure.convert.mac;
+
+import com.dk.mdm.model.pojo.mac.RecPayHandleItem;
+import com.dk.mdm.model.vo.mac.RecPayHandleItemVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : RecPay转换类
+ * @author : 付斌
+ * @date   : 2024-02-28 10:18
+ */
+@Mapper(componentModel = "spring")
+public interface RecPayHandleItemConvert {
+
+    /**
+     * @desc   : 转换vo为pojo
+     * @author : 付斌
+     * @date   : 2024-02-28 15:26
+     */
+    RecPayHandleItem convertToPo(RecPayHandleItemVO recPayHandleItemVO);
+
+}

+ 2 - 0
src/main/java/com/dk/mdm/mapper/mac/AccountItemMapper.xml

@@ -158,6 +158,7 @@
     <!-- 查询应收账款明细 -->
     <select id="getReceivableAccountItem" resultMap="BaseResultMapResponse">
         SELECT t.item_id,
+               t.item_id                                         as "accItemId",
                t.acc_item_type,
                t.object_id,
                tmc.cus_code                                      as "cusCode",
@@ -202,6 +203,7 @@
     <!-- 查询应付账款明细 -->
     <select id="getPayableAccountItem" resultMap="BaseResultMapResponse">
         SELECT t.item_id,
+               t.item_id          as "accItemId",
                t.acc_item_type,
                t.object_id,
                tms.sup_code       as "supCode",

+ 4 - 0
src/main/java/com/dk/mdm/model/response/mac/AccountItemResponse.java

@@ -215,6 +215,10 @@ public class AccountItemResponse extends PageInfo<AccountItemResponse> implement
     @ApiModelProperty(value = "企业ID")
     private Integer cpId;
 
+    @ApiModelProperty(value = "账款明细Id")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String accItemId;
+
     @ApiModelProperty(value = "组织名称")
     private String orgName;
 

+ 6 - 1
src/main/java/com/dk/mdm/model/vo/mac/RecPayVO.java

@@ -220,9 +220,14 @@ public class RecPayVO extends PageInfo<RecPayVO> implements Serializable {
     @ApiModelProperty(value = "企业ID")
     private Integer cpId;
 
-    @ApiModelProperty(value = "明细")
+    @ApiModelProperty(value = "收款明细")
     private List<RecPayItemVO> itemList;
 
+    @ApiModelProperty(value = "总优惠金额")
+    private BigDecimal sumAmtWaiveHandle;
+
+    @ApiModelProperty(value = "应收冲抵明细")
+    private List<RecPayHandleItemVO> receivableList;
 
     private static final long serialVersionUID = 1L;
 

+ 43 - 0
src/main/java/com/dk/mdm/service/mac/AccountService.java

@@ -2,6 +2,7 @@ package com.dk.mdm.service.mac;
 
 import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.annotaiton.Pagination;
+import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
 import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
@@ -109,6 +110,26 @@ public class AccountService extends BaseService<Account> {
         return ResponseResultUtil.success(accountItemResponse);
     }
 
+
+    /*********************  账款部分共通方法 begin **********************/
+    /**
+     * @desc : 获取账款总表,没有则新建(客户)
+     * @author : 付斌
+     * @date : 2024-03-23 16:32
+     */
+    public Account getCusAccountForUpdate(String objectId) {
+        return getAccountForUpdate(objectId, Constant.ObjectType.CUS.getName());
+    }
+
+    /**
+     * @desc : 获取账款总表,没有则新建(客户)
+     * @author : 付斌
+     * @date : 2024-03-23 16:32
+     */
+    public Account getSupAccountForUpdate(String objectId) {
+        return getAccountForUpdate(objectId, Constant.ObjectType.SUP.getName());
+    }
+
     /**
      * @desc : 更新总帐上收款类字段
      * @author : 付斌
@@ -152,4 +173,26 @@ public class AccountService extends BaseService<Account> {
         moneyAccountUpdate.setBalance(sumAmtInflow).setMacId(macId);
         moneyAccountService.updateByUuid(moneyAccountUpdate);
     }
+    /*********************  账款部分共通方法 end **********************/
+
+
+    /*********************  账款部分私有方法 begin **********************/
+    /**
+     * @desc : 获取账款总表,没有则新建(私有方法)
+     * @author : 付斌
+     * @date : 2024-03-23 16:32
+     */
+    private Account getAccountForUpdate(String objectId, String objectType) {
+        // 查询账款总表
+        Account accountForUpdate = accountMapper.selectByIdForUpdate(objectId);
+        // 没有账款对象,需要新建
+        if (accountForUpdate == null) {
+            accountForUpdate = new Account();
+            accountForUpdate.setObjectId(objectId).setObjectType(objectType);
+            accountMapper.insert(accountForUpdate);
+            accountForUpdate = accountMapper.selectByIdForUpdate(objectId);
+        }
+        return accountForUpdate;
+    }
+    /*********************  账款部分私有方法 end **********************/
 }

+ 70 - 28
src/main/java/com/dk/mdm/service/mac/RecPayService.java

@@ -9,25 +9,21 @@ import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.mdm.infrastructure.convert.mac.RecPayConvert;
+import com.dk.mdm.infrastructure.convert.mac.RecPayHandleItemConvert;
 import com.dk.mdm.infrastructure.convert.mac.RecPayItemConvert;
-import com.dk.mdm.mapper.mac.AccountItemMapper;
-import com.dk.mdm.mapper.mac.AccountMapper;
-import com.dk.mdm.mapper.mac.RecPayItemMapper;
+import com.dk.mdm.mapper.mac.*;
 import com.dk.mdm.mapper.mst.MoneyAccountItemMapper;
 import com.dk.mdm.mapper.mst.MoneyAccountMapper;
-import com.dk.mdm.model.pojo.mac.Account;
-import com.dk.mdm.model.pojo.mac.AccountItem;
-import com.dk.mdm.model.pojo.mac.RecPay;
-import com.dk.mdm.mapper.mac.RecPayMapper;
+import com.dk.mdm.model.pojo.mac.*;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
-import com.dk.mdm.model.pojo.mac.RecPayItem;
 import com.dk.mdm.model.pojo.mst.MoneyAccount;
 import com.dk.mdm.model.pojo.mst.MoneyAccountItem;
 import com.dk.mdm.model.query.mac.RecPayItemQuery;
 import com.dk.mdm.model.query.mac.RecPayQuery;
 import com.dk.mdm.model.response.mac.RecPayItemResponse;
 import com.dk.mdm.model.response.mac.RecPayResponse;
+import com.dk.mdm.model.vo.mac.RecPayHandleItemVO;
 import com.dk.mdm.model.vo.mac.RecPayItemVO;
 import com.dk.mdm.model.vo.mac.RecPayVO;
 import com.dk.mdm.service.common.CommonService;
@@ -84,6 +80,9 @@ public class RecPayService extends BaseService<RecPay> {
     private MoneyAccountItemMapper moneyAccountItemMapper;
 
     @Autowired
+    private RecPayHandleItemMapper recPayHandleItemMapper;
+
+    @Autowired
     private CommonService commonService;
 
     @Autowired
@@ -92,6 +91,9 @@ public class RecPayService extends BaseService<RecPay> {
     @Autowired
     private RecPayItemConvert recPayItemConvert;
 
+    @Autowired
+    private RecPayHandleItemConvert recPayHandleItemConvert;
+
     /**
      * @desc : 条件查询
      * @author : 付斌
@@ -175,16 +177,7 @@ public class RecPayService extends BaseService<RecPay> {
         }
 
         // 插入账款总表
-        Account accountForUpdate = accountMapper.selectByIdForUpdate(recPayVO.getObjectId());
-
-        // 没有账款对象,需要新建
-        if (accountForUpdate == null) {
-            accountForUpdate = new Account();
-            accountForUpdate.setObjectId(recPayVO.getObjectId()).setObjectType(Constant.ObjectType.CUS.getName());
-            accountMapper.insert(accountForUpdate);
-            accountForUpdate = accountMapper.selectByIdForUpdate(recPayVO.getObjectId());
-        }
-
+        Account accountForUpdate = accountService.getCusAccountForUpdate(recPayVO.getObjectId());
         // 更新账款总表上收款的相关字段
         Account accountUpdate = new Account();
         accountUpdate.setReceipt(accountForUpdate.getReceipt().add(recPayVO.getSumAmtRec()))// 总收款金额
@@ -367,6 +360,7 @@ public class RecPayService extends BaseService<RecPay> {
     )
     public ResponseResultVO<?> insertReceivableReceipt(RecPayVO recPayVO) {
 
+        /*********************  收款的处理 begin **********************/
         // 获取单号
         Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECPAY.getName(), false);
         recPayVO.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString());
@@ -413,22 +407,70 @@ public class RecPayService extends BaseService<RecPay> {
         }
 
         // 插入账款总表
-        Account accountForUpdate = accountMapper.selectByIdForUpdate(recPayVO.getObjectId());
-
-        // 没有账款对象,需要新建
-        if (accountForUpdate == null) {
-            accountForUpdate = new Account();
-            accountForUpdate.setObjectId(recPayVO.getObjectId()).setObjectType(Constant.ObjectType.CUS.getName());
-            accountMapper.insert(accountForUpdate);
-            accountForUpdate = accountMapper.selectByIdForUpdate(recPayVO.getObjectId());
-        }
-
+        Account accountForUpdate = accountService.getCusAccountForUpdate(recPayVO.getObjectId());
         // 更新账款总表上收款的相关字段
         Account accountUpdate = new Account();
         accountUpdate.setReceipt(accountForUpdate.getReceipt().add(recPayVO.getSumAmtRec()))// 总收款金额
                 .setReceiptResidue(accountForUpdate.getReceiptResidue().add(recPayVO.getSumAmtRec()))//  可退金额
                 .setObjectId(accountForUpdate.getObjectId());
         accountService.updateByUuid(accountUpdate);
+        /*********************  收款的处理 end **********************/
+
+
+        /*********************  应收收款的处理 begin **********************/
+        // 应收收款的处理
+        if (recPayVO.getReceivableList() != null && recPayVO.getReceivableList().size() > 0) {
+            for (RecPayHandleItemVO recPayHandleItemVO : recPayVO.getReceivableList()) {
+                RecPayHandleItem recPayHandleItem = recPayHandleItemConvert.convertToPo(recPayHandleItemVO);
+                recPayHandleItem.setItemId(null).setRpId(recPay.getRpId()).setCpId(recPay.getCpId()).setAccDate(recPay.getAccDate());
+                recPayHandleItemMapper.insert(recPayHandleItem);
+
+                // 账款明细的核销金额和优惠金额
+                AccountItem accountItemForUpdate = accountItemMapper.selectByIdForUpdate(recPayHandleItem.getAccItemId());
+                AccountItem accountItemUpdate = new AccountItem();
+                // 核销金额加优惠金额,超出应收金额
+                if (accountItemForUpdate.getAmtResidue().compareTo(recPayHandleItem.getAmtReceivableHandle().add(recPayHandleItem.getAmtWaive())) == -1) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.AMT_HANDLE_NO_LESS_AMT_SHOULD.getMessage());
+                }
+                accountItemUpdate.setAmtHandle(accountItemForUpdate.getAmtHandle().add(recPayHandleItem.getAmtReceivableHandle()))
+                        .setAmtWaive(accountItemForUpdate.getAmtWaive().add(recPayHandleItem.getAmtWaive()))
+                        .setItemId(recPayHandleItem.getAccItemId());
+                // 剩余金额 = 应收金额-应收收款金额-优惠金额
+                accountItemUpdate.setAmtResidue(accountItemForUpdate.getAmtShould().subtract(accountItemUpdate.getAmtHandle()).subtract(accountItemUpdate.getAmtWaive()));
+                accountItemService.updateByUuid(accountItemUpdate);
+            }
+
+            // 计算明细的核销金额,优惠金额合计
+            RecPayHandleItemVO recPayHandleItemVO = recPayVO.getReceivableList().stream().reduce((x, y) -> {
+                RecPayHandleItemVO item = new RecPayHandleItemVO();
+                item.setAmtReceivableHandle(x.getAmtReceivableHandle().add(y.getAmtReceivableHandle()));
+                item.setAmtWaive(x.getAmtWaive().add(y.getAmtWaive()));
+                return item;
+            }).get();
+
+            // 更新总账上
+            accountForUpdate = accountMapper.selectByIdForUpdate(recPayVO.getObjectId());
+            accountUpdate = new Account();
+            accountUpdate.setReceivableHandle(accountForUpdate.getReceivableHandle().add(recPayHandleItemVO.getAmtReceivableHandle()))// 总应收收款金额
+                    .setReceivableWaive(accountForUpdate.getReceivableWaive().add(recPayHandleItemVO.getAmtWaive()))//  总应收优惠金额
+                    .setObjectId(accountForUpdate.getObjectId());
+            // 剩余应收 = 总应收账款-总应收收款金额-总应收优惠金额
+            accountUpdate.setReceivableResidue(accountForUpdate.getReceivable().subtract(accountUpdate.getReceivableHandle()).subtract(accountUpdate.getReceivableWaive()));
+            // 可退金额 = 总收款金额-总应收收款金额+总应收优惠金额
+            accountUpdate.setReceiptResidue(accountForUpdate.getReceipt().subtract(accountUpdate.getReceivableHandle()).add(accountUpdate.getReceivableWaive()));
+
+            // 更新前的最后校验
+            // 剩余应收为负数,则不能保存
+            if (accountUpdate.getReceivableResidue().compareTo(BigDecimal.ZERO) == -1) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.AMT_HANDLE_NO_LESS_AMT_SHOULD.getMessage());
+            }
+            // 可用金额为负数,则不能保存
+            if (accountUpdate.getReceiptResidue().compareTo(BigDecimal.ZERO) == -1) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.MAC_BALANCE_NO_LESS.getMessage());
+            }
+            accountService.updateByUuid(accountUpdate);
+        }
+        /*********************  应收收款的处理 end **********************/
         return ResponseResultUtil.success();
     }
 }