fubin пре 2 година
родитељ
комит
fd9d2d7c35

+ 7 - 0
src/main/java/com/dk/mdm/mapper/mac/RecPayMapper.java

@@ -35,6 +35,13 @@ public interface RecPayMapper extends BaseMapper<RecPay>{
     RecPayResponse selectById(String id);
     RecPayResponse selectById(String id);
 
 
     /**
     /**
+     * @desc   : 根据BiznisId进行查询
+     * @author : 付斌
+     * @date   : 2024-03-03 9:25
+     */
+    RecPay selectByBiznisIdIdForUpdate(String id);
+
+    /**
      * @desc   : 根据条件进行查询
      * @desc   : 根据条件进行查询
      * @author : 付斌
      * @author : 付斌
      * @date   : 2024-02-28 10:18
      * @date   : 2024-02-28 10:18

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

@@ -115,7 +115,7 @@
             AND t.biznis_type = #{biznisType}
             AND t.biznis_type = #{biznisType}
         </if>
         </if>
         <if test="biznisId != null and biznisId != ''">
         <if test="biznisId != null and biznisId != ''">
-            AND t.biznis_id = #{biznisId}
+            AND t.biznis_id = #{biznisId}::uuid
         </if>
         </if>
         <if test="biznisNo != null and biznisNo != ''">
         <if test="biznisNo != null and biznisNo != ''">
             AND t.biznis_no = #{biznisNo}
             AND t.biznis_no = #{biznisNo}
@@ -274,6 +274,15 @@
         for update
         for update
     </select>
     </select>
 
 
+    <!-- 根据主键锁定表t_mac_rec_pay的一行数据 -->
+    <select id="selectByBiznisIdIdForUpdate" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM dkic_b.t_mac_rec_pay
+        WHERE biznis_id = #{id}::uuid
+        for update
+    </select>
+
     <!-- 根据主键锁定表t_mac_rec_pay的多行数据 -->
     <!-- 根据主键锁定表t_mac_rec_pay的多行数据 -->
     <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
     <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
         SELECT
         SELECT

+ 1 - 0
src/main/java/com/dk/mdm/mapper/sale/OrderMapper.xml

@@ -647,6 +647,7 @@
                t.amt_residue,
                t.amt_residue,
                t.remarks,
                t.remarks,
                t.annex_paths,
                t.annex_paths,
+               t.make_staff,
                makestaff.staff_name                              as "makeStaffName",
                makestaff.staff_name                              as "makeStaffName",
                t.make_time,
                t.make_time,
                t.cp_id
                t.cp_id

+ 162 - 5
src/main/java/com/dk/mdm/service/sale/OrderService.java

@@ -33,8 +33,12 @@ import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.common.service.BaseService;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.pojo.sale.OrderItem;
 import com.dk.mdm.model.pojo.sale.OrderItem;
+import com.dk.mdm.model.query.mac.RecPayItemQuery;
+import com.dk.mdm.model.query.mac.RecPayQuery;
 import com.dk.mdm.model.query.sale.OrderItemQuery;
 import com.dk.mdm.model.query.sale.OrderItemQuery;
 import com.dk.mdm.model.query.sale.OrderQuery;
 import com.dk.mdm.model.query.sale.OrderQuery;
+import com.dk.mdm.model.response.mac.RecPayItemResponse;
+import com.dk.mdm.model.response.mac.RecPayResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
 import com.dk.mdm.model.response.sale.OrderResponse;
 import com.dk.mdm.model.response.sale.OrderResponse;
 import com.dk.mdm.model.vo.mac.RecPayItemVO;
 import com.dk.mdm.model.vo.mac.RecPayItemVO;
@@ -43,6 +47,7 @@ import com.dk.mdm.model.vo.sale.OrderVO;
 import com.dk.mdm.service.common.CommonService;
 import com.dk.mdm.service.common.CommonService;
 import com.dk.mdm.service.mac.AccountService;
 import com.dk.mdm.service.mac.AccountService;
 import com.dk.mdm.service.mac.RecPayItemService;
 import com.dk.mdm.service.mac.RecPayItemService;
+import com.dk.mdm.service.mac.ReceiptService;
 import com.dk.mdm.service.mst.MoneyAccountService;
 import com.dk.mdm.service.mst.MoneyAccountService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -89,6 +94,9 @@ public class OrderService extends BaseService<Order> {
     private RecPayItemService recPayItemService;
     private RecPayItemService recPayItemService;
 
 
     @Autowired
     @Autowired
+    ReceiptService receiptService;
+
+    @Autowired
     private RecPayMapper recPayMapper;
     private RecPayMapper recPayMapper;
 
 
     @Autowired
     @Autowired
@@ -152,9 +160,14 @@ public class OrderService extends BaseService<Order> {
         List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
         List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
         result.put("orderItem", orderItem);
         result.put("orderItem", orderItem);
 
 
-        // 收款
-
-        // 附件
+        // 收款明细
+        List<RecPayResponse> recPayList = recPayMapper.selectByCond(new RecPayQuery().setBiznisId(id));
+        if(recPayList != null && recPayList.size() > 0){
+            List<RecPayItemResponse> receiptItem = recPayItemMapper.selectByCond(new RecPayItemQuery().setRpId(recPayList.get(0).getRpId()));
+            result.put("receiptItem", receiptItem);
+        }else{
+            result.put("receiptItem", new ArrayList<RecPayResponse>());
+        }
         return ResponseResultUtil.success(result);
         return ResponseResultUtil.success(result);
     }
     }
 
 
@@ -383,9 +396,108 @@ public class OrderService extends BaseService<Order> {
                 multiOwnerMapper.insert(multiOwner);
                 multiOwnerMapper.insert(multiOwner);
             }
             }
         }
         }
+        // 更新总单
+        super.update(order, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
+                UUID.fromString(order.getOrderId())));
+
+        /**************************************** 客户收款begin ********************************/
+        // 需要重新计算的资金账户
+        List<String> macList = new ArrayList<>();
+        // 收款明细
+        RecPay recPayForUpdate = recPayMapper.selectByBiznisIdIdForUpdate(orderVO.getOrderId());
+        if(recPayForUpdate != null){
+            // 将之前的明细全部删除
+            List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
+            for (RecPayItem recPayItem : recPayItemOriginalList) {
+                // 删除收付款明细
+                recPayItemMapper.deleteById(recPayItem.getItemId());
+                // 删除账款明细
+                accountItemMapper.deleteById(recPayItem.getAccItemId());
+                // 删除账户流水
+                moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
+
+                if (!macList.contains(recPayItem.getMacId())) {
+                    macList.add(recPayItem.getMacId());
+                }
+            }
+        }
+
+        if (orderVO.getReceiptList() != null && orderVO.getReceiptList().size() > 0) {
+
+            // 计算订单明细的出库中数量,金额合计
+            RecPayItemVO itemSum = orderVO.getReceiptList().stream().reduce((x, y) -> {
+                RecPayItemVO item = new RecPayItemVO();
+                item.setAmtRec(x.getAmtRec().add(y.getAmtRec()));
+                return item;
+            }).get();
+
+            RecPay recPay = null;
+            if(recPayForUpdate == null){
+                recPay = new RecPay();
+                // 获取单号
+                Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.RECPAY.getName(), false);
+                recPay.setRpId(codeMap.get("outId").toString()).setRpNo(codeMap.get("outNote").toString())
+                        .setRpType(Constant.RpType.SHOU_KUAN.getName()).setObjectId(orderVO.getCusId())
+                        .setOrgId(orderVO.getOrgId()).setStaffId(orderVO.getStaffId()).setAccDate(LocalDate.now())
+                        .setBiznisType(Constant.InventoryDocCode.ORDER.getTableName()).setBiznisId(orderVO.getOrderId()).setBiznisNo(orderVO.getOrderNo())
+                        .setMakeStaff(orderVO.getMakeStaff()).setCpId(orderVO.getCpId());
+
+                recPay.setSumAmtRec(itemSum.getAmtRec());
+                recPayMapper.insert(recPay);
+            }else{
+                // 更新收款总额
+                RecPay recPayUpdate = new RecPay();
+                recPayUpdate.setSumAmtRec(itemSum.getAmtRec()).setRpId(recPayForUpdate.getRpId());
+                receiptService.updateByUuid(recPayUpdate);
+
+                // 赋值recPay,下面要用
+                recPay = recPayForUpdate;
+            }
+
+            // 明细保存
+            for (RecPayItemVO recPayItemVO : orderVO.getReceiptList()) {
+                RecPayItem recPayItem = recPayItemConvert.convertToPo(recPayItemVO);
+                recPayItem.setItemId(null).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(recPay.getObjectId()).setOrgId(recPay.getOrgId()).setStaffId(recPay.getStaffId())
+                        .setAccDate(recPay.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtRec(recPayItem.getAmtRec())
+                        .setBiznisType(Constant.InventoryDocCode.REC_PAY_ITEM.getTableName()).setBiznisId(recPayItem.getItemId()).setBiznisNo(recPay.getRpNo())
+                        .setMakeStaff(recPay.getMakeStaff()).setCpId(recPay.getCpId());
+                accountItemMapper.insert(accountItem);
 
 
-        return ResponseResultUtil.success(super.update(order, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
-                UUID.fromString(order.getOrderId()))));
+                // 更新收款单上的账款明细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.getAmtRec()).setAccDate(recPay.getAccDate())
+                        .setMakeStaff(recPayItem.getMakeStaff()).setCpId(recPayItem.getCpId());
+                moneyAccountItemMapper.insert(moneyAccountItem);
+
+                if (!macList.contains(recPayItem.getMacId())) {
+                    macList.add(recPayItem.getMacId());
+                }
+            }
+        }
+        if(recPayForUpdate != null) {
+            // 更新总账表的总收款额和可用额
+            accountService.updateReceipt(recPayForUpdate.getObjectId());
+        }
+
+        // 更新账户余额
+        for (String macId : macList) {
+            accountService.updateMac(macId);
+        }
+        /**************************************** 客户收款end ********************************/
+
+        return ResponseResultUtil.success();
     }
     }
 
 
     /**
     /**
@@ -409,6 +521,42 @@ public class OrderService extends BaseService<Order> {
         orderUpdate.setFlgValid(false).setOrderId(id);
         orderUpdate.setFlgValid(false).setOrderId(id);
         super.update(orderUpdate, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
         super.update(orderUpdate, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
                 UUID.fromString(orderUpdate.getOrderId())));
                 UUID.fromString(orderUpdate.getOrderId())));
+
+
+        // 需要重新计算的资金账户
+        List<String> macList = new ArrayList<>();
+        // 收款明细
+        RecPay recPayForUpdate = recPayMapper.selectByBiznisIdIdForUpdate(id);
+        if(recPayForUpdate != null){
+            // 将之前的明细全部删除
+            List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
+            for (RecPayItem recPayItem : recPayItemOriginalList) {
+                // 删除收付款明细
+                recPayItemMapper.deleteById(recPayItem.getItemId());
+                // 删除账款明细
+                accountItemMapper.deleteById(recPayItem.getAccItemId());
+                // 删除账户流水
+                moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
+
+                if (!macList.contains(recPayItem.getMacId())) {
+                    macList.add(recPayItem.getMacId());
+                }
+            }
+
+            // 更新总账表的总收款额和可用额
+            accountService.updateReceipt(recPayForUpdate.getObjectId());
+
+            // 更新账户余额
+            for (String macId : macList) {
+                accountService.updateMac(macId);
+            }
+
+            // 作废
+            RecPay recPayUpdate = new RecPay();
+            recPayUpdate.setFlgValid(false).setRpId(id);
+            receiptService.updateByUuid(recPayUpdate);
+        }
+
         return ResponseResultUtil.success();
         return ResponseResultUtil.success();
     }
     }
 
 
@@ -425,6 +573,15 @@ public class OrderService extends BaseService<Order> {
         // 商品明细
         // 商品明细
         List<OrderItemResponse> orderItemResponse = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
         List<OrderItemResponse> orderItemResponse = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
         dataInfo.put("dataItem", orderItemResponse);
         dataInfo.put("dataItem", orderItemResponse);
+
+        // 收款明细
+        List<RecPayResponse> recPayList = recPayMapper.selectByCond(new RecPayQuery().setBiznisId(id));
+        if(recPayList != null && recPayList.size() > 0){
+            List<RecPayItemResponse> receiptItem = recPayItemMapper.selectByCond(new RecPayItemQuery().setRpId(recPayList.get(0).getRpId()));
+            dataInfo.put("receiptItem", receiptItem);
+        }else{
+            dataInfo.put("receiptItem", new ArrayList<RecPayResponse>());
+        }
         return ResponseResultUtil.success(dataInfo);
         return ResponseResultUtil.success(dataInfo);
     }
     }