Explorar el Código

供应商收款相关

于继渤 hace 1 año
padre
commit
690785c6f9

+ 36 - 1
src/main/java/com/dk/mdm/controller/mac/ReceiptController.java

@@ -174,9 +174,44 @@ public class ReceiptController {
      * @author : 于继渤
      * @date : 2024/7/5 10:48
      */
-    @ApiOperation(value = "新建客户收款", notes = "新建客户收款")
+    @ApiOperation(value = "新建供应商收款", notes = "新建供应商收款")
     @PostMapping({"insert_sup_receipt"})
     public ResponseResultVO<?> insertSupReceipt(@RequestBody RecPayVO recPayVO) {
         return receiptService.insertSupReceipt(recPayVO);
     }
+
+    /**
+     * @desc : 新建供应商退款
+     * @author : 于继渤
+     * @date :  2024/7/5 10:48
+     */
+    @ApiOperation(value = "新建供应商退款", notes = "新建供应商退款")
+    @PostMapping({"insert_sup_refund"})
+    public ResponseResultVO<?> insertSupRefund(@RequestBody RecPayVO recPayVO) {
+        return receiptService.insertSupRefund(recPayVO);
+    }
+
+    /**
+     * @desc : 编辑供应商收款/退款
+     * @author : 于继渤
+     * @date :  2024/7/5 10:48
+     */
+    @ApiOperation(value = "编辑供应商收款/退款", notes = "编辑供应商收款/退款")
+    @PostMapping({"update_sup_receipt"})
+    public ResponseResultVO<?> updateSupReceipt(@RequestBody RecPayVO recPayVO) {
+        return receiptService.updateSupReceipt(recPayVO);
+    }
+
+
+
+    /**
+     * @desc : 作废
+     * @author : 于继渤
+     * @date : 2024-03-08 16:36
+     */
+    @ApiOperation(value = "作废", notes = "作废")
+    @PostMapping({"invalid_sup/{id}"})
+    public ResponseResultVO<?> invalidSup(@PathVariable String id) {
+        return receiptService.invalidSup(id);
+    }
 }

+ 3 - 1
src/main/java/com/dk/mdm/mapper/mac/RecPayMapper.xml

@@ -550,7 +550,9 @@
                t.flg_valid,
                t.cp_id,
                tma.receivable_residue,
-               tma.receipt_residue
+               tma.receipt_residue,
+               tma.payable_residue,
+               tma.payment_residue
         from dkic_b.t_mac_rec_pay as t
                  left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
                  left join dkic_b.t_mst_supplier tmsp on tmsp.sup_id = t.object_id

+ 3 - 0
src/main/java/com/dk/mdm/mapper/mst/SupplierMapper.xml

@@ -119,6 +119,9 @@ op_update_time, op_update_user_id, op_app_code, op_timestamp, op_db_user,return_
             <if test="supType != null and supType != ''">
                 AND msl.sup_type = #{supType}
             </if>
