瀏覽代碼

跟单记录

24282 2 年之前
父節點
當前提交
feb09f56b7

+ 5 - 0
hx-common/src/main/java/com/fjhx/common/entity/documentary/dto/DocumentaryRecordSelectDto.java

@@ -26,4 +26,9 @@ public class DocumentaryRecordSelectDto extends BaseSelectDto {
      */
     private JSONObject condition;
 
+    /**
+     * 无跟单记录配置id
+     */
+    private Long noRecordDocumentaryId;
+
 }

+ 1 - 1
hx-common/src/main/java/com/fjhx/common/entity/documentary/eums/DocumentaryTypeEnum.java

@@ -13,8 +13,8 @@ import java.util.Map;
 @AllArgsConstructor
 public enum DocumentaryTypeEnum {
 
+    sales(1, "销售跟单", "contractServiceImpl"),
 
-    sales(1, "销售跟单", "serviceContractServiceImpl"),
     purchase(2, "采购跟单", "purchaseDocumentaryImpl");
 
     /**

+ 6 - 3
hx-common/src/main/java/com/fjhx/common/service/documentary/GetDocumentaryBusinessTemplate.java

@@ -5,15 +5,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.entity.documentary.bo.DocumentaryData;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 
+import java.util.List;
+
 public interface GetDocumentaryBusinessTemplate {
 
     /**
      * 获取跟单分页数据
      *
-     * @param selectData 筛选条件
-     * @param dto        分页参数
+     * @param selectData        筛选条件
+     * @param dto               分页参数
+     * @param excludeBusinessId 排除业务id
      * @return 分页数据
      */
-    Page<? extends DocumentaryData> getDocumentaryPage(JSONObject selectData, BaseSelectDto dto);
+    Page<? extends DocumentaryData> getDocumentaryPage(JSONObject selectData, BaseSelectDto dto, List<Long> excludeBusinessId);
 
 }

+ 48 - 5
hx-common/src/main/java/com/fjhx/common/service/documentary/impl/DocumentaryRecordServiceImpl.java

@@ -1,9 +1,11 @@
 package com.fjhx.common.service.documentary.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.documentary.bo.DocumentaryData;
 import com.fjhx.common.entity.documentary.dto.DocumentaryRecordSelectDto;
 import com.fjhx.common.entity.documentary.eums.DocumentaryTypeEnum;
@@ -19,8 +21,13 @@ import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
 import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.exception.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -61,24 +68,60 @@ public class DocumentaryRecordServiceImpl extends ServiceImpl<DocumentaryRecordM
 
         // 获取跟单类型
         DocumentaryTypeEnum typeEnum = DocumentaryTypeEnum.getEnum(dto.getType());
+        GetDocumentaryBusinessTemplate bean = typeEnum.getBusinessBean();
+
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        SecurityContext context = SecurityContextHolder.getContext();
 
         CompletableFuture<? extends Page<? extends DocumentaryData>> pageCompletableFuture =
                 CompletableFuture.supplyAsync(() -> {
-                    GetDocumentaryBusinessTemplate bean = typeEnum.getBusinessBean();
-                    Page<? extends DocumentaryData> page = bean.getDocumentaryPage(dto.getCondition(), dto);
+                    // 设置子线程共享
+                    RequestContextHolder.setRequestAttributes(servletRequestAttributes, true);
+                    SecurityContextHolder.setContext(context);
+                    DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
+
+                    List<Long> excludeBusinessId = null;
+                    Long noRecordDocumentaryId = dto.getNoRecordDocumentaryId();
+                    if (noRecordDocumentaryId != null) {
+                        // 排除业务id
+                        excludeBusinessId = listObject(DocumentaryRecord::getBusinessId,
+                                q -> q.eq(DocumentaryRecord::getDocumentaryId, noRecordDocumentaryId));
+                    }
+
+                    Page<? extends DocumentaryData> page = bean.getDocumentaryPage(dto.getCondition(), dto, excludeBusinessId);
                     setDocumentaryRecord(page);
+
+                    DynamicDataSourceContextHolder.poll();
                     return page;
-                }, threadPoolExecutor);
+                }, threadPoolExecutor).exceptionally(e -> {
+                    if (e instanceof ServiceException) {
+                        throw (ServiceException) e;
+                    }
+                    throw new RuntimeException(e);
+                });
 
         CompletableFuture<List<DocumentaryVo>> getDocumentaryListFuture =
                 CompletableFuture.supplyAsync(() -> {
+                    // 设置子线程共享
+                    RequestContextHolder.setRequestAttributes(servletRequestAttributes, true);
+                    SecurityContextHolder.setContext(context);
+                    DynamicDataSourceContextHolder.push(SourceConstant.COMMON);
+
                     List<DocumentaryVo> documentaryList = getDocumentaryList(typeEnum.getKey());
                     setDocumentaryRecordCount(documentaryList);
+
+                    DynamicDataSourceContextHolder.poll();
                     return documentaryList;
-                }, threadPoolExecutor);
+                }, threadPoolExecutor).exceptionally(e -> {
+                    if (e instanceof ServiceException) {
+                        throw (ServiceException) e;
+                    }
+                    throw new RuntimeException(e);
+                });
+
 
