郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertServiceImpl.java
对比新文件
@@ -0,0 +1,373 @@
package com.gk.firework.Service.ServiceImpl;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.CertificateStatus;
import com.gk.firework.Domain.Exception.BusinessException;
import com.gk.firework.Domain.Utils.Properties;
import com.gk.firework.Domain.Utils.StringUtils;
import com.gk.firework.Domain.Utils.UploadUtil;
import com.gk.firework.Domain.Vo.TransportCertVo;
import com.gk.firework.Mapper.TransportCertMapper;
import com.gk.firework.Service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import sun.rmi.transport.Transport;
import java.util.*;
@Service("transportCertService")
public class TransportCertServiceImpl extends ServiceImpl<TransportCertMapper, TransportCert> implements TransportCertService {
    @Autowired
    private UserService userService;
    @Autowired
    private TransportCertProductService transportCertProductService;
    @Autowired
    private TransportCertificatePersonService transportCertificatePersonService;
    @Autowired
    private TransportCertMapper transportCertMapper;
    @Autowired
    private TransportCertFileService transportCertFileService;
    @Override
    @Transactional
    public void addCert(TransportCertVo transportCertVo, UserInfo user) throws Exception {
        if (StringUtils.isBlank(transportCertVo.getCode())) {
            throw new BusinessException("运输证编号不能为空");
        }
        //判断重复
        if (this.countByCode(transportCertVo.getCode()) > 0) {
            throw new BusinessException("运输证编号已经重复");
        }
        JSONArray personJson = JSONArray.parseArray(transportCertVo.getTransportPerson());
        JSONArray productJson = JSONArray.parseArray(transportCertVo.getTransportProduct());
        if (personJson == null) {
            throw new BusinessException("产品信息不能不填");
        }
        if (productJson == null) {
            throw new BusinessException("驾驶员|押运员不能不填");
        }
        UserInfo userInfo = userService.getById(user.getId());
        if (StringUtils.isBlank(userInfo.getCompanynumber())){
            throw new BusinessException("没有权限创建运输证");
        }
        //新增运输证基本信息
        TransportCert transportCert = new TransportCert();
        {
//            String code = "TC-" + System.currentTimeMillis();
            //运输证上传改手动上传-》编号已存在(手填)
            transportCert.setCode(transportCertVo.getCode());
            transportCert.setCreateby(user.getId());
            transportCert.setCreatebyname(user.getUsername());
            transportCert.setEnterprisenumber(userInfo.getCompanynumber());
            transportCert.setCreatetime(new Date());
            transportCert.setValidflag(true);
            transportCert.setStatus(CertificateStatus.PENDING);
            transportCert.setCarnumber(transportCertVo.getCarnumber());
            transportCert.setContractcode(transportCertVo.getContractcode());
            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
            transportCert.setReceivercompanyname(transportCertVo.getReceivercompanyname());
            transportCert.setReceiverprincipalname(transportCertVo.getReceiverprincipalname());
            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
            transportCert.setReceiverprincipalphone(transportCertVo.getReceiverprincipalphone());
            transportCert.setTransportPerson(personJson.toJavaList(TransportCertificatePerson.class));
            transportCert.setTransportProduct(productJson.toJavaList(TransportCertProduct.class));
            transportCert.setprocesstime(transportCertVo.getProcesstime());
            this.save(transportCert);
        }
        //新增产品
        {
            List<TransportCertProduct> products = transportCert.getTransportProduct();
            if (products != null && products.size() > 0) {
                for (TransportCertProduct product : products) {
                    product.setCertificatecode(transportCert.getCode());
                    product.setValidflag(true);
                }
                transportCertProductService.saveBatch(products);
            }
        }
        //新增 驾驶员|押运员
        {
            List<TransportCertificatePerson> persons = transportCert.getTransportPerson();
            if (persons != null && persons.size() > 0) {
                for (TransportCertificatePerson person : persons) {
                    person.setCertificatecode(transportCert.getCode());
                    person.setValidflag(true);
                }
                transportCertificatePersonService.saveBatch(persons);
            }
        }
        //新增文件信息
        {
            MultipartFile[] files = transportCertVo.getFile();
            List<TransportCertFile> adds;
            if (files != null && files.length > 0) {
                adds = new ArrayList<>();
                for (MultipartFile file : files) {
                    String name = UploadUtil.uploadFile(file, com.gk.firework.Domain.Utils.Properties.transportCertificatePath);
                    TransportCertFile certFile = new TransportCertFile();
                    certFile.setCertificatecode(transportCert.getCode());
                    certFile.setFilename(file.getOriginalFilename());
                    certFile.setType(file.getContentType());
                    certFile.setUrl(Properties.transportCertificate + name);
                    certFile.setValidflag(true);
                    adds.add(certFile);
                }
                transportCertFileService.saveBatch(adds);
            }
        }
    }
    /**
    * @Description: 分页查询运输证
    * @date 2021/4/25 15:11
    */
    @Override
    public IPage selectPages(Page<TransportCert> 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"));
        List<TransportCert> list = transportCertMapper.selectPages(page, params);
        return page.setRecords(list);
    }
    /**
     * @Description: 修改运输证
     * @date 2021/4/25 15:29
     */
    @Override
    @Transactional
    public void modCert(TransportCertVo transportCertVo, UserInfo userInfo) throws Exception {
        if (StringUtils.isBlank(transportCertVo.getCode())) {
            throw new BusinessException("运输证编号不能为空");
        }
        JSONArray personJson = JSONArray.parseArray(transportCertVo.getTransportPerson());
        JSONArray productJson = JSONArray.parseArray(transportCertVo.getTransportProduct());
        if (personJson == null) {
            throw new BusinessException("产品信息不能不填");
        }
        if (productJson == null) {
            throw new BusinessException("驾驶员|押运员不能不填");
        }
        //修改运输证基本信息
        TransportCert transportCert = new TransportCert();
        UserInfo user = userService.getById(userInfo.getId());
        {
            transportCert.setCode(transportCertVo.getCode());
            transportCert.setId(transportCertVo.getId());
            transportCert.setCarnumber(transportCertVo.getCarnumber());
            transportCert.setContractcode(transportCertVo.getContractcode());
            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
            transportCert.setReceivercompanyname(transportCertVo.getReceivercompanyname());
            transportCert.setReceiverprincipalname(transportCertVo.getReceiverprincipalname());
            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
            transportCert.setReceiverprincipalphone(transportCertVo.getReceiverprincipalphone());
            transportCert.setUpdateby(user.getId());
            transportCert.setUpdatebyname(user.getUsername());
            transportCert.setUpdatetime(new Date());
            transportCert.setTransportPerson(personJson.toJavaList(TransportCertificatePerson.class));
            transportCert.setTransportProduct(productJson.toJavaList(TransportCertProduct.class));
            transportCert.setprocesstime(transportCertVo.getProcesstime());
            this.updateById(transportCert);
        }
        //修改产品
        {
            List<TransportCertProduct> adds = new ArrayList<>();
            List<TransportCertProduct> dels = new ArrayList<>();
            List<TransportCertProduct> upds = new ArrayList<>();
            List<TransportCertProduct> products = transportCert.getTransportProduct();
            List<TransportCertProduct> productList = transportCertProductService.selectProduct(transportCert.getCode());
            if (products.size() > 0) {
                for (TransportCertProduct product : products) {
                    if (product.getId() == null) {
                        product.setValidflag(true);
                        product.setCertificatecode(transportCert.getCode());
                        adds.add(product);
                    }
                }
            }
            //B-A
            if (productList.size() > 0) {
                for (int i = 0; i < productList.size(); i++) {
                    boolean flag = true;
                    for (int j = 0; j < products.size(); j++) {
                        if (productList.get(i).getId().equals(products.get(j).getId())) {
                            upds.add(products.get(j));
                            flag = false;
                        }
                    }
                    if (flag) {
                        productList.get(i).setValidflag(false);
                        dels.add(productList.get(i));
                    }
                }
            }
            if (adds.size() > 0) {
                transportCertProductService.saveBatch(adds);
            }
            if (dels.size() > 0) {
                transportCertProductService.updateBatchById(dels);
            }
            if (upds.size() > 0) {
                transportCertProductService.updateBatchById(upds);
            }
        }
        //修改人员
        {
            List<TransportCertificatePerson> adds = new ArrayList<>();
            List<TransportCertificatePerson> dels = new ArrayList<>();
            List<TransportCertificatePerson> upds = new ArrayList<>();
            List<TransportCertificatePerson> persons = transportCert.getTransportPerson();
            List<TransportCertificatePerson> personList = transportCertificatePersonService.selectProduct(transportCert.getCode());
            if (persons.size() > 0) {
                for (TransportCertificatePerson person : persons) {
                    if (person.getId() == null) {
                        person.setValidflag(true);
                        person.setCertificatecode(transportCert.getCode());
                        adds.add(person);
                    }
                }
            }
            //B-A
            if (personList.size() > 0) {
                for (int i = 0; i < personList.size(); i++) {
                    boolean flag = true;
                    for (int j = 0; j < persons.size(); j++) {
                        if (personList.get(i).getId().equals(persons.get(j).getId())) {
                            upds.add(persons.get(j));
                            flag = false;
                        }
                    }
                    if (flag) {
                        personList.get(i).setValidflag(false);
                        dels.add(personList.get(i));
                    }
                }
            }
            if (adds.size() > 0) {
                transportCertificatePersonService.saveBatch(adds);
            }
            if (dels.size() > 0) {
                transportCertificatePersonService.updateBatchById(dels);
            }
            if (upds.size() > 0) {
                transportCertificatePersonService.updateBatchById(upds);
            }
        }
        //修改文件(每次上传都是覆盖)
        {
            MultipartFile[] files = transportCertVo.getFile();
            List<TransportCertFile> adds;
            if (files != null && files.length > 0) {
                //1.删除所有文件
                transportCertFileService.deleteByCode(transportCert.getCode());
                //2.新增新上传文件
                adds = new ArrayList<>();
                for (MultipartFile file : files) {
                    String name = UploadUtil.uploadFile(file, com.gk.firework.Domain.Utils.Properties.transportCertificatePath);
                    TransportCertFile certFile = new TransportCertFile();
                    certFile.setCertificatecode(transportCert.getCode());
                    certFile.setFilename(file.getOriginalFilename());
                    certFile.setType(file.getContentType());
                    certFile.setUrl(Properties.transportCertificate + name);
                    certFile.setValidflag(true);
                    adds.add(certFile);
                }
                transportCertFileService.saveBatch(adds);
            }
        }
    }
    /**
    * @Description: 删除单子
    * @date 2021/4/28 8:33
    */
    @Override
    public void delCert(Long id, UserInfo user) {
        TransportCert cert = new TransportCert();
        cert.setId(id);
        cert.setUpdatetime(new Date());
        cert.setUpdateby(user.getId());
        cert.setUpdatebyname(user.getUsername());
        cert.setValidflag(false);
        this.updateById(cert);
        TransportCert transport = this.getById(cert);
        //删除产品
        transportCertProductService.deleteProductByCode(transport.getCode());
        //删除人员
        transportCertificatePersonService.deleteByCertificateCode(transport.getCode());
        //删除文件
        transportCertFileService.deleteByCode(transport.getCode());
    }
    @Override
    public int countByCode(String code) {
        if (StringUtils.isBlank(code)) {
            throw new BusinessException("运输证编号不能为空");
        }
        LambdaQueryWrapper<TransportCert> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TransportCert::getValidflag, true)
                .eq(TransportCert::getCode, code);
        return transportCertMapper.selectCount(queryWrapper);
    }
    @Override
    public List<TransportCert> selectWarnList(Date start, Date end) {
        return transportCertMapper.selectWarnList(start,end);
    }
}