+            <if test="supTypeList != null and supTypeList.size() >0">
+                AND msl.sup_type = any(#{supTypeList, typeHandler=StringListTypeHandler})
+            </if>
             <if test="contactName != null and contactName != ''">
                 AND msl.contact_name = #{contactName}
             </if>

+ 3 - 0
src/main/java/com/dk/mdm/model/query/mst/SupplierQuery.java

@@ -155,6 +155,9 @@ import java.time.LocalDateTime;
 
 
 
+        @ApiModelProperty(value = "供应商类别")
+        @TableField(typeHandler = StringListTypeHandler.class)
+        private List<String> supTypeList;
 
 
 

+ 259 - 3
src/main/java/com/dk/mdm/service/mac/ReceiptService.java

@@ -807,13 +807,269 @@ public class ReceiptService extends BaseService<RecPay> {
         }
 
         // 插入账款总表
-        Account accountForUpdate = accountService.getCusAccountForUpdate(recPayVO.getObjectId());
+        Account accountForUpdate = accountService.getSupAccountForUpdate(recPayVO.getObjectId());
         // 更新账款总表上收款的相关字段
         Account accountUpdate = new Account();
-        accountUpdate.setReceipt(accountForUpdate.getReceipt().add(recPayVO.getSumAmtPay()))// 总收款金额
-                .setReceiptResidue(accountForUpdate.getReceiptResidue().add(recPayVO.getSumAmtPay()))//  可退金额
+        accountUpdate.setPayment(accountForUpdate.getPayment().add(recPayVO.getSumAmtPay()))// 总收款金额
+                .setPaymentResidue(accountForUpdate.getPaymentResidue().add(recPayVO.getSumAmtPay()))//  可退金额
+                .setObjectId(accountForUpdate.getObjectId());
+        accountService.updateByUuid(accountUpdate);
+        return ResponseResultUtil.success();
+    }
+
+
+
+    /**
+     * @desc : 新建供应商退款
+     * @author : 于继渤
+     * @date :  2024/7/5 10:48
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public ResponseResultVO<?> insertSupRefund(RecPayVO recPayVO) {
+
+        // 查总账,看可退金额是否满足
+        Account accountForUpdate = accountMapper.selectByIdForUpdate(recPayVO.getObjectId());
+        // 获取单号
+        Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECPAY.getName(), false);
+        recPayVO.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString());
+        // 转化实体
+        RecPay recPay = recPayConvert.convertToPo(recPayVO);
+        // 总单保存
+        super.insert(recPay);
+
+        // 明细保存
+        if (recPayVO.getItemList() != null && recPayVO.getItemList().size() > 0) {
+            for (RecPayItemVO recPayItemVO : recPayVO.getItemList()) {
+                RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
+                recPayItem.setRpId(recPay.getRpId()).setCpId(recPay.getCpId()).setMakeStaff(recPay.getMakeStaff()).setAccDate(recPay.getAccDate());
+                recPayItemMapper.insert(recPayItem);
+
+                // 插入账款明细
+                AccountItem accountItem = new AccountItem();
+                accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
+                        .setObjectId(recPayVO.getObjectId()).setOrgId(recPayVO.getOrgId()).setStaffId(recPayVO.getStaffId())
+                        .setAccDate(recPayVO.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtPay(recPayItem.getAmtPay())
+                        .setBiznisType("t_mac_rec_pay_item").setBiznisId(recPayItem.getItemId()).setBiznisNo(recPayVO.getRpNo())
+                        .setMakeStaff(recPayVO.getMakeStaff()).setCpId(recPayVO.getCpId());
+                accountItemMapper.insert(accountItem);
+
+                // 更新收款单上的账款明细Id
+                RecPayItem recPayItemUpdate = new RecPayItem();
+                recPayItemUpdate.setAccItemId(accountItem.getItemId()).setItemId(recPayItem.getItemId());
+                recPayItemService.updateByUuid(recPayItemUpdate);
+
+                // 插入资金流水
+                MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
+                moneyAccountItem.setMacId(recPayItem.getMacId()).setFlowType(Constant.FlowType.SHOU_FU_KUAN.getName())
+                        .setInvoiceId(recPayItem.getItemId()).setAmtInflow(recPayItem.getAmtPay()).setAccDate(recPayVO.getAccDate())
+                        .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
+                moneyAccountItemMapper.insert(moneyAccountItem);
+
+                // 更新资金账户
+                MoneyAccount moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(recPayItem.getMacId());
+                MoneyAccount moneyAccountUpdate = new MoneyAccount();
+                moneyAccountUpdate.setBalance(moneyAccountForUpdate.getBalance().add(recPayItem.getAmtPay()))
+                        .setMacId(moneyAccountForUpdate.getMacId());
+
+                // 如果账户不允许为负数
+                if (!moneyAccountForUpdate.getFlgNegative()) {
+                    // 如果余额小于0 ,则提示余额不足
+                    if (moneyAccountUpdate.getBalance().compareTo(BigDecimal.ZERO) == -1) {
+                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.MAC_BALANCE_NO_LESS.getMessage());
+                    }
+                }
+                moneyAccountService.updateByUuid(moneyAccountUpdate);
+            }
+        }
+
+        // 更新账款总表上收款的相关字段
+        Account accountUpdate = new Account();
+        // 新建
+        if(accountForUpdate == null ){
+            // TODO 退货新客户插入的问题
+        }else{
+            // 说明已经存在
+            accountUpdate.setPayment(accountForUpdate.getPayment().add(recPayVO.getSumAmtPay()))// 总收款金额
+                    .setPaymentResidue(accountForUpdate.getPaymentResidue().add(recPayVO.getSumAmtPay()))//  可退金额
+                    .setObjectId(accountForUpdate.getObjectId());
+            accountService.updateByUuid(accountUpdate);
+        }
+
+        return ResponseResultUtil.success();
+    }
+
+    /**
+     * @desc : 编辑供应商收款/退款
+     * @author : 于继渤
+     * @date : 2023/1/9 10:49
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public ResponseResultVO<?> updateSupReceipt(RecPayVO recPayVO) {
+        RecPay recPayForUpdate = recPayMapper.selectByIdForUpdate(recPayVO.getRpId());
+        // 并发校验
+        if (!recPayForUpdate.getFlgValid()) {
+            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
+        }
+
+        // 将之前的明细全部删除
+        List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayVO.getRpId());
+        // 需要重新计算的资金账户
+        List<String> macList = new ArrayList<>();
+        for (RecPayItem recPayItem : recPayItemOriginalList) {
+            // 删除收付款明细
+//            recPayItemMapper.deleteById(recPayItem.getItemId());
+            //            改为更新false
+            RecPayItem recPayItemNew = new RecPayItem();
+            recPayItemNew.setItemId(recPayItem.getItemId()).setFlgValid(false);
+            recPayItemService.updateByUuid(recPayItemNew);
+            // 删除账款明细
+            accountItemMapper.deleteById(recPayItem.getAccItemId());
+            // 删除账户流水
+            moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
+
+            if (!macList.contains(recPayItem.getMacId())) {
+                macList.add(recPayItem.getMacId());
+            }
+        }
+
+        // 新增明细
+        for (RecPayItemVO recPayItemVO : recPayVO.getItemList()) {
+            RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
+            recPayItem.setItemId(null).setRpId(recPayVO.getRpId()).setCpId(recPayVO.getCpId());
+            recPayItemMapper.insert(recPayItem);
+
+            // 插入账款明细
+            AccountItem accountItem = new AccountItem();
+            accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
+                    .setObjectId(recPayVO.getObjectId()).setOrgId(recPayVO.getOrgId()).setStaffId(recPayVO.getStaffId())
+                    .setAccDate(recPayVO.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtPay(recPayItem.getAmtPay())
+                    .setBiznisType("t_mac_rec_pay_item").setBiznisId(recPayItem.getItemId()).setBiznisNo(recPayVO.getRpNo())
+                    .setMakeStaff(recPayVO.getMakeStaff()).setCpId(recPayVO.getCpId());
+            accountItemMapper.insert(accountItem);
+
+            // 更新收款单上的账款明细Id
+            RecPayItem recPayItemUpdate = new RecPayItem();
+            recPayItemUpdate.setAccItemId(accountItem.getItemId()).setItemId(recPayItem.getItemId());
+            recPayItemService.updateByUuid(recPayItemUpdate);
+
+            // 插入资金流水
+            MoneyAccountItem moneyAccountItem = new MoneyAccountItem();
+            moneyAccountItem.setMacId(recPayItem.getMacId()).setFlowType(Constant.FlowType.SHOU_FU_KUAN.getName())
+                    .setInvoiceId(recPayItem.getItemId()).setAmtInflow(recPayItem.getAmtPay()).setAccDate(recPayVO.getAccDate())
+                    .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
+            moneyAccountItemMapper.insert(moneyAccountItem);
+
+            if (!macList.contains(recPayItem.getMacId())) {
+                macList.add(recPayItem.getMacId());
+            }
+        }
+
+        // 更新总账表的总收款额和可用额
+        accountService.updatePayment(recPayVO.getObjectId());
+        // 更新账户余额
+        for (String macId : macList) {
+            accountService.updateMac(macId);
+        }
+
+        // 更新收款单总表
+        RecPay recPay = recPayConvert.convertToPo(recPayVO);
+        return ResponseResultUtil.success(super.updateByUuid(recPay));
+    }
+
+
+
+    /**
+     * @desc : 作废
+     * @author : 于继渤
+     * @date : 2024-03-08 16:38
+     */
+    public ResponseResultVO<?> invalidSup(String id) {
+        RecPay recPayForUpdate = recPayMapper.selectByIdForUpdate(id);
+        // 并发校验
+        if (!recPayForUpdate.getFlgValid()) {
+            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
+        }
+        // 240624 问完付斌后
+//        if(recPayForUpdate.getBiznisId() != null){
+//            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVOICE_FORBID_EDIT.getMessage());
+//        }
+        // 如果所在月份已结账,则不能作废 todo
+
+        // 查出并锁定所有应收核销明细
+        AccountItem accountItemForUpdate;
+        List<RecPayHandleItem> recPayHandleItemForUpdateList = recPayHandleItemMapper.selectByZIdForUpdate(id);
+        for (RecPayHandleItem recPayHandleItemForUpdate : recPayHandleItemForUpdateList) {
+            // 更新账款明细应收收款
+            accountItemForUpdate = accountItemMapper.selectByIdForUpdate(recPayHandleItemForUpdate.getAccItemId());
+            AccountItem accountItemUpdate = new AccountItem();
+            accountItemUpdate.setAmtHandle(accountItemForUpdate.getAmtHandle().subtract(recPayHandleItemForUpdate.getAmtPayableHandle()))
+                    .setAmtWaive(accountItemForUpdate.getAmtWaive().subtract(recPayHandleItemForUpdate.getAmtWaive()))
+                    .setItemId(recPayHandleItemForUpdate.getAccItemId());
+            accountItemUpdate.setAmtResidue(accountItemForUpdate.getAmtShould().subtract(accountItemUpdate.getAmtHandle()).subtract(accountItemUpdate.getAmtWaive()));
+            accountItemService.updateByUuid(accountItemUpdate);
+
+            // 将核销明细有效标识置为false
+            RecPayHandleItem recPayHandleItemUpdate = new RecPayHandleItem();
+            recPayHandleItemUpdate.setFlgValid(false).setItemId(recPayHandleItemForUpdate.getItemId());
+            recPayHandleItemService.updateByUuid(recPayHandleItemUpdate);
+        }
+
+        // 把总帐上的钱加回来
+        Account accountForUpdate = accountMapper.selectByIdForUpdate(recPayForUpdate.getObjectId());
+        Account accountUpdate = new Account();
+        accountUpdate.setPayableHandle(accountForUpdate.getPayableHandle().subtract(recPayForUpdate.getSumAmtPayableHandle()))// 总应收收款金额
+                .setPayableWaive(accountForUpdate.getPayableWaive().subtract(recPayForUpdate.getSumWaiveAmt()))//  总应收优惠金额
                 .setObjectId(accountForUpdate.getObjectId());
+        // 剩余应收 = 总应收账款-总应收收款金额
+        accountUpdate.setPaymentResidue(accountForUpdate.getPayable().subtract(accountUpdate.getPayableHandle()));
+        // 可退金额 = 总收款金额-总应收收款金额+总应收优惠金额
+        accountUpdate.setPaymentResidue(accountForUpdate.getPayment().subtract(accountUpdate.getPayableHandle()).add(accountUpdate.getPayableWaive()));
+
+        // 更新前的最后校验
+        // 剩余应收为负数,则不能保存
+//        if (accountUpdate.getReceivableResidue().compareTo(BigDecimal.ZERO) == -1) {
+//            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.AMT_HANDLE_NO_LESS_AMT_SHOULD.getMessage());
+//        }
+        // 可用金额为负数,则不能保存
+        if (accountUpdate.getPaymentResidue().compareTo(BigDecimal.ZERO) == -1) {
+            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RESIDUE_NO_LESS.getMessage());
+        }
         accountService.updateByUuid(accountUpdate);
