Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

24282 2 лет назад
Родитель
Сommit
f4e6b1d689
45 измененных файлов с 1048 добавлено и 79 удалено
  1. 8 0
      hx-item/src/main/java/com/fjhx/item/controller/product/ProductInfoController.java
  2. 5 0
      hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java
  3. 7 0
      hx-item/src/main/java/com/fjhx/item/mapper/product/ProductInfoMapper.java
  4. 6 0
      hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java
  5. 22 6
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  6. 16 0
      hx-item/src/main/resources/mapper/product/ProductInfoMapper.xml
  7. 9 4
      hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/ArrivalDetail.java
  8. 37 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/deliver/DeliverGoodsDetailsPo.java
  9. 11 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/dto/PurchaseDto.java
  10. 7 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/WdlyService.java
  11. 24 2
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java
  12. 5 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java
  13. 2 0
      hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml
  14. 38 0
      hx-sale/src/main/java/com/fjhx/sale/controller/commission/CommissionController.java
  15. 33 0
      hx-sale/src/main/java/com/fjhx/sale/controller/commission/CommissionRuleController.java
  16. 13 0
      hx-sale/src/main/java/com/fjhx/sale/controller/statement/SaleStatementController.java
  17. 22 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionDto.java
  18. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionRuleDto.java
  19. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionRuleSelectDto.java
  20. 26 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionSelectDto.java
  21. 115 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/po/Commission.java
  22. 54 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/po/CommissionRule.java
  23. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/vo/CommissionRuleVo.java
  24. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/commission/vo/CommissionVo.java
  25. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProductVo.java
  26. 7 0
      hx-sale/src/main/java/com/fjhx/sale/entity/sample/po/Sample.java
  27. 1 0
      hx-sale/src/main/java/com/fjhx/sale/flow/SampleFlow.java
  28. 27 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/commission/CommissionMapper.java
  29. 17 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/commission/CommissionRuleMapper.java
  30. 24 0
      hx-sale/src/main/java/com/fjhx/sale/service/commission/CommissionRuleService.java
  31. 30 0
      hx-sale/src/main/java/com/fjhx/sale/service/commission/CommissionService.java
  32. 35 0
      hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionRuleServiceImpl.java
  33. 159 0
      hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java
  34. 3 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  35. 7 2
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java
  36. 7 1
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  37. 11 0
      hx-sale/src/main/resources/mapper/commission/CommissionMapper.xml
  38. 4 0
      hx-sale/src/main/resources/mapper/commission/CommissionRuleMapper.xml
  39. 31 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/WdlyServiceImpl.java
  40. 9 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackService.java
  41. 1 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackServiceImpl.java
  42. 41 22
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java
  43. 38 4
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/logistics/impl/LogisticsInfosServiceImpl.java
  44. 24 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/quality/impl/QualityInfoServiceImpl.java
  45. 39 35
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/stock/impl/StockTransferServiceImpl.java

+ 8 - 0
hx-item/src/main/java/com/fjhx/item/controller/product/ProductInfoController.java

@@ -206,5 +206,13 @@ public class ProductInfoController {
         return productInfoService.productRanking(productInfoDto);
     }
 
+    /**
+     * 产品类型统计
+     */
+    @GetMapping("/statisticsProduct")
+    public Map<String,Object> statisticsProduct() {
+        return productInfoService.statisticsProduct();
+    }
+
 
 }

+ 5 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java

@@ -87,4 +87,9 @@ public class ProductInfo extends BasePo {
      */
     private String ehsdJson;
 
+    /**
+     * 条码编号
+     */
+    private String barCode;
+
 }

+ 7 - 0
hx-item/src/main/java/com/fjhx/item/mapper/product/ProductInfoMapper.java

@@ -10,6 +10,7 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -54,4 +55,10 @@ public interface ProductInfoMapper extends BaseMapper<ProductInfo> {
      * 客户产品库
      */
     Page<ProductInfoVo> getCustomerProductList(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductInfo> wrapper);
+
+    /**
+     * 产品统计
+     * @return
+     */
+    Map<String,Object> statisticsProduct();
 }

+ 6 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java

@@ -143,5 +143,11 @@ public interface ProductInfoService extends BaseService<ProductInfo> {
      */
     Page<ProductInfoVo> productRanking(ProductInfoSelectDto productInfoDto);
 
+    /**
+     * 产品统计
+     * @return
+     */
+    Map<String,Object> statisticsProduct();
+
 
 }

+ 22 - 6
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -281,7 +281,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         //赋值维多利亚组合产品信息
         JSONObject json = JSONObject.parseObject(result.getVictoriatouristJson());
         List<Long> ids = new ArrayList<>();
-        if(ObjectUtil.isNotEmpty(json)){
+        if(ObjectUtil.isNotEmpty(json) && ObjectUtil.isNotEmpty(json.getJSONArray("productCombinationList"))){
             JSONArray productCombinationList = json.getJSONArray("productCombinationList");
             for (int i=0;i<productCombinationList.size();i++) {
                 JSONObject item = productCombinationList.getJSONObject(i);
@@ -305,7 +305,6 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
                 result.setVictoriatouristJson(JSONObject.toJSONString(json));
             }
         }
-        result.getVictoriatouristJson();
         return result;
     }
 
@@ -316,8 +315,12 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         productInfoDto.setCode(CodeEnum.PRODUCT.getCode());
         // 排除名称重复
         this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), "产品名称重复");
-        // 排除自定义编码重复
-        this.nameDuplication(ProductInfo::getCustomCode, productInfoDto.getCustomCode(), "产品自定义编码重复");
+        // 排除不为空的自定义编码重复
+        long count = this.count(q -> q.eq(ProductInfo::getCustomCode, productInfoDto.getCustomCode()).ne(ProductInfo::getCustomCode,""));
+        if (count != 0) {
+            throw new ServiceException("产品自定义编码重复");
+        }
+
         this.save(productInfoDto);
         ObsFileUtil.saveFile(productInfoDto.getFileList(), productInfoDto.getId());
     }
@@ -472,8 +475,12 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         productInfoDto.setCode(null);
         // 排除名称重复
         this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), productInfoDto.getId(), "产品名称重复");
-        // 排除自定义编码重复
-        this.nameDuplication(ProductInfo::getCustomCode, productInfoDto.getCustomCode(), productInfoDto.getId(), "产品自定义编码重复");
+        // 排除不为空的自定义编码重复
+        long count = this.count(q -> q.ne(ProductInfo::getId,productInfoDto.getId())
+                .eq(ProductInfo::getCustomCode, productInfoDto.getCustomCode()).ne(ProductInfo::getCustomCode,""));
+        if (count != 0) {
+            throw new ServiceException("产品自定义编码重复");
+        }
         this.updateById(productInfoDto);
         ObsFileUtil.editFile(productInfoDto.getFileList(), productInfoDto.getId());
     }
@@ -719,6 +726,15 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         return productInfoVos;
     }
 
