|
@@ -1,36 +1,62 @@
|
|
package com.fjhx.sale.service.sample.impl;
|
|
package com.fjhx.sale.service.sample.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
+import com.fjhx.account.entity.account.po.AccountManagement;
|
|
|
|
+import com.fjhx.account.service.account.AccountManagementService;
|
|
|
|
+import com.fjhx.area.utils.CustomizeAreaUtil;
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
|
|
+import com.fjhx.common.entity.corporation.po.Corporation;
|
|
import com.fjhx.common.enums.FlowStatusEnum;
|
|
import com.fjhx.common.enums.FlowStatusEnum;
|
|
|
|
+import com.fjhx.common.service.corporation.CorporationService;
|
|
|
|
+import com.fjhx.common.utils.Assert;
|
|
import com.fjhx.customer.entity.customer.po.Customer;
|
|
import com.fjhx.customer.entity.customer.po.Customer;
|
|
import com.fjhx.customer.service.customer.CustomerService;
|
|
import com.fjhx.customer.service.customer.CustomerService;
|
|
import com.fjhx.file.entity.FileInfoVo;
|
|
import com.fjhx.file.entity.FileInfoVo;
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
|
+import com.fjhx.item.entity.product.po.ProductInfo;
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
|
+import com.fjhx.sale.entity.contract.po.Contract;
|
|
|
|
+import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
|
|
import com.fjhx.sale.entity.contract.vo.ContractProductVo;
|
|
import com.fjhx.sale.entity.contract.vo.ContractProductVo;
|
|
import com.fjhx.sale.entity.sample.dto.SampleDto;
|
|
import com.fjhx.sale.entity.sample.dto.SampleDto;
|
|
import com.fjhx.sale.entity.sample.dto.SampleSelectDto;
|
|
import com.fjhx.sale.entity.sample.dto.SampleSelectDto;
|
|
import com.fjhx.sale.entity.sample.po.Sample;
|
|
import com.fjhx.sale.entity.sample.po.Sample;
|
|
|
|
+import com.fjhx.sale.entity.sample.po.SampleProduct;
|
|
|
|
+import com.fjhx.sale.entity.sample.po.SampleProject;
|
|
|
|
+import com.fjhx.sale.entity.sample.vo.SamplePdfInfoVo;
|
|
import com.fjhx.sale.entity.sample.vo.SampleVo;
|
|
import com.fjhx.sale.entity.sample.vo.SampleVo;
|
|
import com.fjhx.sale.mapper.sample.SampleMapper;
|
|
import com.fjhx.sale.mapper.sample.SampleMapper;
|
|
|
|
+import com.fjhx.sale.service.sample.SampleProductService;
|
|
|
|
+import com.fjhx.sale.service.sample.SampleProjectService;
|
|
import com.fjhx.sale.service.sample.SampleService;
|
|
import com.fjhx.sale.service.sample.SampleService;
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
|
+import com.ruoyi.framework.config.ThreadPoolConfig;
|
|
import com.ruoyi.system.service.ISysUserService;
|
|
import com.ruoyi.system.service.ISysUserService;
|
|
import com.ruoyi.system.utils.UserUtil;
|
|
import com.ruoyi.system.utils.UserUtil;
|
|
import org.apache.commons.collections4.MapUtils;
|
|
import org.apache.commons.collections4.MapUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
|
+import org.springframework.security.core.context.SecurityContext;
|
|
|
|
+import org.springframework.security.core.context.SecurityContextHolder;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
+import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Locale;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
|
+import java.util.concurrent.ThreadPoolExecutor;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@@ -45,6 +71,10 @@ import java.util.stream.Collectors;
|
|
@Service
|
|
@Service
|
|
public class SampleServiceImpl extends ServiceImpl<SampleMapper, Sample> implements SampleService {
|
|
public class SampleServiceImpl extends ServiceImpl<SampleMapper, Sample> implements SampleService {
|
|
|
|
|
|
|
|
+ @Qualifier(ThreadPoolConfig.threadPoolTaskExecutor)
|
|
|
|
+ @Autowired
|
|
|
|
+ private ThreadPoolExecutor threadPoolExecutor;
|
|
|
|
+
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private CustomerService customerService;
|
|
private CustomerService customerService;
|
|
@@ -54,6 +84,15 @@ public class SampleServiceImpl extends ServiceImpl<SampleMapper, Sample> impleme
|
|
@Autowired
|
|
@Autowired
|
|
private ISysUserService userService;
|
|
private ISysUserService userService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private CorporationService corporationService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SampleProductService sampleProductService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SampleProjectService sampleProjectService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private AccountManagementService accountManagementService;
|
|
|
|
+
|
|
|
|
|
|
/**
|
|
/**
|
|
* 分页
|
|
* 分页
|
|
@@ -194,4 +233,206 @@ public class SampleServiceImpl extends ServiceImpl<SampleMapper, Sample> impleme
|
|
return page;
|
|
return page;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public SamplePdfInfoVo getSamplePdfInfo(Long id) {
|
|
|
|
+ Assert.notEmpty(id,"样品单id不能为空");
|
|
|
|
+ Sample sample = getById(id);
|
|
|
|
+ Assert.notEmpty(sample,"查询不到样品单信息");
|
|
|
|
+
|
|
|
|
+ SamplePdfInfoVo contractPdfInfoVo = new SamplePdfInfoVo();
|
|
|
|
+ setExportSampleInfo(contractPdfInfoVo, sample);
|
|
|
|
+ return contractPdfInfoVo;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 赋值样品单信息
|
|
|
|
+ */
|
|
|
|
+ private void setExportSampleInfo(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+
|
|
|
|
+ SecurityContext context = SecurityContextHolder.getContext();
|
|
|
|
+
|
|
|
|
+ // 赋值卖方公司基本信息
|
|
|
|
+ CompletableFuture<Void> setSellCorporationInfoFuture = CompletableFuture.runAsync(
|
|
|
|
+ () -> {
|
|
|
|
+ SecurityContextHolder.setContext(context);
|
|
|
|
+ setSellCorporationInfo(contractPdfInfoVo, sample);
|
|
|
|
+ }, threadPoolExecutor);
|
|
|
|
+
|
|
|
|
+ // 赋值买方公司基本信息
|
|
|
|
+ CompletableFuture<Void> setBuyCorporationFuture = CompletableFuture.runAsync(
|
|
|
|
+ () -> {
|
|
|
|
+ SecurityContextHolder.setContext(context);
|
|
|
|
+ setBuyCorporation(contractPdfInfoVo, sample);
|
|
|
|
+ }, threadPoolExecutor);
|
|
|
|
+
|
|
|
|
+ // 赋值买卖方公司地址
|
|
|
|
+ CompletableFuture<Void> setAreaFuture = CompletableFuture.runAsync(
|
|
|
|
+ () -> {
|
|
|
|
+ SecurityContextHolder.setContext(context);
|
|
|
|
+ setArea(contractPdfInfoVo, sample);
|
|
|
|
+ }, threadPoolExecutor);
|
|
|
|
+
|
|
|
|
+ // 赋值商品列表信息
|
|
|
|
+ CompletableFuture<Void> setProductListFuture = CompletableFuture.runAsync(
|
|
|
|
+ () -> {
|
|
|
|
+ SecurityContextHolder.setContext(context);
|
|
|
|
+ setProductList(contractPdfInfoVo, sample);
|
|
|
|
+ }, threadPoolExecutor);
|
|
|
|
+
|
|
|
|
+ // 设置收款账号
|
|
|
|
+ CompletableFuture<Void> setAccountManagementFuture = CompletableFuture.runAsync(
|
|
|
|
+ () -> {
|
|
|
|
+ SecurityContextHolder.setContext(context);
|
|
|
|
+ setAccountManagement(contractPdfInfoVo, sample);
|
|
|
|
+ }, threadPoolExecutor);
|
|
|
|
+
|
|
|
|
+ // 赋值合同基本信息
|
|
|
|
+ setInfo(contractPdfInfoVo, sample);
|
|
|
|
+
|
|
|
|
+ CompletableFuture.allOf(
|
|
|
|
+ setSellCorporationInfoFuture,
|
|
|
|
+ setBuyCorporationFuture,
|
|
|
|
+ setAreaFuture,
|
|
|
|
+ setProductListFuture,
|
|
|
|
+ setAccountManagementFuture
|
|
|
|
+ ).join();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 赋值卖方公司基本信息
|
|
|
|
+ */
|
|
|
|
+ private void setSellCorporationInfo(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+ // 卖方公司信息
|
|
|
|
+ Corporation corporation = corporationService.getById(sample.getSellCorporationId());
|
|
|
|
+ if (corporation == null) {
|
|
|
|
+ throw new ServiceException("卖方公司信息为空");
|
|
|
|
+ }
|
|
|
|
+ contractPdfInfoVo.setSellCorporationId(sample.getSellCorporationId());
|
|
|
|
+ contractPdfInfoVo.setSellCorporationNameEn(corporation.getNameEn());
|
|
|
|
+ contractPdfInfoVo.setSellCorporationName(corporation.getName());
|
|
|
|
+ contractPdfInfoVo.setSellContactName(sample.getSellContactName());
|
|
|
|
+ contractPdfInfoVo.setSellContactNumber(sample.getSellContactNumber());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 赋值买方公司基本信息
|
|
|
|
+ */
|
|
|
|
+ private void setBuyCorporation(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+ Customer customer = customerService.getById(sample.getBuyCorporationId());
|
|
|
|
+ if (customer == null) {
|
|
|
|
+ throw new ServiceException("买方公司信息为空");
|
|
|
|
+ }
|
|
|
|
+ contractPdfInfoVo.setBuyCorporationId(sample.getBuyCorporationId());
|
|
|
|
+ contractPdfInfoVo.setBuyCorporationName(customer.getName());
|
|
|
|
+ contractPdfInfoVo.setBuyContactName(sample.getBuyContactName());
|
|
|
|
+ contractPdfInfoVo.setBuyContactNumber(sample.getBuyContactNumber());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 赋值买卖公司地址
|
|
|
|
+ */
|
|
|
|
+ private void setArea(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+
|
|
|
|
+ List<Long> areaIdList = Arrays.asList(
|
|
|
|
+ sample.getBuyCountryId(),
|
|
|
|
+ sample.getBuyProvinceId(),
|
|
|
|
+ sample.getBuyCityId()
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ Map<Long, String> areaMap = CustomizeAreaUtil.getAreaMapByIds(areaIdList);
|
|
|
|
+
|
|
|
|
+ contractPdfInfoVo.setSellCountryName(sample.getSellCountryName());
|
|
|
|
+ contractPdfInfoVo.setSellProvinceName(sample.getSellProvinceName());
|
|
|
|
+ contractPdfInfoVo.setSellCityName(sample.getSellCityName());
|
|
|
|
+ contractPdfInfoVo.setSellDetailedAddress(sample.getSellAddress());
|
|
|
|
+
|
|
|
|
+ contractPdfInfoVo.setBuyCountryName(areaMap.get(sample.getBuyCountryId()));
|
|
|
|
+ contractPdfInfoVo.setBuyProvinceName(areaMap.get(sample.getBuyProvinceId()));
|
|
|
|
+ contractPdfInfoVo.setBuyCityName(areaMap.get(sample.getBuyCityId()));
|
|
|
|
+ contractPdfInfoVo.setBuyDetailedAddress(sample.getBuyAddress());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 赋值合同基本信息
|
|
|
|
+ */
|
|
|
|
+ private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy", Locale.ENGLISH);
|
|
|
|
+ private void setInfo(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+ contractPdfInfoVo.setContractCode(sample.getCode());
|
|
|
|
+ contractPdfInfoVo.setCreateTimeEn(sdf.format(sample.getCreateTime()));
|
|
|
|
+ contractPdfInfoVo.setTransportRemark(sample.getTransportRemark());
|
|
|
|
+// contractPdfInfoVo.setTradeMethods(sample.getTradeMethods());
|
|
|
|
+ contractPdfInfoVo.setRemark(sample.getRemark());
|
|
|
|
+ contractPdfInfoVo.setCurrency(sample.getCurrency());
|
|
|
|
+ contractPdfInfoVo.setDeliveryTime(sample.getDeliveryTime());
|
|
|
|
+ contractPdfInfoVo.setTransportMethod(sample.getTransportMethod());
|
|
|
|
+ contractPdfInfoVo.setShroffAccountId(sample.getShroffAccountId());
|
|
|
|
+ contractPdfInfoVo.setAdvanceRatio(sample.getAdvanceRatio());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 赋值商品列表信息
|
|
|
|
+ */
|
|
|
|
+ private void setProductList(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+
|
|
|
|
+ contractPdfInfoVo.setTotalAmount(sample.getAmount());
|
|
|
|
+
|
|
|
|
+ List<SampleProject> sampleProjectList = sampleProjectService.list(q -> q.eq(SampleProject::getSampleId, sample.getId()));
|
|
|
|
+ contractPdfInfoVo.setSampleProjectList(sampleProjectList);
|
|
|
|
+
|
|
|
|
+ List<SampleProduct> contractProductList = sampleProductService.list(q -> q.eq(SampleProduct::getSampleId, sample.getId()));
|
|
|
|
+ if (contractProductList.size() == 0) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<Long> pids = contractProductList.stream().map(SampleProduct::getProductId).collect(Collectors.toList());
|
|
|
|
+ Map<Long, ProductInfo> productInfoMap = productInfoService.mapKEntity(ProductInfo::getId, q -> q.in(ProductInfo::getId, pids));
|
|
|
|
+
|
|
|
|
+ List<SamplePdfInfoVo.ProductInfo> productInfoList = contractProductList.stream().map(item -> {
|
|
|
|
+ ProductInfo productInfo = productInfoMap.get(item.getProductId());
|
|
|
|
+
|
|
|
|
+ SamplePdfInfoVo.ProductInfo productIndo = new SamplePdfInfoVo.ProductInfo();
|
|
|
|
+ productIndo.setProductId(item.getProductId());
|
|
|
|
+ productIndo.setProductQuantity(item.getQuantity());
|
|
|
|
+ productIndo.setProductPrice(item.getPrice());
|
|
|
|
+ productIndo.setAmount(item.getAmount());
|
|
|
|
+ productIndo.setProductName(item.getProductName());
|
|
|
|
+
|
|
|
|
+ if(ObjectUtil.isNotEmpty(productInfo)) {
|
|
|
|
+ productIndo.setProductRemark(productInfo.getRemark());
|
|
|
|
+ productIndo.setProductSpec(productInfo.getSpec());
|
|
|
|
+ JSONObject ehsdJson = JSONObject.parseObject(productInfo.getEhsdJson());
|
|
|
|
+ if (ObjectUtil.isNotEmpty(ehsdJson)) {
|
|
|
|
+ productIndo.setPackMethod(ehsdJson.getString("packMethod"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return productIndo;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ contractPdfInfoVo.setProductInfoList(productInfoList);
|
|
|
|
+
|
|
|
|
+ // 产品属性
|
|
|
|
+ productInfoService.attributeAssign(productInfoList, SamplePdfInfoVo.ProductInfo::getProductId, (item, product) -> {
|
|
|
|
+ item.setProductUnit(product.getUnit());
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void setAccountManagement(SamplePdfInfoVo contractPdfInfoVo, Sample sample) {
|
|
|
|
+ Long shroffAccountId = sample.getShroffAccountId();
|
|
|
|
+ AccountManagement accountManagement = accountManagementService.getById(shroffAccountId);
|
|
|
|
+ if (accountManagement == null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ contractPdfInfoVo.setBeneficiaryName(accountManagement.getBeneficiaryName());
|
|
|
|
+ contractPdfInfoVo.setBeneficiaryBank(accountManagement.getBeneficiaryBank());
|
|
|
|
+ contractPdfInfoVo.setBeneficiaryBankAddress(accountManagement.getBeneficiaryBankAddress());
|
|
|
|
+ contractPdfInfoVo.setBeneficiaryAccountNumber(accountManagement.getBeneficiaryAccountNumber());
|
|
|
|
+ contractPdfInfoVo.setSwiftCode(accountManagement.getSwiftCode());
|
|
|
|
+ contractPdfInfoVo.setBeneficiaryAddress(accountManagement.getBeneficiaryAddress());
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|