From 59e91a4e9ddaf23cebb12993c774aa899ab22d16 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:22:45 +0800
Subject: [PATCH] 描述

---
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java |  838 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 838 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java
new file mode 100644
index 0000000..36abcf4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java
@@ -0,0 +1,838 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.CertificatePersonType;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.TransportArrivalVo;
+import com.gk.firework.Mapper.TransportCertificateMapper;
+import com.gk.firework.Service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ResourceUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@Service("transportCertificateService")
+public class TransportCertificateServiceImpl extends ServiceImpl<TransportCertificateMapper, TransportCertificate> implements TransportCertificateService {
+
+    //最少行数限制
+    private final static Integer rowMinSizeLimit = 12;
+    private final static SimpleDateFormat  TransportDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
+
+    @Autowired
+    private TransportCertificateMapper transportCertificateMapper;
+    @Autowired
+    private TransportCertificatePersonService transportCertificatePersonService;
+    @Autowired
+    private TransportCertificateProductService transportCertificateProductService;
+    @Autowired
+    private TransportCertificateApproachService transportCertificateApproachService;
+    @Autowired
+    private TransportCertificateFileService transportCertificateFileService;
+    @Autowired
+    private TransportCertificateArrivalRecordService transportCertificateArrivalRecordService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+    @Override
+    public IPage selectPages(Page<TransportCertificate> page, Map filter, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //可见权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict",filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("code", filter.get("code"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("page", filter.get("page"));
+        params.put("tosubmmit", CertificateStatus.TOSUBMIT);
+        List<TransportCertificate> list = transportCertificateMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description: 新增运输证
+    * @date 2021/4/1 13:02
+    */
+    @Override
+    @Transactional
+    public void addCertificateApply(TransportCertificate transportCertificate, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        if (StringUtils.isBlank(userInfo.getCompanynumber())){
+            throw new BusinessException("没有权限创建运输证");
+        }
+        //新增运输证基本信息
+        {
+            String code = "TC-" + System.currentTimeMillis();
+            transportCertificate.setCode(code);
+            transportCertificate.setCertstatus("未入库");
+            transportCertificate.setCreateby(user.getId());
+            transportCertificate.setCreatebyname(user.getUsername());
+            transportCertificate.setEnterprisenumber(userInfo.getCompanynumber());
+            transportCertificate.setCreatetime(new Date());
+            transportCertificate.setValidflag(true);
+            transportCertificate.setStatus(CertificateStatus.TOSUBMIT);
+            this.save(transportCertificate);
+        }
+        //新增驾驶员和押运人
+        {
+
+            List<TransportCertificatePerson> person = transportCertificate.getTransportPerson();
+            if (person != null && person.size() > 0) {
+                for (TransportCertificatePerson p : person) {
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificatePersonService.saveBatch(person);
+            }
+        }
+
+        //新建产品信息
+        {
+            List<TransportCertificateProduct> products = transportCertificate.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertificateProduct p : products) {
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setArrivalnum(0);
+                    p.setValidflag(true);
+                }
+                transportCertificateProductService.saveBatch(products);
+            }
+        }
+        //新增途径地
+
+        {
+            List<TransportCertificateApproach> approach = transportCertificate.getTransportApproach();
+            if (approach != null && approach.size() > 0) {
+                for (TransportCertificateApproach a : approach) {
+                    a.setCertificatecode(transportCertificate.getCode());
+                    a.setValidflag(true);
+                }
+                transportCertificateApproachService.saveBatch(approach);
+
+            }
+        }
+        //新增图片
+        {
+            TransportCertificateFile files = transportCertificate.getTransportFile();
+            if (files != null) {
+                files.setId(null);
+                files.setCertificatecode(transportCertificate.getCode());
+                files.setValidflag(true);
+                transportCertificateFileService.save(files);
+            }
+        }
+
+    }
+
+    /**
+    * @Description: 修改运输证
+    * @date 2021/4/2 14:49
+    */
+    @Override
+    @Transactional
+    public void modCertificateApply(TransportCertificate transportCertificate, UserInfo user) {
+
+
+        //1.判断单子状态
+        TransportCertificate certificate = this.getById(transportCertificate.getId());
+        if (certificate.getStatus() != CertificateStatus.TOSUBMIT){
+            throw new BusinessException("非待提交状态不能修改");
+        }
+        //修改运输证基本信息
+        {
+            transportCertificate.setUpdateby(user.getId());
+            transportCertificate.setUpdatebyname(user.getUsername());
+            transportCertificate.setUpdatetime(new Date());
+            this.updateById(transportCertificate);
+        }
+
+        //修改驾驶员和押运人
+        {
+            //1.删除所有已关联驾驶员和押运人
+            transportCertificatePersonService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联驾驶员和押运人
+            List<TransportCertificatePerson> person = transportCertificate.getTransportPerson();
+            if (person != null && person.size() > 0) {
+                for (TransportCertificatePerson p : person) {
+                    p.setId(null);
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificatePersonService.saveBatch(person);
+            }
+        }
+
+        //修改产品信息
+        {
+
+            //1.删除所有关联产品信息
+            transportCertificateProductService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联驾驶员和押运人
+            List<TransportCertificateProduct> products = transportCertificate.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertificateProduct p : products) {
+                    p.setId(null);
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificateProductService.saveBatch(products);
+            }
+        }
+
+        //修改产品信息
+        {
+
+            //1.删除所有关联产品信息
+            transportCertificateProductService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联产品信息
+            List<TransportCertificateProduct> products = transportCertificate.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertificateProduct p : products) {
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificateProductService.saveBatch(products);
+            }
+        }
+
+        //修改途径地
+        {
+            //1.删除所有途径地
+            transportCertificateApproachService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联途径地
+            List<TransportCertificateApproach> approach = transportCertificate.getTransportApproach();
+            if (approach != null && approach.size() > 0) {
+                for (TransportCertificateApproach a : approach) {
+                    a.setId(null);
+                    a.setCertificatecode(transportCertificate.getCode());
+                    a.setValidflag(true);
+                }
+                transportCertificateApproachService.saveBatch(approach);
+            }
+        }
+
+        //修改途径地
+        {
+            //1.删除所有途径地
+            transportCertificateApproachService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联途径地
+            List<TransportCertificateApproach> approach = transportCertificate.getTransportApproach();
+            if (approach != null && approach.size() > 0) {
+                for (TransportCertificateApproach a : approach) {
+                    a.setId(null);
+                    a.setCertificatecode(transportCertificate.getCode());
+                    a.setValidflag(true);
+                }
+                transportCertificateApproachService.saveBatch(approach);
+
+            }
+        }
+
+
+        //修改图片
+        {
+            //1.删除所有图片
+            transportCertificateFileService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联图片
+            TransportCertificateFile files = transportCertificate.getTransportFile();
+            if (files != null) {
+                files.setId(null);
+                files.setCertificatecode(transportCertificate.getCode());
+                files.setValidflag(true);
+                transportCertificateFileService.save(files);
+            }
+
+        }
+
+    }
+
+    /**
+    * @Description: 删除运输证
+    * @date 2021/4/2 16:16
+    */
+    @Override
+    public void delCertificate(Long id, UserInfo user) {
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(false);
+        this.updateById(certificate);
+    }
+
+
+    /**
+    * @Description: 根据id获取运输证信息
+    * @date 2021/5/11 17:48
+    */
+    @Override
+    public TransportCertificate getOneById(Long id) {
+        return transportCertificateMapper.getOneById(id);
+    }
+
+
+    /**
+    * @Description: 提交单子
+    * @date 2021/5/11 16:05
+    */
+    @Override
+    public void summitApply(Long id, UserInfo user) {
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(true);
+        certificate.setStatus(CertificateStatus.PENDING);
+        this.updateById(certificate);
+    }
+
+
+    /**
+    * @Description: 监管部门审批
+    * @date 2021/5/11 16:10
+    */
+    @Override
+    public void approveApply(JSONObject params, UserInfo user) {
+        Long id = params.getLong("id");
+        String signperson = params.getString("signperson");
+        String issueperson = params.getString("issueperson");
+        String issuepersonphone = params.getString("issuepersonphone");
+        Date deadline = params.getDate("deadline");
+        //简单校验
+        {
+            if (id == null) {
+                throw new BusinessException("审批错误,请联系管理员");
+            }
+
+            if (StringUtils.isBlank(signperson)) {
+                throw new BusinessException("请填写签发人员");
+            }
+
+            if (StringUtils.isBlank(issueperson)) {
+                throw new BusinessException("请填写填发人员");
+            }
+
+            if (StringUtils.isBlank(issuepersonphone)) {
+                throw new BusinessException("请填写填发人员联系电话");
+            }
+
+            if (deadline == null) {
+                throw new BusinessException("请填写填发预期到达日期");
+            }
+        }
+
+        //判断托运人和收货人的许可证是否过期
+        TransportCertificate transportCertificate = this.getOneById(id);
+        Enterprise shipper = enterpriseService.selectEnterpriseByName(transportCertificate.getShippercompanyname());
+        Enterprise receiver = enterpriseService.selectEnterpriseByName(transportCertificate.getReceivercompanyname());
+        Date date = new Date();
+        if (shipper == null){
+            throw new BusinessException("托运单位不存在");
+        }
+        if (receiver == null){
+            throw new BusinessException("收货单位不存在");
+        }
+        if (shipper.getValidendtime().getTime() < date.getTime()){
+            throw new BusinessException("托运单位运输证已过期");
+        }
+        if (receiver.getValidendtime().getTime() < date.getTime()){
+            throw new BusinessException("收货单位运输证已过期");
+        }
+
+
+        //修改信息
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(true);
+        certificate.setStatus(CertificateStatus.APPROVED);
+        certificate.setSignperson(signperson);
+        certificate.setIssueperson(issueperson);
+        certificate.setIssuepersonphone(issuepersonphone);
+        certificate.setDeadline(deadline);
+        this.updateById(certificate);
+    }
+
+    /**
+    * @Description: 监管部门回拒单子-》待提交状态
+    * @date 2021/5/11 16:14
+    */
+    @Override
+    public void refuseApply(Long id, UserInfo user) {
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(true);
+        certificate.setStatus(CertificateStatus.TOSUBMIT);
+        this.updateById(certificate);
+    }
+
+    /**
+     * @Description: 导出运输许可证 三联
+     * @date 2021/5/11 17:14
+     */
+    @Override
+    public String exportCertificate(Long id) {
+
+        TransportCertificate certificate = this.getOneById(id);
+        if (certificate.getStatus() != CertificateStatus.APPROVED) {
+            throw new BusinessException("未审批不能导出相关许可证");
+        }
+        //如果已经生成旧不需要生成了
+        String fileUrl = Properties.transportCertificatePath + certificate.getCode()+".docx";
+        String fileUrlReturn = Properties.transportCertificate+ certificate.getCode()+".docx";
+        if (new File(fileUrl).exists()) {
+            return fileUrlReturn;
+        }
+
+        try {
+//            File file = ResourceUtils.getFile("classpath:printTemplate/certificatelicense.docx");
+            ClassPathResource classPathResource = new ClassPathResource("printTemplate/certificatelicense.docx");
+            InputStream inputStream = classPathResource.getInputStream();
+            WordTemplate wordTemplate = new WordTemplate();
+            wordTemplate.loadTemplate(null,inputStream);
+            //参数
+            Map<String, String> params = new HashMap<>();
+            //编号
+            params.put("ordercode",certificate.getCode());
+            //托运人:单位名称
+            params.put("shippercompanyname",certificate.getShippercompanyname());
+            //收货人:单位名称
+            params.put("receivercompanyname",certificate.getReceivercompanyname());
+            //承运人:单位名称
+            params.put("carriercompanyname",certificate.getCarriercompanyname());
+            //承运人:联系电话
+            params.put("carrierprincipalphone",certificate.getCarrierprincipalphone());
+            //截止日期
+            Date deadline = certificate.getDeadline();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(deadline);
+            //年
+            params.put("endyear", calendar.get(Calendar.YEAR) + "");
+            //月
+            params.put("endmonth", calendar.get(Calendar.MONTH) + "");
+            //日
+            params.put("endday", calendar.get(Calendar.DATE) + "");
+            //运输车辆牌号
+            params.put("carriercarnumber",certificate.getCarriercarnumber());
+            //运输起始地
+            params.put("startplace", certificate.getOtherdeparture());
+            //运输目的地
+            params.put("endplace", certificate.getOtherdestination());
+            //运输途径地  任意一处
+            params.put("byway", certificate.getOtherdeparture());
+            List<TransportCertificateApproach> approachList = certificate.getTransportApproach();
+            if (approachList != null && approachList.size() > 0) {
+                params.put("byway", approachList.get(0).getCity());
+            }
+            //签发人
+            params.put("signperson", certificate.getSignperson());
+            //填发人
+            params.put("issueperson", certificate.getIssueperson());
+            //填发人联系方式
+            params.put("issuepersonphone", certificate.getIssuepersonphone());
+            params.put("first", "第一联 公安局存查联");
+            params.put("second", "第二联 托运人存查联");
+            params.put("third", "第三联 承运人存查联");
+
+            //产品信息
+            List<String[]> productPrintList= new ArrayList<>();
+            List<TransportCertificateProduct> productList = certificate.getTransportProduct();
+            assert productList.size() > 0;
+
+            for (TransportCertificateProduct product : productList) {
+                productPrintList.add(new String[]
+                        {
+                        //种类
+                        product.getType(),
+                        //规格
+                        product.getSpecification(),
+                        //数量
+                        product.getNum()+"(箱)",
+                        //备注 暂无字段,默认为空
+                        ""
+                        });
+            }
+            //至少10行
+            int size = productList.size();
+            if (size < rowMinSizeLimit) {
+                for (int i = 0; i < rowMinSizeLimit - size; i++) {
+                    productPrintList.add(new String[]{"","","",""});
+                }
+            }
+            String[] rowParams = {"type", "specification", "num", "memo"};
+            HashMap<String,WordTemplate.Table> tables = new HashMap<>();
+            WordTemplate.Table t1 = new WordTemplate.Table(rowParams,productPrintList);
+            tables.put("mainTable", t1);
+            wordTemplate.replaceDocument(tables, params);
+            //存一份到本地
+            wordTemplate.saveFileAndQRCode(fileUrl,certificate.getCode());
+            return fileUrlReturn;
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到模板文件路径");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return fileUrlReturn;
+    }
+
+    /**
+    * @Description: 校验运输证信息
+    * @date 2021/5/12 14:09
+    */
+    @Override
+    public void checkAddApply(TransportCertificate transportCertificate) {
+
+        if (transportCertificate.getTransportProduct() == null || transportCertificate.getTransportProduct().size() < 1) {
+            throw new BusinessException("产品不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getOtherdeparture())) {
+            throw new BusinessException("运输起始地不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getOtherdestination())) {
+            throw new BusinessException("运输到达地不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getReceivercompanyname())) {
+            throw new BusinessException("收货单位不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getShippercompanyname())) {
+            throw new BusinessException("托运单位不能为空");
+        }
+
+        //承运人负责人电话
+        if (StringUtils.isBlank(transportCertificate.getCarrierprincipalname())) {
+            throw new BusinessException("承运单位负责联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getCarriercarnumber())) {
+            throw new BusinessException("承运单位运输车牌号不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getCarriernumber())) {
+            throw new BusinessException("承运单位资格证编号不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getCarrierroadnumber())) {
+            throw new BusinessException("承运单位道路运输证编号不能为空");
+        }
+
+
+
+    }
+
+    @Override
+    public String exportCertificateApply(Long id) {
+
+        TransportCertificate certificate = this.getOneById(id);
+        if (certificate.getStatus() == CertificateStatus.PENDING) {
+            throw new BusinessException("未提交单子不能导出");
+        }
+        //如果已经生成旧不需要生成了
+        String fileUrl = Properties.transportCertificatePath + certificate.getCode()+"-apply.docx";
+        String fileUrlReturn =  Properties.transportCertificate+certificate.getCode()+"-apply.docx";
+        if (new File(fileUrl).exists()) {
+            return fileUrlReturn;
+        }
+
+        try {
+//            File file = ResourceUtils.getFile("classpath:printTemplate/certificatelicenseApply.docx");
+            ClassPathResource classPathResource = new ClassPathResource("printTemplate/certificatelicenseapply.docx");
+            InputStream inputStream =classPathResource.getInputStream();;
+            WordTemplate wordTemplate = new WordTemplate();
+            wordTemplate.loadTemplate(null,inputStream);
+            //参数
+            Map<String, String> params = new HashMap<>();
+            //编号
+            params.put("ordercode",certificate.getCode());
+            //托运人
+            {
+                //托运人:单位名称
+                params.put("shippercompanyname",certificate.getShippercompanyname());
+                //托运人:单位地址
+                params.put("shipperaddress",certificate.getShipperaddress());
+                //托运人:负责人姓名
+                params.put("shipperprincipalname",certificate.getShipperprincipalname());
+                //托运人:负责人联系电话
+                params.put("shipperprincipalphone",certificate.getShipperprincipalphone());
+                //托运人:经办人姓名
+                params.put("shippermanagername",certificate.getShippermanagername());
+                //托运人:经办人身份证号
+                params.put("shippermanageridentify",certificate.getShippermanageridentify());
+                //托运人:经办人联系电话
+                params.put("shippermanagerphone",certificate.getShippermanagerphone());
+            }
+
+            //销售单位
+            params.put("salecompanyname",certificate.getSalecompanyname());
+            //收货人
+            {
+                //收货人:单位名称
+                params.put("receivercompanyname",certificate.getReceivercompanyname());
+                //收货人:地址
+                params.put("receiveraddress",certificate.getReceiveraddress());
+                //收货人:负责人姓名
+                params.put("receiverprincipalname",certificate.getReceiverprincipalname());
+                //收货人:负责人联系电话
+                params.put("receiverprincipalphone",certificate.getReceiverprincipalphone());
+            }
+            //承运人
+            {
+                //承运人:单位名称
+                params.put("carriercompanyname",certificate.getCarriercompanyname());
+                //承运人:单位地址
+                params.put("carrieraddress",certificate.getCarrieraddress());
+                //承运人:单位地址
+                params.put("carriernumber",certificate.getCarriernumber());
+                //承运人:负责人
+                params.put("carrierprincipalname",certificate.getCarrierprincipalname());
+                //承运人:负责人联系电话
+                params.put("carrierprincipalphone",certificate.getCarrierprincipalphone());
+                //承运人:负责人联系电话
+                params.put("carriercarnumber",certificate.getCarriercarnumber());
+            }
+            //运输
+            {
+                //运输起始地
+                params.put("startplace", certificate.getOtherdeparture());
+                //运输目的地
+                params.put("endplace", certificate.getOtherdestination());
+                //运输开始时间
+                params.put("othershipstarttime", TransportDateFormat.format(certificate.getOthershipstarttime()));
+                //运输结束时间
+                params.put("othershipendtime", TransportDateFormat.format(certificate.getOthershipendtime()));
+                //承运人:资质证明编号没有这个字段
+                params.put("carrierroadnumber", certificate.getCarrierroadnumber());
+                //运输途径地  任意一处
+                params.put("byway", certificate.getOtherdeparture());
+                List<TransportCertificateApproach> approachList = certificate.getTransportApproach();
+                if (approachList != null && approachList.size() > 0) {
+                    params.put("byway", approachList.get(0).getCity());
+                }
+                //
+            }
+            //驾驶员和押运员
+            {
+                List<TransportCertificatePerson> transportPersons = certificate.getTransportPerson();
+                params.put("driver1", "");
+                params.put("driver1id", "");
+                params.put("driver1license", "");
+                params.put("driver2", "");
+                params.put("driver2id", "");
+                params.put("driver2license", "");
+                params.put("escort1", "");
+                params.put("escort1id", "");
+                params.put("escort1license", "");
+                params.put("escort2", "");
+                params.put("escort2id", "");
+                params.put("escort2license", "");
+                List<TransportCertificatePerson> drivers = new ArrayList<>();
+                List<TransportCertificatePerson> escorts = new ArrayList<>();
+                if (transportPersons != null && transportPersons.size() > 0) {
+                    for (TransportCertificatePerson person : transportPersons) {
+                        if (person.getType().equals(CertificatePersonType.DRIVER.getMsg())) {
+                            drivers.add(person);
+                        }
+                        if (person.getType().equals(CertificatePersonType.ESCORT.getMsg())) {
+                            escorts.add(person);
+                        }
+
+                    }
+                }
+                if (drivers.size() == 1) {
+                    params.put("driver1", drivers.get(0).getPersonname());
+                    params.put("driver1id", drivers.get(0).getPersonidentify());
+                    params.put("driver1license", drivers.get(0).getNumber());
+                }
+                if (drivers.size() > 1) {
+                    params.put("driver2", drivers.get(1).getPersonname());
+                    params.put("driver2id", drivers.get(1).getPersonidentify());
+                    params.put("driver2license", drivers.get(1).getNumber());
+                }
+                if (escorts.size() == 1) {
+                    params.put("escort1", escorts.get(0).getPersonname());
+                    params.put("escort2id", escorts.get(0).getPersonidentify());
+                    params.put("escort2license", escorts.get(0).getNumber());
+                }
+                if (escorts.size() > 1) {
+                    params.put("escort1", escorts.get(1).getPersonname());
+                    params.put("escort2id", escorts.get(1).getPersonidentify());
+                    params.put("escort2license", escorts.get(1).getNumber());
+                }
+            }
+            //产品信息
+            {
+                List<String[]> productPrintList= new ArrayList<>();
+                List<TransportCertificateProduct> productList = certificate.getTransportProduct();
+                assert productList.size() > 0;
+
+                for (TransportCertificateProduct product : productList) {
+                    productPrintList.add(new String[]
+                            {
+                                    //种类
+                                    product.getType(),
+                                    //规格
+                                    product.getSpecification(),
+                                    //数量
+                                    product.getNum()+"(箱)",
+                            });
+                }
+
+                String[] rowParams = {"type", "specification", "num"};
+                HashMap<String,WordTemplate.Table> tables = new HashMap<>();
+                WordTemplate.Table t1 = new WordTemplate.Table(rowParams,productPrintList);
+                tables.put("mainTable", t1);
+                wordTemplate.replaceDocument2(tables, params);
+            }
+            //存一份到本地
+            wordTemplate.saveFile(fileUrl);
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到模板文件路径");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return fileUrlReturn;
+    }
+
+
+    /**
+     * @Description: 获取运输证信息
+     * @date 2021/5/14 19:04
+     */
+    @Override
+    public TransportCertificate getByCode(String code) {
+        if (StringUtils.isBlank(code)) {
+            throw new BusinessException("运输证编号不能为空");
+        }
+        return transportCertificateMapper.selectByCode(code);
+    }
+
+    /**
+    * @Description: 修改运输证产品的到货数量
+    * @date 2021/5/14 19:54
+    */
+    @Override
+    @Transactional
+    public synchronized  void modTransportProductArrivalNum(TransportArrivalVo transportArrivalVo, UserInfo userInfo) {
+
+        if (StringUtils.isBlank(transportArrivalVo.getCode())) {
+            throw new BusinessException("运输证的单位编号不能为空");
+        }
+        List<TransportCertificateProduct> productList = transportArrivalVo.getProductList();
+        if (productList == null || productList.size() < 1) {
+            throw new BusinessException("产品信息不能为空");
+        }
+
+        for (TransportCertificateProduct product : productList) {
+            //更新产品到货量信息
+            TransportCertificateProduct oldProduct = transportCertificateProductService.getById(product.getId());
+            Integer oldArrivalNum = oldProduct.getArrivalnum();
+            Integer newArrivalNum = oldArrivalNum + product.getArrivalnum();
+            oldProduct.setArrivalnum(newArrivalNum);
+            if (oldProduct.getNum() < newArrivalNum) {
+                throw new BusinessException("该次操作使得总到货量超过产品预计到货量,操作失败。");
+            }
+            transportCertificateProductService.updateById(oldProduct);
+            //插入发送到货数的记录信息
+            TransportCertificateArrivalRecord record = new TransportCertificateArrivalRecord();
+            record.setCertificatecode(transportArrivalVo.getCode());
+            record.setProductcode(oldProduct.getProductcode());
+            record.setProductname(oldProduct.getName());
+            record.setCreateby(userInfo.getId());
+            record.setCreatebyname(userInfo.getUsername());
+            record.setCreatetime(new Date());
+            record.setArrivalnum(product.getArrivalnum());
+            record.setValidflag(true);
+            transportCertificateArrivalRecordService.save(record);
+        }
+
+        //获取单子所有产品
+       List<TransportCertificateProduct> list = transportCertificateProductService.getListByTransportCode(transportArrivalVo.getCode());
+        boolean flag = true;
+        if (list.size() > 0) {
+            for (TransportCertificateProduct product : list) {
+                if (!product.getNum().equals(product.getArrivalnum())) {
+                    flag = false;
+                }
+            }
+        }
+
+        //数量全相等
+        if (flag) {
+            this.updateByCode(transportArrivalVo.getCode(),"全部入库");
+        }else{
+            this.updateByCode(transportArrivalVo.getCode(),"部分入库");
+        }
+    }
+
+    @Override
+    public void updateByCode(String code,String certstatus) {
+        LambdaUpdateWrapper<TransportCertificate> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(TransportCertificate::getCertstatus, certstatus).eq(TransportCertificate::getCode,code);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public List<TransportCertificate> selectWarnList(Date start, Date end) {
+        return transportCertificateMapper.selectWarnList(start,end);
+    }
+
+
+//    @Override
+//    public IPage selectTransportArrivalPages(Page<Object> page, UserInfo user) {
+//        return null;
+//    }
+}

--
Gitblit v1.9.2