+    /**
+     * 产品统计
+     * @return
+     */
+    @Override
+    public Map<String, Object> statisticsProduct() {
+        return baseMapper.statisticsProduct();
+    }
+
 
     //根据字典编码获取字典的数据
     private List<DictTenantDataVo> getDict(String code) {

+ 16 - 0
hx-item/src/main/resources/mapper/product/ProductInfoMapper.xml

@@ -19,6 +19,7 @@
             pi.update_user,
             pi.update_time,
             pi.victoriatourist_json,
+            pi.bar_code,
             IF(DATEDIFF(now(),pi.create_time)> json_unquote( victoriatourist_json -> '$.growUpDay' ),3,IF( DATEDIFF(now(),pi.create_time)> json_unquote( victoriatourist_json -> '$.newProductsDay' ), 2, 1 )) AS lifeCycle
         FROM
             product_info pi
@@ -99,10 +100,25 @@
                pi.update_user,
                pi.update_time,
                pi.ehsd_json,
+               pi.bar_code,
                c.`name` customerName
         FROM product_info pi
                  LEFT JOIN product_classify pc ON pi.product_classify_id = pc.id
                  LEFT JOIN bytesailing_customer.customer c ON json_unquote(pi.ehsd_json -> '$.customerId') = c.id
             ${ew.customSqlSegment}
     </select>
+
+    <select id="statisticsProduct" resultType="java.util.Map">
+        SELECT
+            `type` AS `type`,
+            count( 1 ) AS count
+        FROM
+            product_info
+        WHERE `type` IS NOT NULL
+          AND `type` != "null"
+          AND `type` != ""
+          AND definition = 1
+        GROUP BY
+            `type`
+    </select>
 </mapper>

+ 9 - 4
hx-purchase/src/main/java/com/fjhx/purchase/entity/arrival/po/ArrivalDetail.java

@@ -1,18 +1,18 @@
 package com.fjhx.purchase.entity.arrival.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 到货明细单
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-07
  */
 @Getter
@@ -50,4 +50,9 @@ public class ArrivalDetail extends BasePo {
      */
     private String remark;
 
+    /**
+     * 发货明细id
+     */
+    private Long deliverGoodsDetailsId;
+
 }

+ 37 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/deliver/DeliverGoodsDetailsPo.java

@@ -0,0 +1,37 @@
+package com.fjhx.purchase.entity.deliver;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 发货明细
+ * </p>
+ *
+ * @author
+ * @since 2023-04-13
+ */
+@Getter
+@Setter
+@TableName("deliver_goods_details")
+public class DeliverGoodsDetailsPo extends BasePo {
+    /**
+     * 发货id
+     */
+    private Long deliverGoodsId;
+
+    /**
+     * 采购单明细id
+     */
+    private Long purchaseDetailId;
+
+    /**
+     * 发货数量
+     */
+    private BigDecimal deliverGoodsQuantity;
+
+}

+ 11 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/dto/PurchaseDto.java

@@ -32,9 +32,20 @@ public class PurchaseDto extends Purchase {
     private BigDecimal arrivalAmount;
 
     /**
+     * 到货币种
+     */
+    private String arrivalCurrency;
+
+    /**
      * 已付款金额
      */
     private BigDecimal paidAmount;
 
 
+    /**
+     * 已付款币种
+     */
+    private String paidCurrency;
+
+
 }

+ 7 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/WdlyService.java

@@ -1,7 +1,10 @@
 package com.fjhx.purchase.service;
 
+import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 
+import java.util.List;
+
 public interface WdlyService {
     /**
      * 修改发货记录为到货
@@ -12,4 +15,8 @@ public interface WdlyService {
      * 获取发货信息
      */
     DeliverGoodsPo getDeliverGoodsInfo(Long id);
+
+    List<DeliverGoodsDetailsPo> getDeliverGoodsDetailsInfo(Long id);
+
+    void addAbnormalInfo(Long linkId, String linkCode);
 }

+ 24 - 2
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java

@@ -17,6 +17,7 @@ import com.fjhx.purchase.entity.arrival.dto.ArrivalSelectDto;
 import com.fjhx.purchase.entity.arrival.po.Arrival;
 import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
 import com.fjhx.purchase.entity.arrival.vo.ArrivalVo;
+import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
@@ -206,8 +207,8 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         stockWait.setBusinessId(purchase.getId());
         stockWait.setBusinessCode(purchase.getCode());
 
-        json.put("arrivalId",arrival.getId());
-        json.put("arrivalCode",arrival.getCode());
+        json.put("arrivalId", arrival.getId());
+        json.put("arrivalCode", arrival.getCode());
         stockWait.setVictoriatouristJson(json.toJSONString());
         stockWaitService.save(stockWait);
 
@@ -222,10 +223,26 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         List<PurchaseDetail> purchaseDetailList = purchaseDetailService.listByIds(arrivalDids);
         if (ObjectUtil.isNotEmpty(purchaseDetailList)) {
             Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getId, Function.identity()));
+            //获取发货明细
+            List<DeliverGoodsDetailsPo> deliverGoodsDetailsInfo = wdlyService.getDeliverGoodsDetailsInfo(deliverGoodsId);
+            Map<Long, DeliverGoodsDetailsPo> deliverGoodsDetailsInfoMap = deliverGoodsDetailsInfo.stream().collect(Collectors.toMap(DeliverGoodsDetailsPo::getId, Function.identity()));
+            int flag = 0;//到货数量不等于发货数量计数
             for (ArrivalDetail d : arrivalDetailList) {
                 Long id = IdWorker.getId();
                 d.setId(id);
                 d.setArrivalId(arrival.getId());
+
+                Long deliverGoodsDetailsId = d.getDeliverGoodsDetailsId();
+                DeliverGoodsDetailsPo deliverGoodsDetailsPo = deliverGoodsDetailsInfoMap.get(deliverGoodsDetailsId);
+                if (ObjectUtil.isEmpty(deliverGoodsDetailsPo)) {
+                    throw new ServiceException("未找到发货明细信息");
+                }
+
+                //如果到货数量不等于发货数量 创建异常
+                if (deliverGoodsDetailsPo.getDeliverGoodsQuantity().compareTo(d.getCount()) != 0) {
+                    flag++;
+                }
+
                 StockWaitDetails stockWaitDetails = new StockWaitDetails();
                 stockWaitDetails.setStockWaitId(stockWait.getId());
                 //业务明细id设置成到货明细id
@@ -238,6 +255,11 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
                 stockWaitDetails.setPurchaseQuantity(count);
                 stockWaitDetailsList.add(stockWaitDetails);
             }
+
+            //存在到货数量不等于发货数量 创建异常
+            if (flag != 0) {
+                wdlyService.addAbnormalInfo(arrival.getId(), arrival.getCode());
+            }
         }
         arrivalDetailService.saveBatch(arrivalDetailList);
         DynamicDataSourceContextHolder.push(SourceConstant.WMS);

+ 5 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -359,7 +359,10 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
             //初始化到货金额与已付款金额
             record.setArrivalAmount(new BigDecimal(0));
             record.setPaidAmount(new BigDecimal(0));
-
+            //到货中没有币种选择(使用合同的币种)
+            record.setArrivalCurrency(record.getCurrency());
+            //已付款金额币种默认合同币种
+            record.setPaidCurrency(record.getCurrency());
             //赋值到货金额
             List<PurchaseDto>  arrivalList= arrivalMap.get(record.getId());
             if (ObjectUtils.isNotEmpty(arrivalList)){
@@ -370,6 +373,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
             List<PurchaseDto> paidList = paidMap.get(record.getId());
             if (ObjectUtils.isNotEmpty(paidList)){
                 record.setPaidAmount(paidList.get(0).getAmount());
+                record.setPaidCurrency(paidList.get(0).getCurrency());
             }
         }
 

+ 2 - 0
hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml

@@ -10,10 +10,12 @@
     <select id="paymentBill" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
         SELECT
             pu.code,