-        List<DocumentaryVo> documentaryList = getDocumentaryListFuture.join();
         Page<? extends DocumentaryData> documentaryDataPage = pageCompletableFuture.join();
+        List<DocumentaryVo> documentaryList = getDocumentaryListFuture.join();
 
         DocumentaryRecordInfoVo vo = new DocumentaryRecordInfoVo();
         vo.setDocumentaryList(documentaryList);

+ 20 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/bo/ContractDocumentaryBo.java

@@ -0,0 +1,20 @@
+package com.fjhx.sale.entity.contract.bo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ContractDocumentaryBo {
+
+    /**
+     * 销售合同号
+     */
+    private String code;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractDocumentary.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.common.entity.documentary.bo.DocumentaryData;
+import com.fjhx.common.entity.documentary.vo.DocumentaryRecordVo;
+import com.fjhx.sale.entity.contract.po.Contract;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+@Getter
+@Setter
+public class ContractDocumentary extends Contract implements DocumentaryData {
+
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 跟单记录
+     */
+    private Map<Long, List<DocumentaryRecordVo>> documentaryRecord;
+
+}

+ 46 - 10
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -1,24 +1,31 @@
 package com.fjhx.sale.service.contract.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.entity.documentary.bo.DocumentaryData;
+import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
+import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.vo.ContractDocumentary;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.mapper.contract.ContractMapper;
 import com.fjhx.sale.service.contract.ContractService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
 import org.apache.commons.collections4.MapUtils;
 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.contract.vo.ContractVo;
-import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.sale.entity.contract.dto.ContractDto;
-import cn.hutool.core.bean.BeanUtil;
 
 import java.util.List;
 import java.util.Map;
@@ -30,17 +37,19 @@ import java.util.stream.Collectors;
  * 外销合同表 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-17
  */
 @Service
-public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements ContractService {
+public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
+        implements ContractService, GetDocumentaryBusinessTemplate {
 
     @Autowired
     private CustomerService customerService;
 
     /**
      * 分页
+     *
      * @param dto
      * @return
      */
@@ -115,13 +124,40 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
 
     /**
      * 根据合同id集合查询合同列表
+     *
      * @param ids
      * @return
      */
     @Override
     public List<Contract> getByIds(List<Long> ids) {
-        List<Contract> list = this.list(Wrappers.<Contract>query().lambda().in(Contract::getId,ids));
+        List<Contract> list = this.list(Wrappers.<Contract>query().lambda().in(Contract::getId, ids));
         return list;
     }
 
+    @Override
+    public Page<? extends DocumentaryData> getDocumentaryPage(JSONObject selectData, BaseSelectDto dto, List<Long> excludeBusinessId) {
+
+        ContractDocumentaryBo bo = selectData.toJavaObject(ContractDocumentaryBo.class);
+
+        IWrapper<Contract> wrapper = IWrapper.getWrapper();
+        wrapper.like(Contract::getCode, bo.getCode());
+        wrapper.eq(Contract::getCreateUser, bo.getUserId());
+        wrapper.notIn(Contract::getId, excludeBusinessId);
+        wrapper.orderByDesc(Contract::getId);
+
+        Page<Contract> itemPage = page(dto.getPage(), wrapper);
+        Page<ContractDocumentary> page = PageUtils.copyPage(itemPage, ContractDocumentary.class);
+        List<ContractDocumentary> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 赋值客户名称
+        customerService.attributeAssign(records, Contract::getBuyCorporationId, (item, customer) -> {
+            item.setCustomerName(customer.getName());
+        });
+
+        return page;
+    }
 }