Parcourir la source

Merge branch 'master' of http://git.dongkesoft.com:9001/iBOSS-2.0-Mini/iboss-server-mdm

changhaoning il y a 1 an
Parent
commit
1a734787ce

+ 13 - 0
src/main/java/com/dk/mdm/controller/sale/OrderController.java

@@ -174,4 +174,17 @@ public class OrderController {
     public ResponseResultVO<PageList> getOrderTrackReport(@RequestBody Map<String, Object> param) {
         return orderService.getOrderTrackReport(param);
     }
+
+
+    /**
+     * @desc : 作废
+     * @author : 付斌
+     * @date : 2024-03-08 16:36
+     */
+    @ApiOperation(value = "作废", notes = "作废")
+    @PostMapping({"one_key_invalid/{id}"})
+    public ResponseResultVO<?> oneKeyInvalid(@PathVariable String id) {
+        return orderService.oneKeyInvalid(id);
+    }
+
 }

+ 9 - 0
src/main/java/com/dk/mdm/mapper/ivt/InboundItemMapper.java

@@ -91,5 +91,14 @@ public interface InboundItemMapper extends BaseMapper<InboundItem>{
      * @author : 寇珊珊
      */
     int deleteItemByFromId(@Param("fromId") String fromId);
+
+    /**
+     * @desc   : 查询入库价
+     * @date   : 2024/7/1 11:07
+     * @author : 寇珊珊
+     */
+    List<InboundItemResponse> selectPriceInto(InboundItemQuery inboundItemQuery);
+
+
 }
 

+ 16 - 0
src/main/java/com/dk/mdm/mapper/ivt/InboundItemMapper.xml

@@ -715,4 +715,20 @@
         DELETE FROM dkic_b.t_psi_inbound_item
         WHERE from_id = #{fromId}::uuid
     </delete>
+
+    <!--查询入库价-->
+    <select id="selectPriceInto"  resultMap="BaseResultMapResponse">
+        SELECT
+        ti.item_id,ti.price_into,ti.cost_price,ti.cost_amt
+        FROM dkic_b.t_psi_inbound_item ti
+        left join dkic_b.t_psi_inbound t ON ti.order_id = t.order_id
+        where  t.flg_valid
+        and ti.flg_valid
+        and ti.price_into > 0
+        and t.into_type != '外协入库'
+        and ti.wh_id #{whId}
+        and ti.sku_id =#{skuId}
+        and ti.non_std_code = #{nonStdCode}
+        order by make_time desc
+    </select>
 </mapper>

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

@@ -99,6 +99,7 @@
         <result column="out_amt" property="outAmt"/>
         <result column="return_qty" property="returnQty"/>
         <result column="return_amt" property="returnAmt"/>
+        <result column="channel_id" property="channelId" typeHandler="UuidTypeHandler"/>
 <!--        <result column="amt_receivable" property="amtReceivable"/>-->
 <!--        <result column="amt_handle" property="amtHandle"/>-->
 <!--        <result column="amt_residue" property="amtResidue"/>-->