+            pu.supply_id,
             bs.`name` supplyName,
             pu.amount,
             IFNULL(SUM(nd.money),0) invoiceAmount,
             pu.pay_status  payStatus,
+            pu.currency,
             pu.id
         FROM
             purchase pu

+ 38 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/commission/CommissionController.java

@@ -0,0 +1,38 @@
+package com.fjhx.sale.controller.commission;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.fjhx.sale.entity.commission.dto.CommissionSelectDto;
+import com.fjhx.sale.entity.commission.dto.CommissionDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.commission.CommissionService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 业绩提成表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@RestController
+@RequestMapping("/commission")
+public class CommissionController {
+
+    @Autowired
+    private CommissionService commissionService;
+
+    /**
+     * 业绩提成表分页
+     */
+    @PostMapping("/page")
+    public Page<CommissionVo> page(@RequestBody CommissionSelectDto dto) {
+        return commissionService.getPage(dto);
+    }
+
+
+
+}

+ 33 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/commission/CommissionRuleController.java

@@ -0,0 +1,33 @@
+package com.fjhx.sale.controller.commission;
+
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.fjhx.sale.service.commission.CommissionRuleService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 业绩提成规则表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@RestController
+@RequestMapping("/commissionRule")
+public class CommissionRuleController {
+    @Autowired
+    private CommissionRuleService commissionRuleService;
+
+    /**
+     * 业绩提成表明细
+     */
+    @PostMapping("/detail")
+    public CommissionRule detail(@RequestBody BaseSelectDto dto) {
+        return commissionRuleService.detail(dto.getId());
+    }
+
+}

+ 13 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/statement/SaleStatementController.java

@@ -1,9 +1,11 @@
 package com.fjhx.sale.controller.statement;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.commission.dto.CommissionDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
 import com.fjhx.sale.entity.statement.vo.ProfitSettlementVo;
+import com.fjhx.sale.service.commission.CommissionService;
 import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.statement.SaleStatementService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +24,9 @@ public class SaleStatementController {
     @Autowired
     private ContractService contractService;
 
+    @Autowired
+    private CommissionService commissionService;
+
     /**
      * 利润结算表
      */
@@ -38,4 +43,12 @@ public class SaleStatementController {
         contractService.updateById(contract);
     }
 
+    /**
+     * 结算功能(添加业务提成表与业务提成规则表,修改合同表的结算状态)
+     */
+    @PostMapping("/settlement")
+    public void settlement(@RequestBody CommissionDto commissionDto){
+        commissionService.settlement(commissionDto);
+    }
+
 }

