fubin 2 лет назад
Родитель
Сommit
79fdebd172

+ 20 - 3
src/main/java/com/dk/mdm/controller/sale/OutReturnController.java

@@ -18,7 +18,7 @@ import java.util.Map;
 @Api(tags = "出库退货API接口")
 @RestController
 @RequestMapping("/sale/outReturn")
-public class OutReturnController{
+public class OutReturnController {
 
     public BaseService<OutReturn> getService() {
         return outReturnService;
@@ -39,9 +39,9 @@ public class OutReturnController{
     }
 
     /**
-     * @desc   : 查询明细信息
+     * @desc : 查询明细信息
      * @author : 付斌
-     * @date   : 2024-03-07 16:36
+     * @date : 2024-03-07 16:36
      */
     @PostMapping({"select_out_return_info_by_id/{id}"})
     public ResponseResultVO<Map<String, Object>> selectOutReturnInfoById(@PathVariable String id) {
@@ -59,6 +59,12 @@ public class OutReturnController{
         return outReturnService.insert(outReturnVO);
     }
 
+    @ApiOperation(value = "编辑出库单", notes = "编辑出库单")
+    @PostMapping({"update"})
+    public ResponseResultVO<Boolean> update(@RequestBody OutReturnVO outReturnVO) {
+        return outReturnService.update(outReturnVO);
+    }
+
     /**
      * @desc : 作废
      * @author : 付斌
@@ -69,4 +75,15 @@ public class OutReturnController{
     public ResponseResultVO<?> invalid(@PathVariable String id) {
         return outReturnService.invalid(id);
     }
+
+    /**
+     * @desc : 获取退货信息(编辑用)
+     * @author : 付斌
+     * @date : 2024-03-12 13:16
+     */
+    @ApiOperation(value = "获取退货信息(编辑用)", notes = "获取退货信息(编辑用)")
+    @PostMapping({"get_out_return_for_update/{id}"})
+    public ResponseResultVO<?> getOutReturnForUpdate(@PathVariable String id) {
+        return outReturnService.getOutReturnForUpdate(id);
+    }
 }

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

@@ -338,7 +338,7 @@
                tmgs.sku_code                                        as "skuCode",
                tmgs.sku_model                                       as "skuModel",
                tmgs.sku_name                                        as "skuName",
-               tpobi.out_qty                                        as out_qty,
+               tpobi.out_qty                                        as "outboundOutQty",
                tpobi.out_qty - tpobi.return_qty                     as "canReturnQty",
                tpobi.out_qty - tpobi.return_qty                     as item_qty,
                t.price_std,

+ 21 - 23
src/main/java/com/dk/mdm/mapper/sale/OutReturnItemMapper.xml

@@ -291,35 +291,33 @@
     <!-- 根据条件进行查询(退货编辑用) -->
     <select id="selectByCondForReturnEdit" resultMap="BaseResultMapResponse">
         SELECT t.item_id,
+               t.return_id,
                t.out_id,
-               t.from_item_id,
-               t.from_id,
+               t.out_item_id,
+               t.order_id,
+               t.order_item_id,
                t.item_index,
                t.sku_id,
-               tmgs.sku_code                                  as "skuCode",
-               tmgs.sku_model                                 as "skuModel",
-               tmgs.sku_name                                  as "skuName",
-               tpoi.item_qty                                  as "orderQty",
-               tpoi.item_qty - tpoi.outing_qty + t.outing_qty as "canOutingQty",
-               t.outing_qty,
-               t.price_out,
-               t.outing_amt,
-               t.out_qty,
-               t.out_amt,
+               tmgs.sku_code                                 as "skuCode",
+               tmgs.sku_model                                as "skuModel",
+               tmgs.sku_name                                 as "skuName",
+               tpobi.out_qty                                 as "outboundOutQty",
+               tpobi.out_qty - tpobi.return_qty + t.item_qty as "canReturnQty",
+               t.item_qty,
+               t.price_std,
+               t.amt_std,
+               t.price_return,
+               t.item_amt,
                t.non_std_code,
-               t.remarks,
-               t.inv_id,
-               tpi.wh_id                                      as "whId",
-               tpi.inv_qty                                    as "invQty",
-               tpi.usable_qty                                 as "usableQty",
-               tmw.wh_name                                    as "whName"
-        FROM t_psi_outbound_item as t
-                 left join dkic_b.t_psi_order_item as tpoi on tpoi.item_id = t.from_item_id
-                 left join dkic_b.t_mst_goods_sku tmgs on tpoi.sku_id = tmgs.sku_id
-                 left join dkic_b.t_psi_inventory as tpi on tpi.inv_id = t.inv_id
+               t.remarks
+        FROM t_psi_out_return_item as t
+                 left join t_psi_outbound_item as tpobi on tpobi.item_id = t.out_item_id
+                 left join dkic_b.t_psi_order_item as tpoi on tpoi.item_id = tpobi.from_item_id
+                 left join dkic_b.t_mst_goods_sku tmgs on tpobi.sku_id = tmgs.sku_id
+                 left join dkic_b.t_psi_inventory as tpi on tpi.inv_id = tpobi.inv_id
                  left join dkic_b.t_mst_warehouse as tmw on tmw.wh_id = tpi.wh_id
         where t.flg_valid
-          and t.out_id = #{id}::uuid
+          and t.return_id = #{id}::uuid
         order by t.item_index
     </select>
 </mapper>

+ 58 - 5
src/main/java/com/dk/mdm/mapper/sale/OutReturnMapper.xml

@@ -309,11 +309,64 @@
     </select>
 
     <!-- 根据主键查询表t_psi_out_return的一行数据 -->
-    <select id="selectById" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_psi_out_return
-        WHERE return_id = #{returnId}::uuid
+    <select id="selectById" resultMap="BaseResultMapResponse">
+        SELECT t.return_id,
+               t.return_no,
+               t.return_type,
+               t.order_id,
+               t.order_no,
+               t.org_id,
+               tmo.org_name                                      as "orgName",
+               t.staff_id,
+               tms.staff_name                                    as "staffName",
+               t.cus_id,
+               tmc.cus_code                                      as "cusCode",
+               tmc.cus_name                                      as "cusName",
+               tmc.cus_phone                                     as "cusPhone",
+               tmc.cus_from                                      as "cusFrom",
+               tmdd.data_value                                   as "cusFromName",
+               t.address_area,
+               t.address_name,
+               t.address_no,
+               t.address_gcj02,
+               t.address_full,
+               t.contact_name,
+               t.contact_phone,
+               t.sales_channel,
+               tmsc.channel_name                                 as "channelName",
+               t.pickup_date,
+               t.sum_quantity,
+               t.sum_standard,
+               t.sum_amount,
+               t.sale_discount,
+               t.return_status,
+               sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) as "returnStatusName",
+               t.into_status,
+               sys.f_get_name_i18n(tdk2.kind_name_i18n, #{i18n}) as "intoStatusName",
+               t.intoing_qty,
+               t.intoing_amt,
+               t.into_qty,
+               t.into_amt,
+               t.amt_receivable,
+               t.amt_handle,
+               t.amt_residue,
+               t.remarks,
+               t.annex_paths,
+               t.make_staff,
+               makestaff.staff_name                              as "makeStaffName",
+               t.make_time,
+               t.cp_id,
+               t.flg_valid
+        FROM t_psi_out_return as t
+                 left join dkic_b.t_mst_sale_channel tmsc on t.sales_channel = tmsc.channel_id
+                 left join dkic_b.t_mst_org tmo on t.org_id = tmo.org_id
+                 left join dkic_b.t_mst_staff tms on t.staff_id = tms.staff_id
+                 left join dkic_b.t_mst_staff as makestaff on t.make_staff = makestaff.staff_id
+                 left join dkic_b.t_mst_customer tmc on t.cus_id = tmc.cus_id
+                 left join dkic_b.t_mst_dictionary_data tmdd on tmc.cus_from = tmdd.data_id
+                 left join sys.t_data_kind as tdk1 on t.return_status = tdk1.kind_code
+                 left join sys.t_data_kind as tdk2 on t.into_status = tdk2.kind_code
+        WHERE t.return_id = #{id}::uuid
     </select>
 
     <!-- 根据主键锁定表t_psi_out_return的一行数据 -->

+ 3 - 0
src/main/java/com/dk/mdm/model/response/sale/OrderItemResponse.java

@@ -321,6 +321,9 @@ public class OrderItemResponse extends PageInfo<OrderItemResponse> implements Se
     @ApiModelProperty(value = "订单明细ID")
     private String orderItemId;
 
+    @ApiModelProperty(value = "已出库数量")
+    private BigDecimal outboundOutQty;
+
     @ApiModelProperty(value = "可退货数量")
     private BigDecimal canReturnQty;
 

+ 7 - 0
src/main/java/com/dk/mdm/model/response/sale/OutReturnItemResponse.java

@@ -295,6 +295,13 @@ public class OutReturnItemResponse extends PageInfo<OutReturnItemResponse> imple
     @ApiModelProperty(value = "出库单号")
     private String outNo;
 
+    @ApiModelProperty(value = "已出库数量")
+    private BigDecimal outboundOutQty;
+
+    @ApiModelProperty(value = "可退货数量")
+    private BigDecimal canReturnQty;
+
+
     /*
      * 相关属性
      * @TableField(exist = false)

+ 7 - 8
src/main/java/com/dk/mdm/service/ivt/OutboundService.java

@@ -187,18 +187,17 @@ public class OutboundService extends BaseService<Outbound> {
     public ResponseResultVO<Boolean> update(OutboundVO outboundVO) {
         // 订单明细实体
         OrderItem orderItemForUpdate;
-        // 订单明细实体
+        // 出库明细实体
         OutboundItem outboundItemForUpdate;
 
         // 编辑出库明细
         List<OutboundItemVO> editOutboundItemVOList = outboundVO.getItemList();
         for (OutboundItemVO outboundItemVO : editOutboundItemVOList) {
+            outboundItemForUpdate = outboundItemMapper.selectByIdForUpdate(outboundItemVO.getItemId());
             // 出库中数量不能小于出库数量
-            if (outboundItemVO.getOutingQty().compareTo(outboundItemVO.getOutQty()) == -1) {
+            if (outboundItemForUpdate.getOutingQty().compareTo(outboundItemVO.getOutQty()) == -1) {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.OUTINGQTY_NO_LESS_OUTQTY.getMessage());
             }
-
-            outboundItemForUpdate = outboundItemMapper.selectByIdForUpdate(outboundItemVO.getItemId());
             orderItemForUpdate = orderItemMapper.selectByIdForUpdate(outboundItemVO.getFromItemId());
 
             // 订单的商品数量不能小于(订单之前的出库中数量 - 出库明细之前的出库中数量 + 出库明细现在的出库中数量)
@@ -298,14 +297,14 @@ public class OutboundService extends BaseService<Outbound> {
      * @date : 2024-03-02 17:27
      */
     public ResponseResultVO<?> getOutboundForUpdate(String id) {
-        Map<String, Object> outboundInfo = new HashMap<>();
+        Map<String, Object> dataInfo = new HashMap<>();
         OutboundResponse outboundResponse = outboundMapper.selectById(id);
-        outboundInfo.put("outbound", outboundResponse);
+        dataInfo.put("data", outboundResponse);
 
         // 商品明细
         List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCondForOutEdit(id);
-        outboundInfo.put("outboundItem", outboundItemResponseList);
-        return ResponseResultUtil.success(outboundInfo);
+        dataInfo.put("dataItem", outboundItemResponseList);
+        return ResponseResultUtil.success(dataInfo);
     }
 
     /**

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

@@ -227,14 +227,14 @@ public class OrderService extends BaseService<Order> {
      * @date : 2024-03-02 17:27
      */
     public ResponseResultVO<?> getOrderForUpdate(String id) {
-        Map<String, Object> orderInfo = new HashMap<>();
+        Map<String, Object> dataInfo = new HashMap<>();
         OrderResponse orderResponse = orderMapper.selectById(id);
-        orderInfo.put("order", orderResponse);
+        dataInfo.put("data", orderResponse);
 
         // 商品明细
         List<OrderItemResponse> orderItem = orderItemMapper.selectByCond(new OrderItemQuery().setOrderId(id));
-        orderInfo.put("orderItem", orderItem);
-        return ResponseResultUtil.success(orderInfo);
+        dataInfo.put("dataItem", orderItem);
+        return ResponseResultUtil.success(dataInfo);
     }
 
     /**
@@ -243,14 +243,14 @@ public class OrderService extends BaseService<Order> {
      * @date : 2024-03-02 17:27
      */
     public ResponseResultVO<?> getOrderForOut(String id) {
-        Map<String, Object> orderInfo = new HashMap<>();
+        Map<String, Object> dataInfo = new HashMap<>();
         OrderResponse orderResponse = orderMapper.selectById(id);
-        orderInfo.put("order", orderResponse);
+        dataInfo.put("data", orderResponse);
 
         // 商品明细
         List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForOut(new OrderItemQuery().setOrderId(id));
-        orderInfo.put("orderItem", orderItem);
-        return ResponseResultUtil.success(orderInfo);
+        dataInfo.put("dataItem", orderItem);
+        return ResponseResultUtil.success(dataInfo);
     }
 
     /**
@@ -259,13 +259,13 @@ public class OrderService extends BaseService<Order> {
      * @date : 2024-03-02 17:27
      */
     public ResponseResultVO<?> getOrderForReturn(String id) {
-        Map<String, Object> orderInfo = new HashMap<>();
+        Map<String, Object> dataInfo = new HashMap<>();
         OrderResponse orderResponse = orderMapper.selectById(id);
-        orderInfo.put("order", orderResponse);
+        dataInfo.put("data", orderResponse);
 
         // 商品明细
         List<OrderItemResponse> orderItem = orderItemMapper.selectByCondForReturn(new OrderItemQuery().setOrderId(id));
-        orderInfo.put("orderItem", orderItem);
-        return ResponseResultUtil.success(orderInfo);
+        dataInfo.put("dataItem", orderItem);
+        return ResponseResultUtil.success(dataInfo);
     }
 }

+ 97 - 7
src/main/java/com/dk/mdm/service/sale/OutReturnService.java

@@ -27,8 +27,6 @@ import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.sale.OutReturnItemQuery;
 import com.dk.mdm.model.query.sale.OutReturnQuery;
-import com.dk.mdm.model.response.ivt.OutboundItemResponse;
-import com.dk.mdm.model.response.ivt.OutboundResponse;
 import com.dk.mdm.model.response.sale.OutReturnItemResponse;
 import com.dk.mdm.model.response.sale.OutReturnResponse;
 import com.dk.mdm.model.vo.sale.OutReturnItemVO;
@@ -216,6 +214,98 @@ public class OutReturnService extends BaseService<OutReturn> {
     }
 
     /**
+     * @desc : 编辑方法
+     * @author : 付斌
+     * @date : 2023/1/9 10:49
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public ResponseResultVO<Boolean> update(OutReturnVO outReturnVO) {
+        // 订单明细实体
+        OrderItem orderItemForUpdate;
+        // 出库明细实体
+        OutboundItem outboundItemForUpdate;
+        // 退货明细实体
+        OutReturnItem outReturnItemForUpdate;
+        // 出库IdList,一个退货单可能有多个出库单
+        List<String> outIdList = new ArrayList<>();
+
+        // 编辑退货明细
+        List<OutReturnItemVO> editOutReturnItemVOList = outReturnVO.getItemList();
+        for (OutReturnItemVO outReturnItemVO : editOutReturnItemVOList) {
+            // 把出库Id存起来
+            if (!outIdList.contains(outReturnItemVO.getOutId())) {
+                outIdList.add(outReturnItemVO.getOutId());
+            }
+
+            outReturnItemForUpdate = outReturnItemMapper.selectByIdForUpdate(outReturnItemVO.getItemId());
+            // 退货数量不能小于入库中数量
+            if (outReturnItemVO.getItemQty().compareTo(outReturnItemForUpdate.getIntoingQty()) == -1) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RETURNQTY_NO_LESS_INTOINGQTY.getMessage());
+            }
+
+            outboundItemForUpdate = outboundItemMapper.selectByIdForUpdate(outReturnItemVO.getOutItemId());
+            // 出库数量不能小于(出库明细的退货数量 - 退货明细之前的退货数量 + 退货明细现在的退货数量)
+            if (outboundItemForUpdate.getOutQty().compareTo(outboundItemForUpdate.getReturnQty().subtract(outReturnItemForUpdate.getItemQty()).add(outReturnItemVO.getItemQty())) == -1) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.OUTQTY_NO_LESS_RETURNQTY.getMessage());
+            }
+            // 更新出库明细退货数量
+            OutboundItem outboundItemUpdate = new OutboundItem();
+            outboundItemUpdate.setReturnQty(outboundItemForUpdate.getReturnQty().subtract(outReturnItemForUpdate.getItemQty()).add(outReturnItemVO.getItemQty()))
+                    .setReturnAmt(outboundItemForUpdate.getReturnAmt().subtract(outReturnItemForUpdate.getItemAmt()).add(outReturnItemVO.getItemAmt()))
+                    .setItemId(outboundItemForUpdate.getItemId());
+            outboundItemService.updateByUuid(outboundItemUpdate);
+
+            // 更新订单明细退货数量
+            orderItemForUpdate = orderItemMapper.selectByIdForUpdate(outReturnItemVO.getOrderItemId());
+            OrderItem orderItemUpdate = new OrderItem();
+            orderItemUpdate.setReturnQty(orderItemForUpdate.getReturnQty().subtract(outReturnItemForUpdate.getItemQty()).add(outReturnItemVO.getItemQty()))
+                    .setReturnAmt(orderItemForUpdate.getReturnAmt().subtract(outReturnItemForUpdate.getItemAmt()).add(outReturnItemVO.getItemAmt()))
+                    .setItemId(orderItemForUpdate.getItemId());
+            orderItemService.updateByUuid(orderItemUpdate);
+
+            // 更新退货明细
+            OutReturnItem outReturnItem = outReturnItemConvert.convertToPo(outReturnItemVO);
+            outReturnItemService.updateByUuid(outReturnItem);
+        }
+
+        // 可能有多个出库单,所以要循环更新总单
+        for (String outId : outIdList) {
+            // 计算出库明细的退货数量,金额合计
+            List<OutboundItem> outboundItemList = outboundItemMapper.selectByZIdForUpdate(outId);
+            OutboundItem outboundItem = outboundItemList.stream().reduce((x, y) -> {
+                OutboundItem item = new OutboundItem();
+                item.setReturnQty(x.getReturnQty().add(y.getReturnQty()));
+                item.setReturnAmt(x.getReturnAmt().add(y.getReturnAmt()));
+                return item;
+            }).get();
+            // 更新订单上的出库中数量,金额
+            Outbound outboundUpdate = new Outbound();
+            outboundUpdate.setReturnQty(outboundItem.getReturnQty()).setReturnAmt(outboundItem.getReturnAmt()).setOutId(outId);
+            outboundService.updateByUuid(outboundUpdate);
+        }
+
+        // 计算订单明细的退货数量,金额合计
+        List<OrderItem> orderItemList = orderItemMapper.selectByZIdForUpdate(outReturnVO.getOrderId());
+        OrderItem orderItem = orderItemList.stream().reduce((x, y) -> {
+            OrderItem item = new OrderItem();
+            item.setReturnQty(x.getReturnQty().add(y.getReturnQty()));
+            item.setReturnAmt(x.getReturnAmt().add(y.getReturnAmt()));
+            return item;
+        }).get();
+        // 更新订单上的出库中数量,金额
+        Order orderUpdate = new Order();
+        orderUpdate.setReturnQty(orderItem.getReturnQty()).setReturnAmt(orderItem.getReturnAmt()).setOrderId(outReturnVO.getOrderId());
+        orderService.updateByUuid(orderUpdate);
+
+        // 转化实体、更新退货单总表
+        OutReturn outReturn = outReturnConvert.convertToPo(outReturnVO);
+        return ResponseResultUtil.success(super.update(outReturn, new UpdateWrapper<OutReturn>().lambda().eq(OutReturn::getReturnId,
+                UUID.fromString(outReturn.getReturnId()))));
+    }
+
+    /**
      * @desc : 作废
      * @author : 付斌
      * @date : 2024-03-08 16:38
@@ -223,7 +313,7 @@ public class OutReturnService extends BaseService<OutReturn> {
     public ResponseResultVO<?> invalid(String id) {
         OutReturn outReturnForUpdate = outReturnMapper.selectByIdForUpdate(id);
         // 并发校验
-        if(!outReturnForUpdate.getFlgValid()){
+        if (!outReturnForUpdate.getFlgValid()) {
             throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
         }
 
@@ -298,13 +388,13 @@ public class OutReturnService extends BaseService<OutReturn> {
      * @date : 2024-03-02 17:27
      */
     public ResponseResultVO<?> getOutReturnForUpdate(String id) {
-        Map<String, Object> outReturnInfo = new HashMap<>();
+        Map<String, Object> dataInfo = new HashMap<>();
         OutReturnResponse outReturnResponse = outReturnMapper.selectById(id);
-        outReturnInfo.put("outReturn", outReturnResponse);
+        dataInfo.put("data", outReturnResponse);
 
         // 商品明细
         List<OutReturnItemResponse> outReturnItemResponseList = outReturnItemMapper.selectByCondForReturnEdit(id);
-        outReturnInfo.put("outReturnItem", outReturnItemResponseList);
-        return ResponseResultUtil.success(outReturnInfo);
+        dataInfo.put("dataItem", outReturnItemResponseList);
+        return ResponseResultUtil.success(dataInfo);
     }
 }