+
+        // 将之前的明细全部删除
+        List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(id);
+        // 需要重新计算的资金账户
+        List<String> macList = new ArrayList<>();
+        for (RecPayItem recPayItem : recPayItemOriginalList) {
+            // 删除收付款明细
+//            recPayItemMapper.deleteById(recPayItem.getItemId());
+//            改为更新false
+            RecPayItem recPayItemNew = new RecPayItem();
+            recPayItemNew.setItemId(recPayItem.getItemId()).setFlgValid(false);
+            recPayItemService.updateByUuid(recPayItemNew);
+            // 删除账款明细
+            accountItemMapper.deleteById(recPayItem.getAccItemId());
+            // 删除账户流水
+            moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
+
+            if (!macList.contains(recPayItem.getMacId())) {
+                macList.add(recPayItem.getMacId());
+            }
+        }
+        // 更新总账表的总收款额和可用额
+        accountService.updatePayment(recPayForUpdate.getObjectId());
+        // 更新账户余额
+        for (String macId : macList) {
+            accountService.updateMac(macId);
+        }
+        // 作废
+        RecPay recPayUpdate = new RecPay();
+        recPayUpdate.setFlgValid(false).setRpId(id);
+        super.updateByUuid(recPayUpdate);
         return ResponseResultUtil.success();
     }