+ 22 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.sale.entity.commission.dto;
+
+import com.fjhx.sale.entity.commission.po.Commission;
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 业绩提成表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+public class CommissionDto extends Commission {
+
+    /**
+     * 业绩提成规则表
+     */
+    private CommissionRule commissionRule;
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionRuleDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.commission.dto;
+
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 业绩提成规则表新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+public class CommissionRuleDto extends CommissionRule {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionRuleSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.commission.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 业绩提成规则表列表查询入参实体
+ *
+ * @author 
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+public class CommissionRuleSelectDto extends BaseSelectDto {
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/dto/CommissionSelectDto.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.entity.commission.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 业绩提成表列表查询入参实体
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+public class CommissionSelectDto extends BaseSelectDto {
+    /**
+     * 年份
+     */
+    private String time;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+}

+ 115 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/po/Commission.java

@@ -0,0 +1,115 @@
+package com.fjhx.sale.entity.commission.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.ruoyi.common.core.domain.BasePo;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 业绩提成表
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+@TableName("commission")
+public class Commission extends BasePo {
+
+    /**
+     * 销售合同ID
+     */
+    private Long contractId;
+
+    /**
+     * 销售合同编码
+     */
+    private String contractCode;
+
+    /**
+     * 客户ID
+     */
+    private Long customerId;
+
+    /**
+     * 业务员ID
+     */
+    private Long userId;
+
+    /**
+     * 合同到账金额
+     */
+    private BigDecimal contractArrival;
+
+    /**
+     * 其他收入
+     */
+    private BigDecimal otherIncome;
+
+    /**
+     * 其他支出
+     */
+    private BigDecimal otherExpenses;
+
+    /**
+     * 收入合计
+     */
+    private BigDecimal totalIncome;
+
+    /**
+     * 支出合计
+     */
+    private BigDecimal  totalExpenses;
+
+    /**
+     * 支付货款
+     */
+    private BigDecimal payForGoods;
+
+    /**
+     * 毛利
+     */
+    private BigDecimal grossGrofit;
+
+    /**
+     * 毛利率
+     */
+    private BigDecimal grossRofitMargin;
+
+    /**
+     * 售后
+     */
+    private BigDecimal afterSalesAmount;
+
+    /**
+     * 公共
+     */
+    private BigDecimal publicAmount;
+
+    /**
+     * 总办
+     */
+    private BigDecimal haveOverallAmount;
+
+    /**
+     * 部门提成
+     */
+    private BigDecimal departmentalCommission;
+
+    /**
+     * 个人提成
+     */
+    private BigDecimal personalCommission;
+
+    /**
+     * 是否结算 1已结算 0未结算
+     */
+    private Integer settlementStatus;
+
+
+}

+ 54 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/po/CommissionRule.java

@@ -0,0 +1,54 @@
+package com.fjhx.sale.entity.commission.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 业绩提成规则表
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+@TableName("commission_rule")
+public class CommissionRule extends BasePo {
+
+    /**
+     * 业绩提成表ID
+     */
+    private Long commissionId;
+
+
+    /**
+     * 售后占比
+     */
+    private BigDecimal afterSalesRatio;
+
+    /**
+     * 公共占比
+     */
+    private BigDecimal publicRatio;
+
+    /**
+     * 总办占比
+     */
+    private BigDecimal haveOverallRatio;
+
+    /**
+     * 部门占比
+     */
+    private BigDecimal departmentalRatio;
+
+    /**
+     * 个人占比
+     */
+    private BigDecimal personalRatio;
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/vo/CommissionRuleVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.commission.vo;
+
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 业绩提成规则表列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+public class CommissionRuleVo extends CommissionRule {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/commission/vo/CommissionVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.commission.vo;
+
+import com.fjhx.sale.entity.commission.po.Commission;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 业绩提成表列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-05-11
+ */
+@Getter
+@Setter
+public class CommissionVo extends Commission {
+
+}

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProductVo.java

@@ -95,4 +95,9 @@ public class ContractProductVo extends ContractProduct {
      * 订单类型
      */
     private String orderType;
+
+    /**
+     * 合同到账时间
+     */
+    private String claimTime;
 }

+ 7 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/sample/po/Sample.java

@@ -1,6 +1,7 @@
 package com.fjhx.sale.entity.sample.po;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fjhx.file.entity.ObsFile;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableField;
 
@@ -224,6 +225,12 @@ public class Sample extends BasePo {
      */
     private String versions;
 
+
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> fileList;
     /**
      * 样品单产品列表
      */

+ 1 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/SampleFlow.java

@@ -86,6 +86,7 @@ public class SampleFlow extends FlowDelegate {
             }
             sampleShipmentService.saveBatch(sampleShipmentList);
         }
+        ObsFileUtil.saveFile(sample.getFileList(),sample.getId());
         return sample.getId();
 
     }

+ 27 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/commission/CommissionMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.sale.mapper.commission;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.sale.entity.commission.po.Commission;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 业绩提成表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+public interface CommissionMapper extends BaseMapper<Commission> {
+
+    /**
+     * 业绩提成表分页
+     */
+    Page<CommissionVo> getPage(@Param("page") Page<Object> page, @Param("ew")QueryWrapper<Object> queryWrapper);
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/commission/CommissionRuleMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.mapper.commission;
+
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 业绩提成规则表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-11
+ */
+public interface CommissionRuleMapper extends BaseMapper<CommissionRule> {
+
+}

+ 24 - 0
hx-sale/src/main/java/com/fjhx/sale/service/commission/CommissionRuleService.java

@@ -0,0 +1,24 @@
+package com.fjhx.sale.service.commission;
+
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 业绩提成规则表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+public interface CommissionRuleService extends BaseService<CommissionRule> {
+
+    /**
+     * 详情
+     * @param id
+     * @return
+     */
+    CommissionRule detail(Long id);
+}

+ 30 - 0
hx-sale/src/main/java/com/fjhx/sale/service/commission/CommissionService.java

@@ -0,0 +1,30 @@
+package com.fjhx.sale.service.commission;
+
+import com.fjhx.sale.entity.commission.po.Commission;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.fjhx.sale.entity.commission.dto.CommissionSelectDto;
+import com.fjhx.sale.entity.commission.dto.CommissionDto;
+
+
+/**
+ * <p>
+ * 业绩提成表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+public interface CommissionService extends BaseService<Commission> {
+
+    /**
+     * 业绩提成表分页
+     */
+    Page<CommissionVo> getPage(CommissionSelectDto dto);
+
+    /**
+     * 结算功能(添加业务提成表与业务提成规则表)
+     */
+    void settlement(CommissionDto commissionDto);
+}

+ 35 - 0
hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionRuleServiceImpl.java

@@ -0,0 +1,35 @@
+package com.fjhx.sale.service.commission.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.fjhx.sale.mapper.commission.CommissionRuleMapper;
+import com.fjhx.sale.service.commission.CommissionRuleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 业绩提成规则表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@Service
+public class CommissionRuleServiceImpl extends ServiceImpl<CommissionRuleMapper, CommissionRule> implements CommissionRuleService {
+
+    /**
+     * 详情
+     * @param id
+     * @return
+     */
+    @Override
+    public CommissionRule detail(Long id) {
+        CommissionRule commissionRule = baseMapper.selectOne(Wrappers.<CommissionRule>lambdaQuery().eq(CommissionRule::getCommissionId, id));
+        return commissionRule;
+    }
+
+}

+ 159 - 0
hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java

@@ -0,0 +1,159 @@
+package com.fjhx.sale.service.commission.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.sale.entity.commission.po.Commission;
+import com.fjhx.sale.entity.commission.po.CommissionRule;
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.mapper.commission.CommissionMapper;
+import com.fjhx.sale.service.commission.CommissionRuleService;
+import com.fjhx.sale.service.commission.CommissionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.poi.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.commission.vo.CommissionVo;
+import com.fjhx.sale.entity.commission.dto.CommissionSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.commission.dto.CommissionDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.math.BigDecimal;
+
+
+/**
+ * <p>
+ * 业绩提成表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-05-11
+ */
+@Service
+public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commission> implements CommissionService {
+    @Autowired
+    private ContractService contractService;
+
+    @Autowired
+    private CommissionRuleService commissionRuleService;
+
+
+    @Override
+    public Page<CommissionVo> getPage(CommissionSelectDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.eq(ObjectUtil.isNotEmpty(dto.getUserId()),"c.user_id",dto.getUserId());
+        query.eq(ObjectUtil.isNotEmpty(dto.getTime()),"DATE_FORMAT(c.create_time,'%Y-%m')",dto.getTime());
+        query.orderByDesc("c.create_time");
+        Page<CommissionVo> page = this.baseMapper.getPage(dto.getPage(), query);
+        return page;
+    }
+
+
+    /**
+     * 结算功能(添加业务提成表与业务提成规则表,修改合同表的结算状态)
+     */
+    @Override
+    public void settlement(CommissionDto commissionDto) {
+        if (ObjectUtil.isEmpty(commissionDto.getCommissionRule()) || ObjectUtil.isEmpty(commissionDto.getSettlementStatus())){
+            throw  new ServiceException("参数缺失:结算状态或业绩提成规则表不能为null");
+        }
+
+        //修改合同表的结算状态
+        Contract contract = new Contract();
+        contract.setId(commissionDto.getContractId());
+        contract.setSettlementStatus(commissionDto.getSettlementStatus());
+        contractService.updateById(contract);
+
+        //查询业绩表的信息
+        Commission commission = baseMapper.selectOne(Wrappers.<Commission>lambdaQuery()
+                .eq(Commission::getContractId, commissionDto.getContractId()));
+
+
+        //如果为未结算则删除业绩提成表与业绩提成规则表的信息
+        if (commissionDto.getSettlementStatus() == 0){
+            //如果是取消结算,业绩表肯定有值
+            baseMapper.deleteById(commission.getId());
+            commissionRuleService.remove(Wrappers.<CommissionRule>lambdaQuery()
+                    .eq(CommissionRule::getCommissionId,commission.getId())
+            );
+        }else  if (commissionDto.getSettlementStatus() == 1){
+            saveOrUpdate(commissionDto);
+        }
+
+    }
+
+    /**
+     * 新增或修改业绩提成表与业绩提成规则表的信息
+     * @param commissionDto
+     */
+    private void saveOrUpdate(CommissionDto commissionDto){
+        CommissionRule commissionRule = new CommissionRule();
+        if (ObjectUtil.isNotEmpty(commissionDto.getCommissionRule())){
+           commissionRule = commissionDto.getCommissionRule();
+        }else {
+            commissionRule.setAfterSalesRatio(new BigDecimal(4));
+            commissionRule.setDepartmentalRatio(new BigDecimal(33));
+            commissionRule.setPersonalRatio(new BigDecimal(17));
+            commissionRule.setPublicRatio(new BigDecimal(6));
+            commissionRule.setHaveOverallRatio(new BigDecimal(5));
+        }
+
+
+        //计算售后金额:到账金额 * 售后占比(保留两位小数向上取整)
+        commissionDto.setAfterSalesAmount(commissionDto.getContractArrival()
+                .multiply(commissionRule.getAfterSalesRatio())
+                .divide(new BigDecimal(100))
+                .setScale(2,BigDecimal.ROUND_HALF_UP));
+
+        //计算公共金额:到账金额 * 公共占比
+        commissionDto.setPublicAmount(commissionDto.getPublicAmount()
+                .multiply(commissionRule.getPublicRatio())
+                .divide(new BigDecimal(100))
+                .setScale(2,BigDecimal.ROUND_HALF_UP));
+
+        //计算总办金额:到账金额 * 总办占比
+        commissionDto.setHaveOverallAmount(commissionDto.getPublicAmount()
+                .multiply(commissionRule.getHaveOverallRatio())
+                .divide(new BigDecimal(100))
+                .setScale(2,BigDecimal.ROUND_HALF_UP));
+
+        //计算净收入(总收入 - 总支出 - 售后 - 公共 - 总办)
+        BigDecimal netIncome = commissionDto.getTotalIncome()
+                .subtract(commissionDto.getTotalExpenses()
+                        .subtract(commissionDto.getAfterSalesAmount())
+                        .subtract(commissionDto.getPublicAmount())
+                        .subtract(commissionDto.getHaveOverallAmount())
+                ) ;
+        //计算部门提成金额:(总收入 - 总支出 - 售后 - 公共 - 总办) * 部门占比
+        commissionDto.setDepartmentalCommission(netIncome.
+                multiply(commissionRule.getDepartmentalRatio())
+                .divide(new BigDecimal(100))
+                .setScale(2,BigDecimal.ROUND_HALF_UP));
+
+        //计算个人提成金额:(总收入 - 总支出 - 售后 - 公共 - 总办) * 个人占比
+        commissionDto.setPersonalCommission(netIncome.multiply(commissionRule
+                .getPersonalRatio()
+                .divide(new BigDecimal(100))
+                .setScale(2,BigDecimal.ROUND_HALF_UP)
+
+        ));
+        //如果ID为null则添加 否则为修改
+        if (ObjectUtil.isNotEmpty(commissionDto.getId())){
+            baseMapper.updateById(commissionDto);
+        }else {
+            baseMapper.insert(commissionDto);
+        }
+        commissionRule.setCommissionId(commissionDto.getId());
+        //添加或修改业绩规则表信息
+        commissionRuleService.saveOrUpdate(commissionRule);
+    }
+
+}

+ 3 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.sale.entity.commission.dto.CommissionDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
@@ -118,4 +119,6 @@ public interface ContractService extends BaseService<Contract> {
      * 产品销售统计(数据看板-销售分析页面开发)
      */
     List<ContractDto> productSalesStatistics(ContractDto dto);
+
+
 }

+ 7 - 2
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java

@@ -66,7 +66,7 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
     public Page<ContractProductVo> getPage(ContractProductSelectDto dto) {
         IWrapper<ContractProduct> wrapper = getWrapper();
         wrapper.orderByDesc("t1", ContractProduct::getCreateTime);
-        wrapper.between("t2", Contract::getStatus, FlowStatusEnum.DRAFT.getKey(),FlowStatusEnum.CANCELLATION.getKey()-1);
+        wrapper.between("t2", Contract::getStatus, FlowStatusEnum.PASS.getKey(),FlowStatusEnum.CANCELLATION.getKey()-1);
         wrapper.gt("t1",ContractProduct::getExpendQuantity,BigDecimal.ZERO);
         if(StringUtils.isNotEmpty(dto.getKeyword())){
             wrapper.keyword(dto.getKeyword(),new SqlField("t2.`code`"),new SqlField("t2.`user_name`"));
@@ -114,12 +114,17 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
         return list;
     }
 
+    /**
+     * 交接单
+     * @param dto
+     * @return
+     */
     @Override
     public Page<ContractProductVo> getEHSDPage(ContractProductSelectDto dto) {
         IWrapper<ContractProduct> wrapper = getWrapper();
         wrapper.orderByDesc("t1.ct");
         if(StringUtils.isNotEmpty(dto.getKeyword())){
-            wrapper.keyword(dto.getKeyword(),new SqlField("t1.`code`"),new SqlField("t1.`userName`"));
+            wrapper.keyword(dto.getKeyword(),new SqlField("t1.`contractCode`"),new SqlField("t1.`userName`"));
         }
         Page<ContractProductVo> page = this.baseMapper.getEHSDPage(dto.getPage(), wrapper);
         List<ContractProductVo> list = page.getRecords();

+ 7 - 1
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -23,6 +23,7 @@ import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.sale.entity.commission.dto.CommissionDto;
 import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
@@ -90,6 +91,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Autowired
     private AccountManagementService accountManagementService;
 
+    @Autowired
+    private ContractService contractService;
+
     /**
      * 分页
      *
@@ -100,7 +104,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     public Page<ContractVo> getPage(ContractSelectDto dto) {
         IWrapper<Contract> wrapper = getWrapper();
         wrapper.orderByDesc("t1",Contract::getCreateTime);
-        wrapper.between("t1",Contract::getStatus, FlowStatusEnum.PASS.getKey(),FlowStatusEnum.CANCELLATION.getKey()-1);
+        wrapper.between("t1",Contract::getStatus, FlowStatusEnum.DRAFT.getKey(),FlowStatusEnum.CANCELLATION.getKey()-1);
         if(StringUtils.isNotEmpty(dto.getStatus())){
             wrapper.eq("t1",Contract::getStatus,dto.getStatus());
         }
@@ -380,6 +384,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         return contractDtoList;
     }
 
+
+
     /**
      * 赋值外销合同信息
      *

+ 11 - 0
hx-sale/src/main/resources/mapper/commission/CommissionMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.sale.mapper.commission.CommissionMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.commission.vo.CommissionVo">
+        select
+           *
+        from commission c
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 4 - 0
hx-sale/src/main/resources/mapper/commission/CommissionRuleMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.sale.mapper.commission.CommissionRuleMapper">
+</mapper>

+ 31 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/WdlyServiceImpl.java

@@ -1,21 +1,32 @@
 package com.fjhx.victoriatourist.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 import com.fjhx.purchase.service.WdlyService;
+import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
+import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoodsDetails;
+import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
+import com.fjhx.victoriatourist.service.deliver.DeliverGoodsDetailsService;
 import com.fjhx.victoriatourist.service.deliver.DeliverGoodsService;
 import com.fjhx.victoriatourist.service.order.OrderInfoService;
-import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class WdlyServiceImpl implements WdlyService {
     @Autowired
     DeliverGoodsService deliverGoodsService;
     @Autowired
     OrderInfoService orderInfoService;
+    @Autowired
+    DeliverGoodsDetailsService deliverGoodsDetailsService;
+    @Autowired
+    AbnormalInfoService abnormalInfoService;
 
     /**
      * 更新发货记录的状态为到货
@@ -36,4 +47,23 @@ public class WdlyServiceImpl implements WdlyService {
         DeliverGoodsPo deliverGoodsPo = BeanUtil.copyProperties(byId, DeliverGoodsPo.class);
         return deliverGoodsPo;
     }
+
+    @Override
+    public List<DeliverGoodsDetailsPo> getDeliverGoodsDetailsInfo(Long id) {
+        List<DeliverGoodsDetails> list = deliverGoodsDetailsService.list(q -> q.eq(DeliverGoodsDetails::getDeliverGoodsId, id));
+        List<DeliverGoodsDetailsPo> deliverGoodsDetailsPos = BeanUtil.copyToList(list, DeliverGoodsDetailsPo.class);
+        return deliverGoodsDetailsPos;
+    }
+
+    @Override
+    public void addAbnormalInfo(Long linkId,String linkCode){
+        AbnormalInfo abnormalInfo = new AbnormalInfo();
+        abnormalInfo.setStatus(0);
+        abnormalInfo.setId(IdWorker.getId());
+        abnormalInfo.setType(40);
+        abnormalInfo.setLinkId(linkId);
+        abnormalInfo.setLinkCode(linkCode);
+        abnormalInfo.setTitle("到货数量与发货数量不一致");
+        abnormalInfoService.save(abnormalInfo);
+    }
 }

+ 9 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackService.java

@@ -1,13 +1,17 @@
 package com.fjhx.victoriatourist.service.jd;
 
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.victoriatourist.entity.jd.dto.JdBackDto;
 import com.fjhx.victoriatourist.entity.jd.dto.JdBackSelectDto;
 import com.fjhx.victoriatourist.entity.jd.po.JdBack;
+import com.fjhx.victoriatourist.entity.jd.po.JdBackDetails;
 import com.fjhx.victoriatourist.entity.jd.vo.JdBackVo;
 import com.ruoyi.common.core.service.BaseService;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -35,6 +39,11 @@ public interface JdBackService extends BaseService<JdBack> {
     void add(JdBackDto jdBackDto);
 
     /**
+     * 京东退货创建待质检记录
+     */
+    void createJdBackQualityWait(List<JdBackDetails> jdBackDetailsList);
+
+    /**
      * 京东退货编辑
      */
     void edit(JdBackDto jdBackDto);

+ 1 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackServiceImpl.java

@@ -148,6 +148,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
      * 根据退货列表创建待质检记录通用方法
      */
     @DSTransactional
+    @Override
     public void createJdBackQualityWait(List<JdBackDetails> jdBackDetailsList) {
         Map<Long, BigDecimal> map = new HashMap<>();
         List<String> productCodeList = jdBackDetailsList.stream().map(JdBackDetails::getProductCode).collect(Collectors.toList());

+ 41 - 22
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java

@@ -91,6 +91,10 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         wrapper.eq("jo", JdOrder::getStatus, dto.getStatus());
         wrapper.orderByDesc("jo", JdOrder::getId);
 
+        if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            wrapper.and(q -> q.like(JdOrderVo::getCode, dto.getKeyword()));
+        }
+
         Page<JdOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<JdOrderVo> records = page.getRecords();
         if (records.size() == 0) {
@@ -286,6 +290,7 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         //创建明细
         List<StockTransferDetails> stockTransferDetailsList = new ArrayList<>();
         List<JdOrderDetails> jdOrderDetailsList = jdOrderDto.getJdOrderDetailsList();
+        List<Stock> stockList = new ArrayList<>();
         for (JdOrderDetails jdOrderDetails : jdOrderDetailsList) {
             StockTransferDetails stockTransferDetails = new StockTransferDetails();
             stockTransferDetails.setBusinessDetailsId(jdOrderDetails.getId());
@@ -293,8 +298,30 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
             stockTransferDetails.setOutQuantity(jdOrderDetails.getQuantity());
             stockTransferDetails.setProductId(jdOrderDetails.getProductId());
             stockTransferDetailsList.add(stockTransferDetails);
+
+            //创建出库数据
+            Stock stock = new Stock();
+            stock.setProductId(stockTransferDetails.getProductId());
+            stock.setQuantity(stockTransferDetails.getInQuantity());
+            stockList.add(stock);
         }
         stockTransferDetailsService.saveBatch(stockTransferDetailsList);
+
+        //创建出库记录
+        StockJournal stockJournal1 = new StockJournal();
+        stockJournal1.setOpType(2);
+        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
+        stockJournal1.setCode(stockTransfer.getCode());
+        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
+        stockJournal1.setBusinessId(stockTransfer.getId());
+        //保存出库记录
+        stockJournalService.save(stockJournal1);
+        if (ObjectUtil.isNotEmpty(stockList)) {
+            //出库
+            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransfer.getOutWarehouseId());
+            //保存出库记录明细
+            stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
+        }
     }
 
     @Override
@@ -302,6 +329,11 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         IWrapper<JdOrder> wrapper = getWrapper();
         wrapper.eq("st.in_status", dto.getInStatus());
         wrapper.orderByDesc("jdo.create_time");
+
+        if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            wrapper.and(q -> q.like(JdOrderVo::getCode, dto.getKeyword()));
+        }
+
         Page<JdOrderVo> page = this.baseMapper.getReceivePage(dto.getPage(), wrapper);
         List<JdOrderVo> records = page.getRecords();
         // 赋值国省市
@@ -327,7 +359,7 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         //明细
         List<Stock> stockList = new ArrayList<>();
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
-        if(ObjectUtil.isNotEmpty(stockTransferDetailsList)) {
+        if (ObjectUtil.isNotEmpty(stockTransferDetailsList)) {
             //获取数据库中的数据
             List<Long> ids = stockTransferDetailsList.stream().map(StockTransferDetails::getId).collect(Collectors.toList());
             List<StockTransferDetails> oldstockTransferDetailsList = stockTransferDetailsService.listByIds(ids);
@@ -342,20 +374,22 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
 
                 //调仓接收数量与发出数量不一致
                 StockTransferDetails oldstockTransferDetails = oldstockTransferDetailsMap.get(stockTransferDetails.getId());
-                if (stockTransferDetails.getInQuantity().compareTo(oldstockTransferDetails.getOutQuantity())!=0) {
-                    abnormalFlag =1;
+                //计算接收总数 接收数+已经接收数
+                BigDecimal inQuantitySum = oldstockTransferDetails.getInQuantity().add(stockTransferDetails.getInQuantity());
+                if (inQuantitySum.compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
+                    abnormalFlag = 1;
                 }
 
                 //计算已入库数量
                 BigDecimal inCount = oldstockTransferDetails.getInQuantity().add(stockTransferDetails.getInQuantity());
-                if (inCount.compareTo(oldstockTransferDetails.getOutQuantity())!=0 ) {
+                if (inCount.compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
                     stockTransfer.setInStatus(1);//设置为部分接收
                 }
                 stockTransferDetails.setInQuantity(inCount);
 
 
             }
-            if(abnormalFlag ==1){
+            if (abnormalFlag == 1) {
                 AbnormalInfo abnormalInfo = new AbnormalInfo();
                 abnormalInfo.setStatus(0);
                 abnormalInfo.setId(IdWorker.getId());
@@ -375,29 +409,14 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
         stockJournal.setCode(stockTransfer.getCode());
         stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
-//        stockJournal.setToWarehouseId(stockTransfer.getInWarehouseId());
         stockJournal.setBusinessId(stockTransfer.getId());
         //保存人库记录
         stockJournalService.save(stockJournal);
-
-        //创建出库记录
-        StockJournal stockJournal1 = new StockJournal();
-        stockJournal1.setOpType(2);
-        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
-        stockJournal1.setCode(stockTransfer.getCode());
-        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
-//        stockJournal1.setToWarehouseId(stockTransfer.getInWarehouseId());
-        stockJournal1.setBusinessId(stockTransfer.getId());
-        //保存出库记录
-        stockJournalService.save(stockJournal1);
-        if(ObjectUtil.isNotEmpty(stockList)) {
-            //出库
-            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransfer.getOutWarehouseId());
+        if (ObjectUtil.isNotEmpty(stockList)) {
             //入库
             List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 1, stockList, stockTransfer.getInWarehouseId());
-            //保存入库记录明细
+            //保存入库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList);
-            stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
         }
     }
 

+ 38 - 4
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/logistics/impl/LogisticsInfosServiceImpl.java

@@ -16,22 +16,24 @@ import com.fjhx.kd100.util.KD100Result;
 import com.fjhx.kd100.util.KD100Util;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.service.purchase.PurchaseService;
+import com.fjhx.victoriatourist.entity.jd.po.JdBack;
+import com.fjhx.victoriatourist.entity.jd.po.JdBackDetails;
 import com.fjhx.victoriatourist.entity.logistics.dto.LogisticsInfosDto;
 import com.fjhx.victoriatourist.entity.logistics.dto.LogisticsInfosSelectDto;
 import com.fjhx.victoriatourist.entity.logistics.po.LogisticsDetails;
 import com.fjhx.victoriatourist.entity.logistics.po.LogisticsInfos;
 import com.fjhx.victoriatourist.entity.logistics.vo.LogisticsInfosVo;
 import com.fjhx.victoriatourist.mapper.logistics.LogisticsInfosMapper;
+import com.fjhx.victoriatourist.service.jd.JdBackDetailsService;
+import com.fjhx.victoriatourist.service.jd.JdBackService;
 import com.fjhx.victoriatourist.service.logistics.LogisticsDetailsService;
 import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.utils.Assert;
 import com.fjhx.victoriatourist.utils.LogisticsConstant;
-import com.fjhx.wms.entity.stock.vo.StockVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -54,6 +56,10 @@ public class LogisticsInfosServiceImpl extends ServiceImpl<LogisticsInfosMapper,
     LogisticsDetailsService logisticsDetailsService;
     @Autowired
     PurchaseService purchaseService;
+    @Autowired
+    JdBackService jdBackService;
+    @Autowired
+    JdBackDetailsService jdBackDetailsService;
 
     @Override
     public Page<LogisticsInfosVo> getPage(LogisticsInfosSelectDto dto) {
@@ -111,14 +117,19 @@ public class LogisticsInfosServiceImpl extends ServiceImpl<LogisticsInfosMapper,
         logisticsDetailsService.save(logisticsDetails);
     }
 
+    @DSTransactional
     @EventListener
     public void kd100EventListener(Kd100CallbackEvent event) {
         LogisticsInfo logisticsInfo = event.getLogisticsInfo();
         //监听物流状态变化
         if (KD100Util.getTableName(LogisticsInfos.class).equals(logisticsInfo.getTableName())) {
             LogisticsInfos byId = getById(logisticsInfo.getBusinessId());
-            byId.setLogisticsStatus(logisticsInfo.getState());
-            updateById(byId);
+            if (ObjectUtil.notEqual(logisticsInfo.getState(), byId.getLogisticsStatus())) {
+                byId.setLogisticsStatus(logisticsInfo.getState());
+                updateById(byId);
+                //如果是京东退货且物流状态为完成
+                updateJdBack(byId);
+            }
         }
     }
 
@@ -140,6 +151,7 @@ public class LogisticsInfosServiceImpl extends ServiceImpl<LogisticsInfosMapper,
     }
 
     @Override
+    @DSTransactional
     public void dataInfoEdit(Long id) {
         LogisticsInfos logisticsInfo = getById(id);
         Assert.notEmpty(logisticsInfo, "没有找到物流信息");
@@ -148,6 +160,8 @@ public class LogisticsInfosServiceImpl extends ServiceImpl<LogisticsInfosMapper,
         if (ObjectUtil.notEqual(state, logisticsInfo.getLogisticsStatus())) {
             logisticsInfo.setLogisticsStatus(state);
             updateById(logisticsInfo);
+            //如果是京东退货且物流状态为完成
+            updateJdBack(logisticsInfo);
         }
     }
 
@@ -173,4 +187,24 @@ public class LogisticsInfosServiceImpl extends ServiceImpl<LogisticsInfosMapper,
         updateById(logisticsInfo);
     }
 
+    /**
+     * 如果物流状态完成,更新京东退货状态,添加待质检数据
+     */
+    public void updateJdBack(LogisticsInfos logisticsInfo) {
+        if (ObjectUtil.isEmpty(logisticsInfo) || ObjectUtil.isEmpty(logisticsInfo.getLogisticsStatus())) {
+            return;
+        }
+        if (logisticsInfo.getLogisticsStatus() == 15 && logisticsInfo.getBusinessType() == 4) {
+            //京东退货状态修改添加待质检数据
+            JdBack jdBack = jdBackService.getById(logisticsInfo.getBusinessId());
+            if (ObjectUtil.isNotEmpty(jdBack)) {
+                jdBack.setStatus(3);//待质检
+                jdBackService.updateById(jdBack);
+                //创建待质检记录
+                List<JdBackDetails> jdBackDetailsList = jdBackDetailsService.list(q -> q.eq(JdBackDetails::getJdBackId, logisticsInfo.getBusinessId()));
+                jdBackService.createJdBackQualityWait(jdBackDetailsList);
+            }
+        }
+    }
+
 }

+ 24 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/quality/impl/QualityInfoServiceImpl.java

@@ -5,17 +5,20 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.kd100.entity.company.po.CompanyInfo;
 import com.fjhx.kd100.service.company.CompanyInfoService;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.quality.dto.QualityInfoDto;
 import com.fjhx.victoriatourist.entity.quality.dto.QualityInfoSelectDto;
 import com.fjhx.victoriatourist.entity.quality.po.QualityDetails;
 import com.fjhx.victoriatourist.entity.quality.po.QualityInfo;
 import com.fjhx.victoriatourist.entity.quality.vo.QualityInfoVo;
 import com.fjhx.victoriatourist.mapper.quality.QualityInfoMapper;
+import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
 import com.fjhx.victoriatourist.service.quality.QualityDetailsService;
 import com.fjhx.victoriatourist.service.quality.QualityInfoService;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
@@ -69,6 +72,8 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
     private ArrivalStockRecordsDetailsService arrivalStockRecordsDetailsService;
     @Autowired
     private ArrivalStockRecordsService arrivalStockRecordsService;
+    @Autowired
+    AbnormalInfoService abnormalInfoService;
 
     @Override
     public Page<QualityInfoVo> getPage(QualityInfoSelectDto dto) {
@@ -120,7 +125,7 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
     @Override
     public void add(QualityInfoDto qualityInfoDto) {
         qualityInfoDto.setType(1);//设置为到货质检
-        qualityInfoDto.setStatus(2);//质检完成
+        qualityInfoDto.setStatus(2);//部分质检
         ArrivalStockRecords arrivalStockRecords = arrivalStockRecordsService.getById(qualityInfoDto.getArrivalStockRecordsId());
         arrivalStockRecords.setQualityStatus(2);//质检完成
 
@@ -145,6 +150,7 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
         qualityInfoDto.setBussinessId(qualityInfoDto.getArrivalStockRecordsId());
         //创建质检明细
         List<QualityDetails> qualityDetailsList = qualityInfoDto.getQualityDetailsList();
+        int qFlag = 0;//质检存在不合格标志
         for (QualityDetails qualityDetails : qualityDetailsList) {
             qualityDetails.setId(null);//将明细id置空解决前端误传
             qualityDetails.setQualityInfoId(qualityInfoDto.getId());
@@ -164,7 +170,24 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
                 qualityInfoDto.setStatus(1);//修改为部分质检
                 arrivalStockRecords.setQualityStatus(1);//修改为部分质检
             }
+
+            //存在质检不合格创建异常
+            if (qualityDetails.getDisqualificationQuantity().compareTo(BigDecimal.ZERO) != 0) {
+                qFlag++;
+            }
         }
+
+        if (qFlag != 0) {
+            AbnormalInfo abnormalInfo = new AbnormalInfo();
+            abnormalInfo.setStatus(0);
+            abnormalInfo.setId(IdWorker.getId());
+            abnormalInfo.setType(10);
+            abnormalInfo.setLinkId(qualityInfoDto.getId());
+            abnormalInfo.setLinkCode(qualityInfoDto.getCode());
+            abnormalInfo.setTitle("质检存在不合格");
+            abnormalInfoService.save(abnormalInfo);
+        }
+
         this.save(qualityInfoDto);
         arrivalStockRecordsService.updateById(arrivalStockRecords);
         arrivalStockRecordsDetailsService.updateBatchById(arrivalStockRecordsDetailsList);

+ 39 - 35
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/stock/impl/StockTransferServiceImpl.java

@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
-import com.fjhx.victoriatourist.entity.jd.vo.JdBackVo;
 import com.fjhx.victoriatourist.entity.stock.dto.StockTransferDto;
 import com.fjhx.victoriatourist.entity.stock.dto.StockTransferSelectDto;
 import com.fjhx.victoriatourist.entity.stock.po.StockTransfer;
@@ -21,7 +20,6 @@ import com.fjhx.victoriatourist.service.stock.StockTransferDetailsService;
 import com.fjhx.victoriatourist.service.stock.StockTransferService;
 import com.fjhx.victoriatourist.utils.Assert;
 import com.fjhx.victoriatourist.utils.CodeEnum;
-import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.Stock;
 import com.fjhx.wms.entity.stock.po.StockJournal;
@@ -41,7 +39,6 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 
 /**
@@ -73,10 +70,10 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
     @Override
     public Page<StockTransferVo> getPage(StockTransferSelectDto dto) {
         IWrapper<StockTransfer> wrapper = getWrapper();
-        wrapper.eq(StockTransfer::getInWarehouseId,dto.getInWarehouseId());
-        wrapper.eq(StockTransfer::getOutWarehouseId,dto.getOutWarehouseId());
-        wrapper.eq(StockTransfer::getInStatus,dto.getInStatus());
-        wrapper.like(StockTransfer::getCode,dto.getKeyword());
+        wrapper.eq(StockTransfer::getInWarehouseId, dto.getInWarehouseId());
+        wrapper.eq(StockTransfer::getOutWarehouseId, dto.getOutWarehouseId());
+        wrapper.eq(StockTransfer::getInStatus, dto.getInStatus());
+        wrapper.like(StockTransfer::getCode, dto.getKeyword());
         wrapper.orderByDesc("st", StockTransfer::getId);
         Page<StockTransferVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<StockTransferVo> records = page.getRecords();
@@ -119,19 +116,41 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(StockTransferDto stockTransferDto) {
-        Assert.notEmpty(stockTransferDto.getOutWarehouseId(),"出库仓库不能为空");
-        Assert.notEmpty(stockTransferDto.getInWarehouseId(),"入库仓库不能为空");
-        Assert.notEmpty(stockTransferDto.getStockTransferDetailsList(),"调仓明细不能为空");
+        Assert.notEmpty(stockTransferDto.getOutWarehouseId(), "出库仓库不能为空");
+        Assert.notEmpty(stockTransferDto.getInWarehouseId(), "入库仓库不能为空");
+        Assert.notEmpty(stockTransferDto.getStockTransferDetailsList(), "调仓明细不能为空");
 
         stockTransferDto.setCode(CodeEnum.STOCK_TRANSFER.getCode());
         stockTransferDto.setType(1);
         stockTransferDto.setInStatus(0);
         this.save(stockTransferDto);
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
+        List<Stock> stockList = new ArrayList<>();
         for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
+            Stock stock = new Stock();
+            stock.setProductId(stockTransferDetails.getProductId());
+            stock.setQuantity(stockTransferDetails.getInQuantity());
+            stockList.add(stock);
+
             stockTransferDetails.setStockTransferId(stockTransferDto.getId());
         }
         stockTransferDetailsService.saveBatch(stockTransferDetailsList);
+
+        //创建出库记录
+        StockJournal stockJournal1 = new StockJournal();
+        stockJournal1.setOpType(2);
+        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
+        stockJournal1.setCode(stockTransferDto.getCode());
+        stockJournal1.setWarehouseId(stockTransferDto.getOutWarehouseId());
+        stockJournal1.setBusinessId(stockTransferDto.getId());
+        //保存出库记录
+        stockJournalService.save(stockJournal1);
+        if (ObjectUtil.isNotEmpty(stockList)) {
+            //出库
+            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransferDto.getOutWarehouseId());
+            //保存出库记录明细
+            stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
+        }
     }
 
     @Override
@@ -155,7 +174,7 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         //明细
         List<Stock> stockList = new ArrayList<>();
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
-        if(ObjectUtil.isNotEmpty(stockTransferDetailsList)) {
+        if (ObjectUtil.isNotEmpty(stockTransferDetailsList)) {
             //获取数据库中的数据
             List<Long> ids = stockTransferDetailsList.stream().map(StockTransferDetails::getId).collect(Collectors.toList());
             List<StockTransferDetails> oldstockTransferDetailsList = stockTransferDetailsService.listByIds(ids);
@@ -170,18 +189,18 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
 
                 //调仓接收数量与发出数量不一致
                 StockTransferDetails oldstockTransferDetails = oldstockTransferDetailsMap.get(stockTransferDetails.getId());
-                if (stockTransferDetails.getInQuantity().compareTo(oldstockTransferDetails.getOutQuantity())!=0) {
-                    abnormalFlag =1;
+                if (stockTransferDetails.getInQuantity().compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
+                    abnormalFlag = 1;
                 }
 
                 //计算已入库数量
                 BigDecimal inCount = oldstockTransferDetails.getInQuantity().add(stockTransferDetails.getInQuantity());
-                if (inCount.compareTo(oldstockTransferDetails.getOutQuantity())!=0 ) {
+                if (inCount.compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
                     stockTransfer.setInStatus(1);//设置为部分接收
                 }
                 stockTransferDetails.setInQuantity(inCount);
             }
-            if(abnormalFlag ==1){
+            if (abnormalFlag == 1) {
                 AbnormalInfo abnormalInfo = new AbnormalInfo();
                 abnormalInfo.setId(IdWorker.getId());
                 abnormalInfo.setStatus(0);
@@ -202,39 +221,24 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
         stockJournal.setCode(stockTransfer.getCode());
         stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
-//        stockJournal.setToWarehouseId(stockTransfer.getInWarehouseId());
         stockJournal.setBusinessId(stockTransfer.getId());
         //保存人库记录
         stockJournalService.save(stockJournal);
 
-        //创建出库记录
-        StockJournal stockJournal1 = new StockJournal();
-        stockJournal1.setOpType(2);
-        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
-        stockJournal1.setCode(stockTransfer.getCode());
-        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
-//        stockJournal1.setToWarehouseId(stockTransfer.getInWarehouseId());
-        stockJournal1.setBusinessId(stockTransfer.getId());
-        //保存出库记录
-        stockJournalService.save(stockJournal1);
-        if(ObjectUtil.isNotEmpty(stockList)) {
-            //出库
-            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransfer.getOutWarehouseId());
+        if (ObjectUtil.isNotEmpty(stockList)) {
             //入库
             List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 1, stockList, stockTransfer.getInWarehouseId());
-            //保存入库记录明细
+            //保存入库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList);
-            stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
-
         }
     }
 
     @Override
     @DSTransactional
     public void stockTransfer(StockTransferDto stockTransferDto) {
-        Assert.notEmpty(stockTransferDto.getOutWarehouseId(),"出库仓库不能为空");
-        Assert.notEmpty(stockTransferDto.getInWarehouseId(),"入库仓库不能为空");
-        Assert.notEmpty(stockTransferDto.getStockTransferDetailsList(),"调仓明细不能为空");
+        Assert.notEmpty(stockTransferDto.getOutWarehouseId(), "出库仓库不能为空");
+        Assert.notEmpty(stockTransferDto.getInWarehouseId(), "入库仓库不能为空");
+        Assert.notEmpty(stockTransferDto.getStockTransferDetailsList(), "调仓明细不能为空");
 
         stockTransferDto.setCode(CodeEnum.STOCK_TRANSFER.getCode());
         stockTransferDto.setType(1);