Преглед на файлове

Merge remote-tracking branch 'origin/master'

caozj преди 1 година
родител
ревизия
5e971f765a

+ 6 - 1
hx-common/src/main/java/com/fjhx/common/enums/PushBusinessTypeEnum.java

@@ -36,7 +36,12 @@ public enum PushBusinessTypeEnum {
     /**
      * 异常处理
      */
-    EXCEPTION_HANDLING(6);
+    EXCEPTION_HANDLING(6),
+
+    /**
+     * 单证被删除
+     */
+    DOCUMENTS_DEL(7);
 
     private final int type;
 

+ 8 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -256,6 +256,14 @@ public class ContractController {
     }
 
     /**
+     * 头部统计客户金额
+     */
+    @GetMapping("/getHeadCustomerStatistics")
+    public Map<String,Object> getHeadCustomerStatistics() {
+        return contractService.getHeadCustomerStatistics();
+    }
+
+    /**
      * 根据合同id获取合同的资金流水信息
      */
     @PostMapping("/111")

+ 5 - 9
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -1,9 +1,7 @@
 package com.fjhx.sale.entity.contract.po;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.Version;
 import com.fjhx.file.entity.ObsFile;
 import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
@@ -304,6 +302,11 @@ public class Contract extends BasePo {
     private String issue;
 
     /**
+     * 是否显示
+     */
+    private Integer isShow;
+
+    /**
      * 原合同id
      */
     private Long oldContractId;
@@ -318,12 +321,6 @@ public class Contract extends BasePo {
      */
     private Integer versions;
 
-    /**
-     * 是否显示
-     */
-    private Integer isShow;
-
-
     @TableField(exist = false)
     private Long upId;
 
@@ -368,5 +365,4 @@ public class Contract extends BasePo {
      */
     @TableField(exist = false)
     private String sellCorporationName;
-
 }

+ 10 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -78,6 +78,11 @@ public class ContractVo extends Contract {
     private BigDecimal sumPackQuantity;
 
     /**
+     * 已包装数量
+     */
+    private BigDecimal sumAmount;
+
+    /**
      * 合同产品ID
      */
     private Long contractProductId;
@@ -155,5 +160,10 @@ public class ContractVo extends Contract {
      */
     private List<ClaimContract> claimContractList;
 
+    /**
+     * 总数
+     */
+    private BigDecimal sumQuantity;
+
 }
 

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/sale/po/SaleQuotation.java

@@ -131,6 +131,11 @@ public class SaleQuotation extends BasePo {
     private String currency;
 
     /**
+     * 客户标签
+     */
+    private String tag;
+
+    /**
      * 付款金额(打款中的实际打款金额)
      */
     private BigDecimal amount;

+ 1 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -102,4 +102,5 @@ public interface ContractMapper extends BaseMapper<Contract> {
     List<AccountRunningWaterVo> getAccountRunningWaterByContractId(@Param("contractId") Long contractId);
 
     void updateContract(Contract contract);
+    List<ContractVo> getCustomerMoney();
 }

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

@@ -42,8 +42,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
     @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.eq(ObjectUtil.isNotEmpty(dto.getUserId()), "c.user_id", dto.getUserId());
+        query.eq(ObjectUtil.isNotEmpty(dto.getTime()), "DATE_FORMAT(c.create_time,'%Y')", dto.getTime());
         query.orderByDesc("c.create_time");
         Page<CommissionVo> page = this.baseMapper.getPage(dto.getPage(), query);
         return page;

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

@@ -189,4 +189,10 @@ public interface ContractService extends BaseService<Contract> {
     List<AccountRunningWaterVo> getAccountRunningWaterByContractId(Long contractId);
 
     void updateContract(Contract contract);
+
+    /**
+     * 统计头部客户金额
+     * @return
+     */
+    Map<String,Object> getHeadCustomerStatistics();
 }

+ 29 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -250,6 +250,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private Page<ContractVo> pageCommon(ContractSelectDto dto, IWrapper<Contract> wrapper) {
         wrapper.orderByDesc("t1", Contract::getCreateTime);
         wrapper.eq("t1", Contract::getIsChange, "0");//列表只展示未变更得数据
+        wrapper.ne("t1",Contract::getIsShow,1);
         wrapper.between("t1", Contract::getStatus, FlowStatusEnum1.DRAFT.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
         if (StringUtils.isNotEmpty(dto.getStatus())) {
             wrapper.eq("t1", Contract::getStatus, dto.getStatus());
@@ -1664,4 +1665,32 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     public void updateContract(Contract contract) {
         baseMapper.updateContract(contract);
     }
+
+    /**
+     * 头部统计客户金额
+     * @return
+     */
+    @Override
+    public Map<String, Object> getHeadCustomerStatistics() {
+        Map<String,Object> map = new HashMap<>();
+        map.put("sumAmount",BigDecimal.ZERO);
+        map.put("sumArrivalAmount",BigDecimal.ZERO);
+        map.put("sumQuantity",BigDecimal.ZERO);
+        map.put("list",new ArrayList<>());
+        List<ContractVo> list = baseMapper.getCustomerMoney();
+        if(CollectionUtils.isNotEmpty(list)){
+            BigDecimal sumAmount = list.stream().map(ContractVo::getSumAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+            BigDecimal sumQuantity = list.stream().map(ContractVo::getSumQuantity).reduce(BigDecimal.ZERO,BigDecimal::add);
+            BigDecimal sumClaimMoney = list.stream().map(ContractVo::getSumClaimMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
+            //赋值原卖方公司名称 多公司
+            corporationService.attributeAssign(list, ContractVo::getSellCorporationId, (item, corporation) -> {
+                item.setSellCorporationName(corporation.getName());
+            });
+            map.put("sumAmount",sumAmount);
+            map.put("sumArrivalAmount",sumQuantity);
+            map.put("sumQuantity",sumClaimMoney);
+            map.put("list",list);
+        }
+        return map;
+    }
 }

+ 0 - 3
hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackDetailServiceImpl.java

@@ -55,11 +55,8 @@ public class PackDetailServiceImpl extends ServiceImpl<PackDetailMapper, PackDet
             wrapper.eq("pd", PackDetailVo::getShipmentStatus, dto.getShipmentStatus());
         }
         if (StringUtils.isNotEmpty(dto.getKeyword())) {
-//            wrapper.keyword(dto.getKeyword(), new SqlField("t3.`code`"), new SqlField("t2.`product_name`"));
             wrapper.like("pd.codeAPName", dto.getKeyword());
         }
-//        wrapper.groupBy("t1.pack_id");
-//        wrapper.orderByDesc("t1.create_time");
         Page<PackDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }

+ 130 - 21
hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackServiceImpl.java

@@ -1,26 +1,36 @@
 package com.fjhx.sale.service.pack.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 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.common.enums.CodingRuleEnum;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.common.service.coding.CodingRuleService;
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.documents.po.Documents;
+import com.fjhx.sale.entity.documents.po.DocumentsPdf;
+import com.fjhx.sale.entity.documents.po.DocumentsProduct;
+import com.fjhx.sale.entity.documents.po.DocumentsTransport;
 import com.fjhx.sale.entity.pack.dto.PackDto;
 import com.fjhx.sale.entity.pack.dto.PackSelectDto;
-import com.fjhx.sale.entity.pack.po.Pack;
-import com.fjhx.sale.entity.pack.po.PackDetail;
-import com.fjhx.sale.entity.pack.po.PackDetailGoods;
-import com.fjhx.sale.entity.pack.po.PackDetailProduct;
+import com.fjhx.sale.entity.pack.po.*;
 import com.fjhx.sale.entity.pack.vo.PackVo;
 import com.fjhx.sale.mapper.pack.PackMapper;
-import com.fjhx.sale.service.pack.PackDetailGoodsService;
-import com.fjhx.sale.service.pack.PackDetailProductService;
-import com.fjhx.sale.service.pack.PackDetailService;
-import com.fjhx.sale.service.pack.PackService;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.sale.service.documents.DocumentsPdfService;
+import com.fjhx.sale.service.documents.DocumentsProductService;
+import com.fjhx.sale.service.documents.DocumentsService;
+import com.fjhx.sale.service.documents.DocumentsTransportService;
+import com.fjhx.sale.service.pack.*;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +38,8 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -35,7 +47,7 @@ import java.util.List;
  * 装箱出货表 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-18
  */
 @Service
@@ -52,6 +64,18 @@ public class PackServiceImpl extends ServiceImpl<PackMapper, Pack> implements Pa
 
     @Autowired
     private CodingRuleService codingRuleService;
+    @Autowired
+    private PackShipmentService packShipmentService;
+    @Autowired
+    private DocumentsService documentsService;
+    @Autowired
+    private DocumentsPdfService documentsPdfService;
+    @Autowired
+    private DocumentsProductService documentsProductService;
+    @Autowired
+    private DocumentsTransportService documentsTransportService;
+    @Autowired
+    private ContractService contractService;
 
     @Override
     public Page<PackVo> getPage(PackSelectDto dto) {
@@ -70,28 +94,29 @@ public class PackServiceImpl extends ServiceImpl<PackMapper, Pack> implements Pa
 
     /**
      * 新增
+     *
      * @param pack
      */
     @Override
     @DSTransactional
     public void add(Pack pack) {
-        if(StringUtils.isEmpty(pack.getContractIds())){
+        if (StringUtils.isEmpty(pack.getContractIds())) {
             throw new ServiceException("参数异常");
         }
 //        pack.setCode(CodeEnum.PACK.getCode());
-        pack.setCode(codingRuleService.createCode(CodingRuleEnum.PACK.getKey(),null));
+        pack.setCode(codingRuleService.createCode(CodingRuleEnum.PACK.getKey(), null));
         this.save(pack);
         List<PackDetail> packDetailList = pack.getPackDetailList();
-        if(CollectionUtils.isNotEmpty(packDetailList)){
+        if (CollectionUtils.isNotEmpty(packDetailList)) {
             List<PackDetailProduct> packDetailProductList = new ArrayList<>();
             List<PackDetailGoods> packDetailGoodsList = new ArrayList<>();
-            for(PackDetail p:packDetailList){
+            for (PackDetail p : packDetailList) {
                 p.setPackId(pack.getId());
                 p.setId(IdWorker.getId());
                 //处理装箱产品明细
-                setPackDetailProducts(p,packDetailProductList);
+                setPackDetailProducts(p, packDetailProductList);
                 //处理自定义装箱货物
-                setPackDetailGoods(p,packDetailGoodsList);
+                setPackDetailGoods(p, packDetailGoodsList);
             }
             packDetailService.saveBatch(packDetailList);
             packDetailGoodsService.saveBatch(packDetailGoodsList);
@@ -101,27 +126,30 @@ public class PackServiceImpl extends ServiceImpl<PackMapper, Pack> implements Pa
 
     /**
      * 处理装箱产品明细
+     *
      * @param packDetail
      * @param packDetailProductList
      */
-    private void setPackDetailProducts(PackDetail packDetail,List<PackDetailProduct> packDetailProductList){
+    private void setPackDetailProducts(PackDetail packDetail, List<PackDetailProduct> packDetailProductList) {
         List<PackDetailProduct> list = packDetail.getPackDetailProductList();
-        if(CollectionUtils.isNotEmpty(list)){
-            for(PackDetailProduct p:list){
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (PackDetailProduct p : list) {
                 p.setPackDetailId(packDetail.getId());
                 packDetailProductList.add(p);
             }
         }
     }
+
     /**
      * 处理装箱产品明细
+     *
      * @param packDetail
      * @param packDetailGoodsList
      */
-    private void setPackDetailGoods(PackDetail packDetail,List<PackDetailGoods> packDetailGoodsList){
+    private void setPackDetailGoods(PackDetail packDetail, List<PackDetailGoods> packDetailGoodsList) {
         List<PackDetailGoods> list = packDetail.getPackDetailGoodsList();
-        if(CollectionUtils.isNotEmpty(list)){
-            for(PackDetailGoods p:list){
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (PackDetailGoods p : list) {
                 p.setPackDetailId(packDetail.getId());
                 packDetailGoodsList.add(p);
             }
@@ -133,9 +161,90 @@ public class PackServiceImpl extends ServiceImpl<PackMapper, Pack> implements Pa
         this.updateById(packDto);
     }
 
+    /**
+     * 删除装箱
+     *
+     * @param id
+     */
+    @DSTransactional
     @Override
     public void delete(Long id) {
+//        this.removeById(id);//删除装箱
+//        List<PackDetail> packDetailList = packDetailService.list(Wrappers.<PackDetail>query().lambda().eq(PackDetail::getPackId,id));
+//        if(CollectionUtils.isEmpty(packDetailList)){
+//            throw new ServiceException("删除失败,装箱明细数据异常");
+//        }
+//        List<Long> detailIds = packDetailList.stream().map(PackDetail::getId).collect(Collectors.toList());
+//        packDetailService.remove(Wrappers.<PackDetail>query().lambda().in(PackDetail::getId,detailIds));
+//        packDetailProductService.remove(Wrappers.<PackDetailProduct>query().lambda().in(PackDetailProduct::getPackDetailId,detailIds));
+//        packDetailGoodsService.remove(Wrappers.<PackDetailGoods>query().lambda().in(PackDetailGoods::getPackDetailId,detailIds));
+//        PackShipment packShipment = packShipmentService.getOne(Wrappers.<PackShipment>query().lambda().eq(PackShipment::getPackDetailIds,StringUtils.join(detailIds,",")).last("limit 1"));
+//        if(ObjectUtils.isNotEmpty(packShipment)){//已出货
+//            packShipmentService.removeById(packShipment.getId());
+//            //查询是否单证
+//            Documents documents = documentsService.getOne(Wrappers.<Documents>query().lambda().eq(Documents::getPackShipmentId,packShipment.getId()).last("limit 1"));
+//            if(ObjectUtils.isNotEmpty(documents)){
+//                //删除单证相关数据
+//                documentsService.removeById(documents.getId());
+//                documentsProductService.remove(Wrappers.<DocumentsProduct>query().lambda().eq(DocumentsProduct::getDocumentsId,documents.getId()));
+//                documentsPdfService.remove(Wrappers.<DocumentsPdf>query().lambda().eq(DocumentsPdf::getDocumentId,documents.getId()));
+//                documentsTransportService.remove(Wrappers.<DocumentsTransport>query().lambda().eq(DocumentsTransport::getDocumentsId,documents.getId()));
+//            }
+//        }
+        //删除主表信息
         this.removeById(id);
+
+        List<PackDetail> packDetailList = packDetailService.list(q -> q.eq(PackDetail::getPackId, id));
+        if (ObjectUtil.isEmpty(packDetailList)) {
+            return;
+        }
+        List<Long> packDetailIds = packDetailList.stream().map(PackDetail::getId).distinct().collect(Collectors.toList());
+
+        //删除装箱明细
+        packDetailService.remove(q -> q.eq(PackDetail::getPackId, id));
+        //删除自定义装箱出货
+        packDetailGoodsService.remove(q -> q.in(PackDetailGoods::getPackDetailId, packDetailIds));
+        //删除装箱出货产品明细
+        packDetailProductService.remove(q -> q.in(PackDetailProduct::getPackDetailId, packDetailIds));
+        //删除装箱绑定主合同信息
+        IWrapper<PackShipment> wrapper = IWrapper.getWrapper();
+        packDetailIds.forEach(item -> wrapper.like(PackShipment::getPackDetailIds, item).or());
+        List<PackShipment> packShipmentList = packShipmentService.list(wrapper);
+        if (ObjectUtil.isEmpty(packShipmentList)) {
+            return;
+        }
+        packShipmentService.remove(wrapper);
+
+        List<Long> packShipmentIds = packShipmentList.stream().map(PackShipment::getId).distinct().collect(Collectors.toList());
+        //删除单证信息
+        List<Documents> documentsList = documentsService.list(q -> q.in(Documents::getPackShipmentId, packShipmentIds));
+        if (ObjectUtil.isEmpty(documentsList)) {
+            return;
+        }
+        documentsService.remove(q -> q.in(Documents::getPackShipmentId, packShipmentIds));
+        List<Long> documentsIds = documentsList.stream().map(Documents::getId).distinct().collect(Collectors.toList());
+        //删除单证PDF信息
+        documentsPdfService.remove(q -> q.in(DocumentsPdf::getDocumentId, documentsIds));
+        //删除单证产品信息
+        documentsProductService.remove(q -> q.in(DocumentsProduct::getDocumentsId, documentsIds));
+        //删除单证货运信息
+        documentsTransportService.remove(q -> q.in(DocumentsTransport::getDocumentsId, documentsIds));
+
+        //发送消息告诉单证创建人 单证被删除
+        List<Long> cIds = documentsList.stream().map(Documents::getContractId).distinct().collect(Collectors.toList());
+        Map<Long, Contract> contractMap = contractService.mapKEntity(Contract::getId, q -> q.in(Contract::getId, cIds));
+        for (Documents documents : documentsList) {
+            Contract contract = contractMap.get(documents.getContractId());
+            String contractCode = ObjectUtil.isNotEmpty(contract) ? contract.getCode() : String.valueOf(documents.getContractId());
+            String userName = SecurityUtils.getLoginUser().getUser().getNickName();
+            String msg = "您创建的单证,主合同号:({})被({})删除,原因:装箱信息被({})删除";
+            WebSocketPush.byUser(
+                    PushTypeEnum.MESSAGE,
+                    documents.getCreateUser(),
+                    StrUtil.format(msg, contractCode, userName, userName),
+                    PushBusinessTypeEnum.DOCUMENTS_DEL.getType()
+            );
+        }
     }
 
 }

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/service/quality/impl/EhsdQualityServiceImpl.java

@@ -100,7 +100,7 @@ public class EhsdQualityServiceImpl extends ServiceImpl<EhsdQualityMapper, EhsdQ
      * @param ehsdQualityDto
      */
     @Override
-    @LogicIgnore(tableName = {""},alias = {""})
+    @LogicIgnore
     @DSTransactional
     public void submit(EhsdQualityDto ehsdQualityDto) {
         if(ObjectUtils.isEmpty(ehsdQualityDto.getId())){//添加

+ 23 - 0
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -240,6 +240,29 @@
           AND c.id = #{contractId}
     </select>
 
+    <select id="getCustomerMoney" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT
+            t1.sell_corporation_id AS sellCorporationId,
+            IFNULL( SUM( t2.amount * t1.rate ), 0 ) AS sumAmount,
+            IFNULL( count(1) ,0 ) AS sumQuantity,
+            (
+                SELECT
+                    IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( cc.rate, 1 )), 0 )
+                FROM
+                    claim_contract cc
+                WHERE
+                    FIND_IN_SET( cc.contract_id, GROUP_CONCAT( t1.id ) )
+            ) AS sumClaimMoney
+        FROM
+            contract t1
+                LEFT JOIN contract_product t2 ON t1.id = t2.contract_id
+        WHERE
+            t1.is_show != 1
+            AND t1.is_change = 0
+            AND t1.`status` >= 30
+            AND t1.`status` &lt; 70
+        GROUP BY sell_corporation_id
+    </select>
     <update id="updateContract" parameterType="com.fjhx.sale.entity.contract.po.Contract">
         update contract
         <set>