@@ -454,6 +455,9 @@
             <if test="outStatusList != null and outStatusList.size() > 0">
                 AND t.out_status  =any(#{outStatusList, typeHandler=StringListTypeHandler})
             </if>
+            <if test="salesChannelList != null and salesChannelList.size() > 0">
+                AND t.sales_channel  =any(#{salesChannelList, typeHandler=uuidListTypeHandler})
+            </if>
             <if test="deliveryDateStart != null and deliveryDateEnd != null">
                 AND t.delivery_date &gt;= #{deliveryDateStart}::timestamp with time zone
                 AND t.delivery_date &lt; #{deliveryDateEnd}::timestamp with time zone + interval '1 day'
@@ -758,6 +762,7 @@
                t.contact_name,
                t.contact_phone,
                t.sales_channel,
+               tmsc.channel_id ,
                tmsc.channel_name                                 as "channelName",
                t.delivery_date,
                sys.f_remove_zero(t.sum_quantity) as sum_quantity,
@@ -786,7 +791,9 @@
                t.discount,
                t.fact_amt,
                t.disc_amt,
-               tmo.flg_business
+               tmo.flg_business,
+               t.outbound_processing_flag,
+               t.flg_auto_handle
         FROM dkic_b.t_psi_order 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

+ 4 - 0
src/main/java/com/dk/mdm/model/query/ivt/InboundItemQuery.java

@@ -327,6 +327,10 @@ public class InboundItemQuery extends PageInfo<InboundItemQuery>  {
     @ApiModelProperty(value = "入库状态")
     private List<String> intoStatusList;
 
+    @TableField(typeHandler = UuidTypeHandler.class)
+    @ApiModelProperty(value = "入库仓库")
+    private String whId;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 3 - 0
src/main/java/com/dk/mdm/model/query/sale/OrderQuery.java

@@ -356,6 +356,9 @@ public class OrderQuery extends PageInfo<OrderQuery> implements Serializable {
     @ApiModelProperty(value = "业务员List")
     private List<String> staffIdList;
 
+    @ApiModelProperty(value = "销售渠道List")
+    private List<String> salesChannelList;
+
     @ApiModelProperty(value = "出库状态List")
     private List<String> outStatusList;
 

+ 3 - 0
src/main/java/com/dk/mdm/model/vo/ivt/InOutRecordVO.java

@@ -237,6 +237,9 @@ public class InOutRecordVO  {
     @TableField(typeHandler = UuidTypeHandler.class)
     private String makeStaff;
 
+    @ApiModelProperty(value = "原仓库ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String whIdPri;
 
 
 

+ 4 - 0
src/main/java/com/dk/mdm/model/vo/ivt/InboundItemVO.java

@@ -278,6 +278,10 @@ public class InboundItemVO  {
     @ApiModelProperty(value = "成本核对标识")
     private Boolean flgCostCheck;
 
+    @ApiModelProperty(value = "原仓库ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String whIdPri;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 3 - 0
src/main/java/com/dk/mdm/model/vo/ivt/OutboundItemVO.java

@@ -337,6 +337,9 @@ public class OutboundItemVO {
     @ApiModelProperty(value = "修改订单总单信息(存未修改时候的出库中金额)")
     private  BigDecimal updateOrderOutingAmt;
 
+    @ApiModelProperty(value = "原仓库ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String whIdPri;
 
 
     private static final long serialVersionUID = 1L;

+ 43 - 8
src/main/java/com/dk/mdm/service/ivt/inbound/InboundCheckService.java

@@ -70,6 +70,23 @@ public class InboundCheckService extends BaseService<Inbound> {
 
 
     /**
+     * @desc   : 查询入库价
+     * @date   : 2024/7/1 11:29
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public InboundItemResponse selectPriceInto(InboundItemVO inboundItemVO) {
+        List<InboundItemResponse> inboundItemResponses = inboundItemMapper.selectPriceInto(new InboundItemQuery().setSkuId(inboundItemVO.getSkuId())
+                .setNonStdCode(inboundItemVO.getNonStdCode())
+                .setWhId(inboundItemVO.getWhId()));
+        if (inboundItemResponses != null && inboundItemResponses.size() > 0) {
+            return inboundItemResponses.get(0);
+        }
+        return null;
+    }
+
+
+    /**
      * @desc : 盘盈入库新建、库存调整-入库  \ 新建商品档案->期初入库
      * @date : 2024/3/7 14:13
      * 入库中数量/金额  已入库数量/金额  由调用方传入
@@ -95,6 +112,32 @@ public class InboundCheckService extends BaseService<Inbound> {
         inboundVO.setItemList(inboundItemVOList);
         //endregion
 
+        //region 校验明细
+        if (inboundVO.getItemList().size() == 0) {
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+                    ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+        }
+        //endregion
+
+        //region  查询当前入库明细中是否存在未空或者0的入库价,如果存在去库存流水差最近一条有价格的数据赋值到当前明细
+        Boolean priceIntoFlag = false;
+        for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+            if(inboundItemVO.getPriceInto()==null || inboundItemVO.getPriceInto().compareTo(BigDecimal.ZERO)==0){
+                priceIntoFlag = true;
+                //查询库存批次最近一条入库价
+                InboundItemResponse inboundItemResponse = this.selectPriceInto(inboundItemVO);
+                inboundItemVO.setPriceInto(inboundItemResponse != null ? inboundItemResponse.getPriceInto() : BigDecimal.ZERO);
+                inboundItemVO.setIntoingAmt(inboundItemResponse != null ? inboundItemResponse.getPriceInto().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+                inboundItemVO.setCostPrice(inboundItemResponse != null ? inboundItemResponse.getCostPrice() : BigDecimal.ZERO);
+                inboundItemVO.setCostAmt(inboundItemResponse != null ? inboundItemResponse.getCostPrice().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+            }
+        }
+        if(priceIntoFlag){
+            BigDecimal intoingAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            inboundVO.setIntoingAmt(intoingAmt);
+        }
+        //endregion
+
         //region  总单
         //获取 id/单号
         Map<String, Object> codeMap = new HashMap<>();
@@ -125,11 +168,6 @@ public class InboundCheckService extends BaseService<Inbound> {
         //endregion
 
         //region 明细
-        //校验明细
-        if (inboundVO.getItemList().size() == 0) {
-            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
-                    ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
-        }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
             //region 明细
             //总单id
@@ -142,9 +180,6 @@ public class InboundCheckService extends BaseService<Inbound> {
                     .setIntoAmt(inboundItemVO.getIntoingAmt())
                     .setIntoingQty(BigDecimal.ZERO)
                     .setIntoingAmt(BigDecimal.ZERO)
-                    .setCostPrice(inboundItemVO.getPriceInto())
-                    .setCostAmt(inboundItemVO.getIntoQty()
-                            .multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
             ;
 
             //入库状态

+ 46 - 6
src/main/java/com/dk/mdm/service/ivt/inbound/InboundOtherService.java

@@ -14,6 +14,7 @@ import com.dk.common.service.BaseService;
 import com.dk.mdm.infrastructure.convert.ivt.InboundConvert;
 import com.dk.mdm.infrastructure.convert.ivt.InboundItemConvert;
 import com.dk.mdm.mapper.common.CommonMapper;
+import com.dk.mdm.mapper.ivt.InOutRecordMapper;
 import com.dk.mdm.mapper.ivt.InboundItemMapper;
 import com.dk.mdm.mapper.ivt.InboundMapper;
 import com.dk.mdm.model.pojo.ivt.Inbound;
@@ -44,6 +45,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 
 /**
@@ -81,6 +83,7 @@ public class InboundOtherService extends BaseService<Inbound> {
     private InventoryService inventoryService;
 
 
+
     /**
      * @desc : 条件查询
      * @date : 2024/3/7 14:12
@@ -110,12 +113,54 @@ public class InboundOtherService extends BaseService<Inbound> {
     }
 
     /**
+     * @desc   : 查询入库价
+     * @date   : 2024/7/1 11:29
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public InboundItemResponse selectPriceInto(InboundItemVO inboundItemVO) {
+        List<InboundItemResponse> inboundItemResponses = inboundItemMapper.selectPriceInto(new InboundItemQuery().setSkuId(inboundItemVO.getSkuId())
+                .setNonStdCode(inboundItemVO.getNonStdCode())
+                .setWhId(inboundItemVO.getWhId()));
+        if (inboundItemResponses != null && inboundItemResponses.size() > 0) {
+            return inboundItemResponses.get(0);
+        }
+        return null;
+    }
+
+    /**
      * @desc : 其他入库新建
      * @date : 2024/3/7 14:13
      * @author : 寇珊珊
      */
     @Transactional(rollbackFor = {Exception.class})
     public ResponseResultVO<?> otherInboundInsert(InboundVO inboundVO) {
+        //校验明细
+        if (inboundVO.getItemList().size() == 0) {
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+                    ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+        }
+
+        //region  查询当前入库明细中是否存在未空或者0的入库价,如果存在去库存流水差最近一条有价格的数据赋值到当前明细
+        Boolean priceIntoFlag = false;
+        for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+            if(inboundItemVO.getPriceInto()==null || inboundItemVO.getPriceInto().compareTo(BigDecimal.ZERO)==0){
+                priceIntoFlag = true;
+                //查询库存批次最近一条入库价
+                InboundItemResponse inboundItemResponse = this.selectPriceInto(inboundItemVO);
+                inboundItemVO.setPriceInto(inboundItemResponse != null ? inboundItemResponse.getPriceInto() : BigDecimal.ZERO);
+                inboundItemVO.setIntoingAmt(inboundItemResponse != null ? inboundItemResponse.getPriceInto().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+                inboundItemVO.setCostPrice(inboundItemResponse != null ? inboundItemResponse.getCostPrice() : BigDecimal.ZERO);
+                inboundItemVO.setCostAmt(inboundItemResponse != null ? inboundItemResponse.getCostPrice().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+            }
+        }
+        if(priceIntoFlag){
+            BigDecimal intoingAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            inboundVO.setIntoingAmt(intoingAmt);
+        }
+        //endregion
+
+
         //region  查询当前公司的系统参数  自动办理信息  并赋值
         Map<String, Object> map = new HashMap<>();
         map.put("cpId", inboundVO.getCpId());
@@ -162,11 +207,6 @@ public class InboundOtherService extends BaseService<Inbound> {
         //endregion
 
         //region 明细
-        //校验明细
-        if (inboundVO.getItemList().size() == 0) {
-            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
-                    ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
-        }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
             //region 将库存需要的参数赋值
             inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
@@ -212,7 +252,6 @@ public class InboundOtherService extends BaseService<Inbound> {
         }
         //endregion
 
-
         return ResponseResultUtil.success(inboundVO);
     }
 
@@ -305,6 +344,7 @@ public class InboundOtherService extends BaseService<Inbound> {
                         InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
                         inboundItemMapper.insert(inboundItem);
                         inboundItemVO.setItemId(inboundItem.getItemId());
+
                         //region 将库存需要的参数赋值
                         inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
                         inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_INBOUND.getValue());

+ 41 - 5
src/main/java/com/dk/mdm/service/ivt/inbound/InboundPurchaseService.java

@@ -118,6 +118,22 @@ public class InboundPurchaseService extends BaseService<Inbound> {
     }
 
     /**
+     * @desc   : 查询入库价
+     * @date   : 2024/7/1 11:29
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public InboundItemResponse selectPriceInto(InboundItemVO inboundItemVO) {
+        List<InboundItemResponse> inboundItemResponses = inboundItemMapper.selectPriceInto(new InboundItemQuery().setSkuId(inboundItemVO.getSkuId())
+                .setNonStdCode(inboundItemVO.getNonStdCode())
+                .setWhId(inboundItemVO.getWhId()));
+        if (inboundItemResponses != null && inboundItemResponses.size() > 0) {
+            return inboundItemResponses.get(0);
+        }
+        return null;
+    }
+
+    /**
      * @desc : 采购入库新建
      * @date : 2024/3/7 14:13
      * 入库中数量/金额  已入库数量/金额  由调用方传入
@@ -125,6 +141,31 @@ public class InboundPurchaseService extends BaseService<Inbound> {
      */
     @Transactional(rollbackFor = {Exception.class})
     public ResponseResultVO<?> purchaseInboundInsert(InboundVO inboundVO) {
+        //region 校验明细
+        if (inboundVO.getItemList().size() == 0) {
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+                    ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+        }
+        //endregion
+
+        //region  查询当前入库明细中是否存在未空或者0的入库价,如果存在去库存流水差最近一条有价格的数据赋值到当前明细
+        Boolean priceIntoFlag = false;
+        for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+            if(inboundItemVO.getPriceInto()==null || inboundItemVO.getPriceInto().compareTo(BigDecimal.ZERO)==0){
+                priceIntoFlag = true;
+                //查询库存批次最近一条入库价
+                InboundItemResponse inboundItemResponse = this.selectPriceInto(inboundItemVO);
+                inboundItemVO.setPriceInto(inboundItemResponse != null ? inboundItemResponse.getPriceInto() : BigDecimal.ZERO);
+                inboundItemVO.setIntoingAmt(inboundItemResponse != null ? inboundItemResponse.getPriceInto().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+                inboundItemVO.setCostPrice(inboundItemResponse != null ? inboundItemResponse.getCostPrice() : BigDecimal.ZERO);
+                inboundItemVO.setCostAmt(inboundItemResponse != null ? inboundItemResponse.getCostPrice().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+            }
+        }
+        if(priceIntoFlag){
+            BigDecimal intoingAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            inboundVO.setIntoingAmt(intoingAmt);
+        }
+        //endregion
 
         //region  查询当前公司的系统参数  自动办理信息  并赋值
         Map<String, Object> map = new HashMap<>();
@@ -206,11 +247,6 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         //endregion
 
         //region 明细
-        //校验明细
-        if (inboundVO.getItemList().size() == 0) {
-            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
-                    ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
-        }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
 
             //region 将库存需要的参数赋值

+ 2 - 1
src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java

@@ -1162,7 +1162,8 @@ public class InventoryService extends BaseService<Inventory> {
             //region  校验库存  根据sku,仓库,非标号查询
             InventoryResponse inventoryResponse = inventoryMapper.selectByOther(new InventoryQuery()
                     .setSkuId(inOutRecordVO.getSkuId())
-                    .setWhId(inOutRecordVO.getWhId())
+                    //原库存id存在取原库存id
+                    .setWhId(inOutRecordVO.getWhIdPri()==null ? inOutRecordVO.getWhId() : inOutRecordVO.getWhIdPri())
                     .setNonStdCode(inOutRecordVO.getNonStdCode()));
             //库存是否存在
             if (inventoryResponse == null) {

+ 168 - 0
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -25,6 +25,7 @@ import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.mdm.model.pojo.sale.OrderItem;
+import com.dk.mdm.model.query.ivt.InboundItemQuery;
 import com.dk.mdm.model.query.ivt.InventoryQuery;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.query.ivt.OutboundQuery;
@@ -1891,6 +1892,173 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         }
     }
 
+
+    /**
+     * @desc   : 销售出库一键作废
+     * @date   : 2024/7/1 13:29
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public ResponseResultVO<?> oneKeySaleOutboundRepeal(String orderId) {
+        List<OutboundItemResponse> outboundItemResponses = outboundItemMapper.selectByCond(new OutboundItemQuery().setFromId(orderId));
+        if (outboundItemResponses != null && outboundItemResponses.size() > 0) {
+            Map<String, List<OutboundItemResponse>> outboundItemVOMap = outboundItemResponses.stream().collect(Collectors.groupingBy(OutboundItemResponse::getOutId));
+            for (String str : outboundItemVOMap.keySet()) {
+                //region  查询总单  查询明细
+                //根据id查询 此条出库单的数据还未更改前的数据
+                OutboundResponse outboundResponse = outboundMapper.selectById(str);
+                //根据总单id查询
+                List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
+
+                //endregion
+
+                //region 已出库状态作废
+                if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                    //region 应收反记账
+                    if (outboundResponse.getReceivableId() != null) {
+                        accountService.reverseReceivable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
+                    }
+                    //endregion
+
+                    //region 修改明细
+                    for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
+                        //region 将库存需要的参数赋值
+                        outboundItemResponse.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
+                        outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
+                        outboundItemResponse.setOutQty(outboundItemResponse.getOutQty());
+                        outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt());
+                        //endregion
+
+                        //赋值  防止作废的单据查不到明细 故注掉下面代码
+//                OutboundItem outboundItem = new OutboundItem();
+//                outboundItem.setItemId(outboundItemResponse.getItemId());
+//                outboundItem.setFlgValid(false);
+//                //修改
+//                outboundItemMapper.update(outboundItem,
+//                        new UpdateWrapper<OutboundItem>().lambda()
+//                                .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+//                );
+
+                        //region  销售明细
+                        if (outboundItemResponse.getFromItemId() != null) {
+                            //根据id查询
+                            OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
+                            OrderItem orderItem = new OrderItem();
+                            orderItem.setItemId(outboundItemResponse.getFromItemId());
+                            orderItem.setOutQty(outboundItemResponse.getOutQty().negate());
+                            orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate());
+                            //出库状态
+                            String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty(),
+                                    orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
+                            orderItem.setOutStatus(orderOutStatus);
+                            int countRow = orderItemMapper.updateById(orderItem);
+                            //数量超出
+                            if (countRow == 0) {
+                                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                            }
+                        }
+                        //endregion
+                    }
+                    //endregion
+
+                    //region  修改出库总单
+                    Outbound outbound = new Outbound();
+                    outbound.setOutId(outboundResponse.getOutId());
+                    outbound.setFlgValid(false);
+                    //修改
+                    outboundMapper.update(outbound,
+                            new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
+                    );
+                    //endregion
+
+                    //region 修改销售总单
+                    this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
+                    //endregion
+
+                    //region 外协品新建外协入库单
+                    //筛选出skuId为空的 走外协品逻辑
+                    OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
+                    List<OutboundItemResponse> outsideGoods = outboundItemResponseList.stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
+                    List<OutboundItemVO> outsideGoodsVOList = outboundItemConvert.convertResListToVOList(outsideGoods);
+                    //删除外协品生产外协入库单
+                    this.deleteOutsideGoodsInto(outboundVO, outsideGoodsVOList);
+                    //endregion
+
+                    //region  修改库存
+                    //筛选出skuId不为空的 走库存
+                    List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
+                    if (invList != null && invList.size() > 0) {
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("delOutDetail", invList);
+                        inventoryService.operatingInventoryInformation(map);
+                    }
+                    //endregion
+                }
+                //endregion
+
+                //region 出库中、待出库状态作废
+                if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus()) ||
+                        Constant.OutStatus.DAICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                    //region 修改明细
+                    for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
+                        //region 修改明细
+                        //赋值
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemResponse.getItemId());
+                        outboundItem.setOutingQty(BigDecimal.ZERO);
+                        outboundItem.setOutingAmt(BigDecimal.ZERO);
+//                outboundItem.setFlgValid(false);
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                        //endregion
+
+                        //region  销售明细
+                        if (outboundItemResponse.getFromItemId() != null) {
+                            //根据id查询
+                            OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
+                            OrderItem orderItem = new OrderItem();
+                            orderItem.setItemId(outboundItemResponse.getFromItemId());
+                            orderItem.setOutingQty(outboundItemResponse.getOutingQty().negate());
+                            orderItem.setOutingAmt(outboundItemResponse.getOutingAmt().negate());
+                            //出库状态
+                            String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
+                                    orderItemResponse.getOutQty(), orderItemResponse.getItemQty());
+                            orderItem.setOutStatus(orderOutStatus);
+                            int countRow = orderItemMapper.updateById(orderItem);
+                            //数量超出
+                            if (countRow == 0) {
+                                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                            }
+                        }
+                        //endregion
+                    }
+                    //endregion
+
+                    //region  修改出库总单
+                    Outbound outbound = new Outbound();
+                    outbound.setOutId(outboundResponse.getOutId());
+                    outbound.setOutingQty(BigDecimal.ZERO);
+                    outbound.setOutingAmt(BigDecimal.ZERO);
+                    outbound.setFlgValid(false);
+                    //修改
+                    outboundMapper.update(outbound,
+                            new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
+                    );
+                    //endregion
+
+                    //region 修改销售总单
+                    this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
+                    //endregion
+                }
+                //endregion
+            }
+        }
+        return ResponseResultUtil.success();
+    }
+
     /**
      * @desc : 出库状态通用(目前本页面)
      * @date : 2024/3/9 8:59

+ 2 - 0
src/main/java/com/dk/mdm/service/mst/GoodsSkuService.java

@@ -141,6 +141,8 @@ public class GoodsSkuService extends BaseService<GoodsSku> {
 			inboundItemVO.setIntoingQty(goodsSkuVO.getIntoQty());
 			inboundItemVO.setIntoingAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
 			inboundItemVO.setPriceInto(goodsSkuVO.getPriceInto());
+			inboundItemVO.setCostPrice(goodsSkuVO.getPriceInto());
+			inboundItemVO.setIntoAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
 			inboundItemVO.setIntoQty(goodsSkuVO.getIntoQty());
 			inboundItemVO.setItemIndex(0);
 			inboundItemVO.setSkuId(goodsSku.getSkuId());

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

@@ -15,6 +15,7 @@ import com.dk.mdm.infrastructure.convert.sale.OrderConvert;
 import com.dk.mdm.infrastructure.convert.sale.OrderItemConvert;
 import com.dk.mdm.infrastructure.convert.sale.OutBoundDtoConvert;
 import com.dk.mdm.mapper.common.CommonMapper;
+import com.dk.mdm.mapper.ivt.OutboundItemMapper;
 import com.dk.mdm.mapper.mac.AccountItemMapper;
 import com.dk.mdm.mapper.mac.RecPayHandleItemMapper;
 import com.dk.mdm.mapper.mac.RecPayItemMapper;
@@ -37,6 +38,7 @@ import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.pojo.sale.OrderItem;
+import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.query.mac.RecPayItemQuery;
 import com.dk.mdm.model.query.mac.RecPayQuery;
 import com.dk.mdm.model.query.sale.MultiOwnerQuery;
@@ -146,6 +148,9 @@ public class OrderService extends BaseService<Order> {
     @Autowired
     private OutBoundDtoConvert outBoundDtoConvert;
 
+    @Autowired
+    private OutboundItemMapper outboundItemMapper;
+
     /**
      * @desc : 条件查询
      * @author : 付斌
@@ -521,8 +526,21 @@ public class OrderService extends BaseService<Order> {
         for (OrderItemVO orderItemVO : insertOrderItemVOList) {
             OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
             orderItem.setOrderId(order.getOrderId()).setCpId(order.getCpId()).setOutStatus(Constant.OutStatus.DAICHUKU.getName());
+            orderItem.setItemId(UUID.randomUUID().toString());
             orderItemMapper.insert(orderItem);
+            orderItemVO.setItemId(orderItem.getItemId());
+            orderItemVO.setOrderId(orderVO.getOrderId());
+        }
+
+        // 商户产品版本
+        String gradeCode = "PRO";
+        Map<String, Object> paramCompany = new HashMap<>();
+        paramCompany.put("cpId", orderVO.getCpId());
+        List<Map<String, Object>> listCompany = commonMapper.getCompany(paramCompany);
+        if (listCompany.size() > 0) {
+            gradeCode = listCompany.get(0).get("gradeCode").toString();
         }
+
         // 编辑的
         List<OrderItemVO> editOrderItemVOList = orderVO.getItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
         for (OrderItemVO orderItemVO : editOrderItemVOList) {
@@ -535,12 +553,43 @@ public class OrderService extends BaseService<Order> {
             }
             // 如果出库数量不是0,则不能改仓库
             if (outintOrOutQty.compareTo(BigDecimal.ZERO) != 0) {
-                if (!orderItemForUpdate.getWhId().equals(orderItemVO.getWhId())) {
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORDER_ISOUT.getMessage());
-                }
+               if(orderItemForUpdate.getSkuId()!=null){ //过滤外协品
+                   if (!orderItemForUpdate.getWhId().equals(orderItemVO.getWhId())) {
+                       throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORDER_ISOUT.getMessage());
+                   }
+               }
             }
             OrderItem orderItem = orderItemConvert.convertToPo(orderItemVO);
             orderItemService.updateByUuid(orderItem);
+            // 免费版:
+            // 订单编辑钱保存,要更改对应出库单的钱
+            // 订单编辑数量保存,要更改对应出库单数量,并且更新库存;更改后数量不能小于退货数量;
+            // 专业版:编辑保持原逻辑
+            if ("STD".equals(gradeCode)) {  //免費版特加逻辑
+                //更改后数量不能小于退货数量;
+                if(orderItemVO.getItemQty().compareTo(orderItemForUpdate.getReturnQty()) == -1){
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.GOODSQTY_NO_LESS_RETURNQTY.getMessage());
+                }
+                //
+                if (outintOrOutQty.compareTo(BigDecimal.ZERO) > 0) { //有出库数据
+//                    OutboundVO outboundVO = outBoundDtoConvert.convertToPo(orderVO);
+//                    outboundVO.setOutDate(LocalDate.now());
+//                    outboundVO.setOutingQty(orderVO.getSumQuantity());
+//                    outboundVO.setOutingAmt(orderVO.getFactAmt());
+//                    outboundVO.setFlgAutoHandle(orderVO.getFlgAutoHandle());
+//                    outboundVO.setFlgHandleSetting(orderVO.getFlgHandleSetting());
+//                    outboundVO.setFromId(order.getOrderId());
+//                    outboundVO.setFromNo(order.getOrderNo());
+//                    outboundVO.setOutDate(orderVO.getDeliveryDate());
+//                    outboundVO.setFactAmt(orderVO.getFactAmt());
+//                    outboundVO.setDiscount(orderVO.getDiscount());
+//                    outboundVO.setDiscAmt(orderVO.getDiscAmt());
+//                    outboundVO.setSumAmount(orderVO.getSumAmount());
+//                    outboundSaleOrderService.saleOutboundUpdate( outboundVO);
+                }
+//                outboundItemMapper.selectByCond(new OutboundItemQuery().setFromItemId(orderItem.getItemId()));
+
+            }
         }
 
         // 删除业绩信息
@@ -602,14 +651,6 @@ public class OrderService extends BaseService<Order> {
             }
         }
 
-        // 商户产品版本
-        String gradeCode = "PRO";
-        Map<String, Object> paramCompany = new HashMap<>();
-        paramCompany.put("cpId", orderVO.getCpId());
-        List<Map<String, Object>> listCompany = commonMapper.getCompany(paramCompany);
-        if (listCompany.size() > 0) {
-            gradeCode = listCompany.get(0).get("gradeCode").toString();
-        }
 
         // 专业版有定金
         if ("PRO".equals(gradeCode)) {
@@ -758,7 +799,36 @@ public class OrderService extends BaseService<Order> {
             accountService.updateMac(macId);
         }
         /**************************************** 客户收款end ********************************/
+        if(insertOrderItemVOList.size()>0){ //编辑时新选的数据生成出库单
+
+            //开单并出库办理
+            if (orderVO.getOutboundProcessingFlag() != null && orderVO.getOutboundProcessingFlag()) {
+                for (OrderItemVO orderItemVO : insertOrderItemVOList) {
+                    orderItemVO.setOutingQty(orderItemVO.getItemQty());
+                    orderItemVO.setOutingAmt(orderItemVO.getItemAmt());
+                    orderItemVO.setPriceOut(orderItemVO.getFactPrice());
+                    orderItemVO.setFromId(orderVO.getOrderId());
+                    orderItemVO.setFromItemId(orderItemVO.getItemId());
+                }
+                orderVO.setItemList(insertOrderItemVOList);
+                OutboundVO outboundVO = outBoundDtoConvert.convertToPo(orderVO);
+                outboundVO.setOutDate(LocalDate.now());
+                outboundVO.setOutingQty(orderVO.getSumQuantity());
+                outboundVO.setOutingAmt(orderVO.getFactAmt());
+                outboundVO.setFlgAutoHandle(orderVO.getFlgAutoHandle());
+                outboundVO.setFlgHandleSetting(orderVO.getFlgHandleSetting());
+                outboundVO.setFromId(order.getOrderId());
+                outboundVO.setFromNo(order.getOrderNo());
+                outboundVO.setOutDate(orderVO.getDeliveryDate());
+                outboundVO.setFactAmt(orderVO.getFactAmt());
+                outboundVO.setDiscount(orderVO.getDiscount());
+                outboundVO.setDiscAmt(orderVO.getDiscAmt());
+                outboundVO.setSumAmount(orderVO.getSumAmount());
+
+                outboundSaleOrderService.inventoryOUtBond(outboundVO);
+            }
 
+        }
         return ResponseResultUtil.success();
     }
 
@@ -938,4 +1008,70 @@ public class OrderService extends BaseService<Order> {
         return ResponseResultUtil.success(data);
     }
 
+
+    /**
+     * @desc   : 一键作废
+     * @date   : 2024/7/1 13:26
+     * @author : 寇珊珊
+     */
+    public ResponseResultVO<?> oneKeyInvalid(String id) {
+        Order orderForUpdate = orderMapper.selectByIdForUpdate(id);
+        //region并发校验
+        if (!orderForUpdate.getFlgValid()) {
+            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
+        }
+        //endregion
+
+        //region 作废
+        Order orderUpdate = new Order();
+        orderUpdate.setFlgValid(false).setOrderId(id);
+        super.update(orderUpdate, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
+                UUID.fromString(orderUpdate.getOrderId())));
+        //endregion
+
+        //region  需要重新计算的资金账户
+        List<String> macList = new ArrayList<>();
+        // 收款明细
+        RecPay recPayForUpdate = recPayMapper.selectByBiznisIdForUpdate(id, false);
+        if (recPayForUpdate != null) {
+            // 将之前的明细全部删除
+            List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
+            for (RecPayItem recPayItem : recPayItemOriginalList) {
+                //改为更新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.updateReceiptLock(recPayForUpdate.getObjectId());
+
+            // 更新账户余额
+            for (String macId : macList) {
+                accountService.updateMac(macId);
+            }
+
+            // 作废
+            RecPay recPayUpdate = new RecPay();
+            recPayUpdate.setFlgValid(false).setRpId(recPayForUpdate.getRpId());
+            receiptService.updateByUuid(recPayUpdate);
+        }
+        //endregion
+
+        //region 作废出库单
+        outboundSaleOrderService.oneKeySaleOutboundRepeal(id);
+        //endregion
+
+        return ResponseResultUtil.success();
+    }
+
+
 }