|
@@ -17,12 +17,26 @@ import com.abi.qms.platform.dao.mapper.QrPackageBatchMapper;
|
|
|
import com.abi.qms.platform.dao.mapper.QrPackageDownloadRecordMapper;
|
|
|
import com.abi.qms.platform.dao.mapper.QrPackageMapper;
|
|
|
import com.abi.qms.platform.dao.vo.result.QrPackageVO;
|
|
|
-import com.abi.qms.platform.dto.req.*;
|
|
|
+import com.abi.qms.platform.dto.req.DeleteQrPackageReq;
|
|
|
+import com.abi.qms.platform.dto.req.DownloadQrPackageReq;
|
|
|
+import com.abi.qms.platform.dto.req.GetQrPackageDetailReq;
|
|
|
+import com.abi.qms.platform.dto.req.ListQrPackageReq;
|
|
|
+import com.abi.qms.platform.dto.req.PassQrPackageReq;
|
|
|
+import com.abi.qms.platform.dto.req.RefuseQrPackageReq;
|
|
|
+import com.abi.qms.platform.dto.req.SaveQrPackageReq;
|
|
|
+import com.abi.qms.platform.dto.req.SendMobileMsgReq;
|
|
|
+import com.abi.qms.platform.dto.req.ValidSAPOrderNoAndMaterialReq;
|
|
|
import com.abi.qms.platform.dto.res.GetQrPackageDetailRes;
|
|
|
import com.abi.qms.platform.dto.res.ListQrPackageRes;
|
|
|
import com.abi.qms.platform.dto.res.ValidSAPOrderNoAndMaterialRes;
|
|
|
import com.abi.qms.platform.infrastructure.mq.GenerateCodeConsumer;
|
|
|
-import com.abi.qms.platform.infrastructure.util.*;
|
|
|
+import com.abi.qms.platform.infrastructure.util.AssertUtil;
|
|
|
+import com.abi.qms.platform.infrastructure.util.FreeMarkerUtils;
|
|
|
+import com.abi.qms.platform.infrastructure.util.PageUtil;
|
|
|
+import com.abi.qms.platform.infrastructure.util.RandomCodeUtils;
|
|
|
+import com.abi.qms.platform.infrastructure.util.SendmailUtil;
|
|
|
+import com.abi.qms.platform.infrastructure.util.SmsUtil;
|
|
|
+import com.abi.qms.platform.infrastructure.util.UserUtil;
|
|
|
import com.abi.qms.platform.service.QrPackageService;
|
|
|
import com.abi.task.common.api.exception.BusinessException;
|
|
|
import com.abi.task.common.api.exception.ErrorCodeEnum;
|
|
@@ -31,7 +45,6 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
-import com.sun.xml.internal.bind.v2.TODO;
|
|
|
import freemarker.template.Template;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -42,10 +55,18 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.io.*;
|
|
|
+import java.io.BufferedInputStream;
|
|
|
+import java.io.BufferedOutputStream;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.io.IOException;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.text.MessageFormat;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -59,452 +80,455 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
public class QrPackageServiceImpl implements QrPackageService {
|
|
|
|
|
|
- @Autowired
|
|
|
- private QrPackageMapper qrPackageMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private BaseFactoryMapper baseFactoryMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrPackageDownloadRecordMapper qrPackageDownloadRecordMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrPackageBatchMapper qrPackageBatchMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private AmqpTemplate amqpTemplate;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SendmailUtil sendmailUtil;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SmsUtil smsUtil;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private RedisClient redisClient;
|
|
|
-
|
|
|
- /**
|
|
|
- * 保存码包
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void saveQrPackage(SaveQrPackageReq req) {
|
|
|
- Long qrPackageId = req.getId();
|
|
|
- // 修改码包时的条件限制
|
|
|
- QrPackage qrPackage;
|
|
|
- if (qrPackageId != null) {
|
|
|
- qrPackage = qrPackageMapper.selectById(qrPackageId);
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
- // 只有待审核、审核拒绝状态下才可编辑
|
|
|
- Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
- if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
- throw new BusinessException("码包不可编辑");
|
|
|
- }
|
|
|
- }
|
|
|
- //如果SAP订单号和物料有重复数据,需提交额外申请原因
|
|
|
- ValidSAPOrderNoAndMaterialReq reqValid = new ValidSAPOrderNoAndMaterialReq();
|
|
|
- reqValid.setMaterialId(req.getMaterialId());
|
|
|
- reqValid.setSapOrderNo(req.getSapOrderNo());
|
|
|
- ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = validSAPOrderNoAndMaterial(reqValid);
|
|
|
- if(Objects.nonNull(validSAPOrderNoAndMaterialRes) && CollectionUtil.isNotEmpty(validSAPOrderNoAndMaterialRes.getPackageBeanList())){
|
|
|
- Long id = validSAPOrderNoAndMaterialRes.getPackageBeanList().get(0).getId();
|
|
|
- if(validSAPOrderNoAndMaterialRes.getPackageBeanList().size() > 1) {
|
|
|
- if (Objects.isNull(req.getReasonApply())) {
|
|
|
- throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
|
|
|
- }
|
|
|
- }
|
|
|
- if(validSAPOrderNoAndMaterialRes.getPackageBeanList().size() == 1) {
|
|
|
- if(req.getId() == null){
|
|
|
- if (Objects.isNull(req.getReasonApply())) {
|
|
|
- throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
|
|
|
- }
|
|
|
- }
|
|
|
- if (!id.equals(req.getId())) {
|
|
|
- if (Objects.isNull(req.getReasonApply())) {
|
|
|
- throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())){
|
|
|
- //同一个码包内,不同批次的批次号不一样
|
|
|
- List<SaveQrPackageReq.PackageBatchBean> packageBatchBeanList = req.getPackageBatchBeanList();
|
|
|
- //聚合批次号
|
|
|
- List<String> batchNumberList = packageBatchBeanList.stream().map(SaveQrPackageReq.PackageBatchBean::getBatchNumber).distinct().collect(Collectors.toList());
|
|
|
- if(batchNumberList.size() < req.getPackageBatchBeanList().size()){
|
|
|
- throw new BusinessException("批次号重复,请确认后重试");
|
|
|
- }
|
|
|
- //同一个码包内,批次加起来的总数量和码包数量一致
|
|
|
- //计算码包数量总和
|
|
|
- Long sum = packageBatchBeanList.stream().mapToLong(SaveQrPackageReq.PackageBatchBean::getBatchQrNumber).sum();
|
|
|
- if(sum != req.getQrNumber()){
|
|
|
- throw new BusinessException("批次码数量与申请码总量不匹配,请确认后重试");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // copy属性值
|
|
|
- qrPackage = PojoConverterUtils.copy(req, QrPackage.class);
|
|
|
- //若当前登录用户为包材厂用户,则该选项默认选择该用户所在的包材厂,不可修改
|
|
|
- qrPackage.setFactoryCoverId(UserUtil.getUser().getFactoryId() != null ? UserUtil.getUser().getFactoryId() : req.getFactoryCoverId());
|
|
|
- // 新增or修改
|
|
|
- Long userId = UserUtil.getUser().getId();
|
|
|
- qrPackage.setUpdateBy(userId);
|
|
|
- if (qrPackageId != null) {
|
|
|
- // 修改时,需要重置码包的状态为待审核
|
|
|
- qrPackage.setApplyStatus(QrPackageApplyStatusEnum.WAIT_REVIEW.getCode());
|
|
|
- qrPackageMapper.updateById(qrPackage);
|
|
|
- //更新批次号的数据
|
|
|
- QueryWrapper<QrPackageBatch> qrPackageBatchQuery = new QueryWrapper<>();
|
|
|
- qrPackageBatchQuery.eq("package_id", qrPackageId);
|
|
|
- qrPackageBatchQuery.eq("is_delete", 0);
|
|
|
- List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(qrPackageBatchQuery);
|
|
|
- List<Long> batchOldId = qrPackageBatches.stream().map(QrPackageBatch::getId).collect(Collectors.toList());
|
|
|
- if(CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
- //提取出更新的批次数据
|
|
|
- List<Long> batchNewId = req.getPackageBatchBeanList().stream().map(SaveQrPackageReq.PackageBatchBean::getId).collect(Collectors.toList());
|
|
|
- //整理需删除的数据
|
|
|
- List<Long> deleteBatch = new ArrayList<>(batchOldId);
|
|
|
- deleteBatch.removeAll(batchNewId);
|
|
|
- if(CollectionUtil.isNotEmpty(deleteBatch)){
|
|
|
- UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
- qrPackageBatchDeleteParam.in("id", deleteBatch)
|
|
|
- .set("is_delete", 1);
|
|
|
- qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
- }
|
|
|
- //循环添加或更新
|
|
|
- for(SaveQrPackageReq.PackageBatchBean packageBatchBean: req.getPackageBatchBeanList()) {
|
|
|
- if(packageBatchBean.getId() == null){
|
|
|
- QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
- qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
- qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
- qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
- qrPackageBatch.setUpdateBy(userId);
|
|
|
- qrPackageBatch.setCreateBy(userId);
|
|
|
- qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
- }else{
|
|
|
- QueryWrapper<QrPackageBatch> qrPackageBatchQ = new QueryWrapper<>();
|
|
|
- qrPackageBatchQ.eq("id", packageBatchBean.getId());
|
|
|
- qrPackageBatchQ.eq("is_delete", 0);
|
|
|
- QrPackageBatch qrPackageBatch = qrPackageBatchMapper.selectOne(qrPackageBatchQ);
|
|
|
- if(Objects.isNull(qrPackageBatch)){
|
|
|
- throw new BusinessException(ErrorCodeEnum.NO_EXISTS_DATA.getCode(), "批次对象不存在");
|
|
|
- }
|
|
|
- qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
- qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
- qrPackageBatch.setUpdateBy(userId);
|
|
|
- qrPackageBatchMapper.updateById(qrPackageBatch);
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- //入参没有批次信息,数据库有,则全删除
|
|
|
- if(CollectionUtil.isNotEmpty(qrPackageBatches)){
|
|
|
- UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
- qrPackageBatchDeleteParam.in("id", batchOldId)
|
|
|
- .set("is_delete", 1);
|
|
|
- qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- qrPackage.setCreateBy(userId);
|
|
|
- int insert = qrPackageMapper.insert(qrPackage);
|
|
|
- if(CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
- //插入批次号的数据
|
|
|
- for(SaveQrPackageReq.PackageBatchBean packageBatchBean: req.getPackageBatchBeanList()) {
|
|
|
- QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
- qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
- qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
- qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
- qrPackageBatch.setUpdateBy(userId);
|
|
|
- qrPackageBatch.setCreateBy(userId);
|
|
|
- qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 码包分页查询
|
|
|
- */
|
|
|
- @Override
|
|
|
- public ListQrPackageRes listQrPackage(ListQrPackageReq req) {
|
|
|
- //数据权限隔离,如果登录账号是包材厂,只能看账号包材厂的数据。否则看全部
|
|
|
- if(UserUtil.getUser().getFactoryId() != null){
|
|
|
- req.setFactoryCoverId(UserUtil.getUser().getFactoryId());
|
|
|
- }
|
|
|
-
|
|
|
- // 分页查询
|
|
|
- IPage<QrPackageVO> iPage = qrPackageMapper.listQrPackage(PageUtil.createPage(req), req);
|
|
|
- List<QrPackageVO> qrPackageList = iPage.getRecords();
|
|
|
-
|
|
|
- // 封装出参、放入分页信息
|
|
|
- ListQrPackageRes res = new ListQrPackageRes();
|
|
|
- PageUtil.copyPageInfo(res, iPage);
|
|
|
- List<ListQrPackageRes.QrPackageBean> qrPackageBeanList = PojoConverterUtils.copyList(qrPackageList, ListQrPackageRes.QrPackageBean.class);
|
|
|
- res.setQrRepertoryBeanList(qrPackageBeanList);
|
|
|
-
|
|
|
- return res;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 码包查询详情
|
|
|
- */
|
|
|
- @Override
|
|
|
- public GetQrPackageDetailRes getQrPackageDetail(GetQrPackageDetailReq req) {
|
|
|
- // 查询码包对象
|
|
|
- QrPackageVO qrPackage = qrPackageMapper.selectQrPackageDetailById(req.getId());
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
-
|
|
|
- return PojoConverterUtils.copy(qrPackage, GetQrPackageDetailRes.class);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除码包
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void deleteQrPackage(DeleteQrPackageReq req) {
|
|
|
- QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
- // 只有待审核、审核拒绝状态下才可删除
|
|
|
- Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
- if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
- throw new BusinessException("码包不可删除");
|
|
|
- }
|
|
|
-
|
|
|
- // 逻辑删除
|
|
|
- QrPackage update = new QrPackage().setId(req.getId()).setIsDelete(1);
|
|
|
- qrPackageMapper.updateById(update);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 审核通过码包
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void passQrPackage(PassQrPackageReq req) {
|
|
|
- QrPackageVO qrPackage = qrPackageMapper.selectQrPackageDetailById(req.getId());
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
-
|
|
|
- // 只有待审核、审核拒绝状态下才可通过
|
|
|
- Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
- if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
- throw new BusinessException("码包不可通过");
|
|
|
- }
|
|
|
-
|
|
|
- QrPackage update = new QrPackage().setId(req.getId()).setApplyStatus(QrPackageApplyStatusEnum.REVIEW_PASS.getCode());
|
|
|
- qrPackageMapper.updateById(update);
|
|
|
-
|
|
|
- // 码库类型为系统生成时,放入rabbitmq,生成码
|
|
|
- if (QrRepertoryTypeEnum.SYSTEM_GENERATE.is(qrPackage.getQrRepertoryType())) {
|
|
|
- amqpTemplate.convertAndSend(GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE, JSONObject.toJSONString(qrPackage) );
|
|
|
- System.out.println("rabbitmq结束。。。。。。。。。。。。。。。。");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 审核拒绝码包
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void refuseQrPackage(RefuseQrPackageReq req) {
|
|
|
- QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
-
|
|
|
- // 只有待审核、审核拒绝状态下才可拒绝
|
|
|
- Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
- if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
- throw new BusinessException("码包不可拒绝");
|
|
|
- }
|
|
|
-
|
|
|
- QrPackage update = new QrPackage().setId(req.getId()).setApplyStatus(QrPackageApplyStatusEnum.REVIEW_REFUSE.getCode());
|
|
|
- qrPackageMapper.updateById(update);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void downloadQrPackage(DownloadQrPackageReq req, HttpServletResponse response) {
|
|
|
- //查询码包
|
|
|
- QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
- //查询包材厂
|
|
|
- BaseFactory factory = baseFactoryMapper.selectById(qrPackage.getFactoryCoverId());
|
|
|
- AssertUtil.isNull(factory, "包材厂不存在");
|
|
|
- if(StringUtils.isBlank(factory.getKeymanMobile())){
|
|
|
- throw new BusinessException("包材厂手机号不存在");
|
|
|
- }
|
|
|
-
|
|
|
- // 只有已生成状态下才可下载
|
|
|
- Integer generateStatus = qrPackage.getGenerateStatus();
|
|
|
- if (!QrPackageGenerateStatusEnum.GENERATE_SUCCESS.is(generateStatus)) {
|
|
|
- throw new BusinessException("码包不可下载");
|
|
|
- }
|
|
|
-
|
|
|
- //特殊:校验验证码是否正确,正确才可以下载
|
|
|
- boolean verifyCaptchaResult = verifyCaptcha(factory.getKeymanMobile(), req.getCaptcha(), qrPackage.getId());
|
|
|
- if(!verifyCaptchaResult){
|
|
|
- throw new BusinessException("验证码错误");
|
|
|
- }
|
|
|
-
|
|
|
- //开始下载
|
|
|
- BufferedInputStream in = null;
|
|
|
- BufferedOutputStream out = null;
|
|
|
- try {
|
|
|
- // TODO 从阿里云OSS读取文件,替换下面的测试代码
|
|
|
- // TODO in = new BufferedInputStream(ossObject.getObjectContent());
|
|
|
- in = new BufferedInputStream(new FileInputStream(new File("E:\\firefox_download\\202104161027287567357.zip")));
|
|
|
- out = new BufferedOutputStream(response.getOutputStream());
|
|
|
-
|
|
|
- String fileName = qrPackage.getSapOrderNo() + ".zip";
|
|
|
- response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"utf-8"));
|
|
|
-
|
|
|
- byte [] b = new byte[1024];
|
|
|
- int len = 0;
|
|
|
- while(-1 != (len = in.read(b))) {
|
|
|
- out.write(b, 0, len);
|
|
|
- }
|
|
|
- out.flush();
|
|
|
- } catch (IOException e) {
|
|
|
- log.error("IOException", e);
|
|
|
- } finally {
|
|
|
- IoUtil.close(in);
|
|
|
- IoUtil.close(out);
|
|
|
- }
|
|
|
-
|
|
|
- // 插入码包下载记录
|
|
|
- Long userId = UserUtil.getUser().getId();
|
|
|
- QrPackageDownloadRecord downloadRecord = new QrPackageDownloadRecord()
|
|
|
- .setCreateBy(userId)
|
|
|
- .setQrPackageId(qrPackage.getId());
|
|
|
- qrPackageDownloadRecordMapper.insert(downloadRecord);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除生成的临时文件,并更新码包的下载路径
|
|
|
- * @param txtFile txt文件
|
|
|
- * @param zipFile 压缩文件
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void delFileAndUpdatePath(File txtFile, File zipFile, Long qrPackageId) {
|
|
|
- // TODO 上传zip包到阿里云OSS后,删除本次生成的txt和zip文件
|
|
|
- FileUtil.del(txtFile);
|
|
|
- FileUtil.del(zipFile);
|
|
|
-
|
|
|
- // TODO 更新下载路径
|
|
|
- String downloadPath = "";
|
|
|
- QrPackage update = new QrPackage().setId(qrPackageId).setDownloadPath(downloadPath);
|
|
|
- qrPackageMapper.updateById(update);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 码生成失败回滚
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void failedRollback(QrPackage qrPackage) {
|
|
|
- // 更改生成状态为生成失败
|
|
|
- QrPackage qrPackageUpdate = new QrPackage().setId(qrPackage.getId()).setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_FAIL.getCode());
|
|
|
- qrPackageMapper.updateById(qrPackageUpdate);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterial(ValidSAPOrderNoAndMaterialReq req) {
|
|
|
- QueryWrapper<QrPackage> qrPackageQuery = new QueryWrapper<>();
|
|
|
- qrPackageQuery.eq("material_id", req.getMaterialId());
|
|
|
- qrPackageQuery.eq("sap_order_no", req.getSapOrderNo());
|
|
|
- qrPackageQuery.eq("is_delete", 0);
|
|
|
- List<QrPackage> qrPackages = qrPackageMapper.selectList(qrPackageQuery);
|
|
|
- ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = new ValidSAPOrderNoAndMaterialRes();
|
|
|
- List<ValidSAPOrderNoAndMaterialRes.PackageBean> packageBeans = PojoConverterUtils.copyList(qrPackages, ValidSAPOrderNoAndMaterialRes.PackageBean.class);
|
|
|
- validSAPOrderNoAndMaterialRes.setPackageBeanList(packageBeans);
|
|
|
- return validSAPOrderNoAndMaterialRes;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 码包生成完成后发送邮件给码包厂负责人邮箱
|
|
|
- * @param targetEmail
|
|
|
- * @param sapOrderNo
|
|
|
- * @param filename
|
|
|
- * @param password
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void sendEmailForQrPackageCreated(String targetEmail,String sapOrderNo,String filename,String password){
|
|
|
- try{
|
|
|
- //拿到freemarker模板
|
|
|
- Template template = FreeMarkerUtils.getTemplate("factory.ftl");
|
|
|
-
|
|
|
- //填充的内容
|
|
|
- Map paramMap = new HashMap<>();
|
|
|
- paramMap.put("sapOrderNo", sapOrderNo);
|
|
|
- paramMap.put("filename", filename);
|
|
|
- paramMap.put("password", password);
|
|
|
-
|
|
|
- //生成需要发送的内容
|
|
|
- String emailContent = FreeMarkerTemplateUtils.processTemplateIntoString(template, paramMap);
|
|
|
-
|
|
|
- sendmailUtil.doSendHtmlEmail("QMS系统通知",emailContent,targetEmail);
|
|
|
-
|
|
|
- }catch(Exception e){
|
|
|
- log.info("发送码包通知邮件异常",e);
|
|
|
- throw new BusinessException("发送码包通知邮件异常");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 发送短信验证码
|
|
|
- *
|
|
|
- * @param req
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void sendMobileMsg(SendMobileMsgReq req) {
|
|
|
- //查询码包
|
|
|
- QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
- AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
- //查询包材厂
|
|
|
- BaseFactory factory = baseFactoryMapper.selectById(qrPackage.getFactoryCoverId());
|
|
|
- AssertUtil.isNull(factory, "包材厂不存在");
|
|
|
- if(StringUtils.isBlank(factory.getKeymanMobile())){
|
|
|
- throw new BusinessException("包材厂手机号不存在");
|
|
|
- }
|
|
|
-
|
|
|
- //key:packId:mobile
|
|
|
- Long packId = qrPackage.getId();
|
|
|
- String mobile = factory.getKeymanMobile();
|
|
|
- String key = MessageFormat.format("{0}{1}:{2}",RedisKeysConstant.DOWNLOAD_MOBILE_MSG, packId, mobile);
|
|
|
-
|
|
|
- //获取随机验证码
|
|
|
- String captcha = RandomCodeUtils.getCaptcha(6);
|
|
|
-
|
|
|
- //发送短信
|
|
|
- smsUtil.sendCode(mobile, captcha);
|
|
|
-
|
|
|
- //将验证码存入redis
|
|
|
- redisClient.getRedisTemplate().opsForValue().set(key, captcha, 30 * 60, TimeUnit.SECONDS);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验校验码
|
|
|
- * @param mobile
|
|
|
- * @param inputCaptcha
|
|
|
- * @param packId
|
|
|
- * @return
|
|
|
- */
|
|
|
- private boolean verifyCaptcha(String mobile, String inputCaptcha, Long packId) {
|
|
|
- String key = MessageFormat.format("{0}{1}:{2}",RedisKeysConstant.DOWNLOAD_MOBILE_MSG, packId, mobile);
|
|
|
- log.info("验证下载key:{}", key);
|
|
|
- String captcha = redisClient.get(key);
|
|
|
- log.info(inputCaptcha + "--------------------" + captcha);
|
|
|
-
|
|
|
- //不一致返回false
|
|
|
- if (!inputCaptcha.equals(captcha)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //删除校验码
|
|
|
- redisClient.delete(key);
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
+ @Autowired
|
|
|
+ private QrPackageMapper qrPackageMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BaseFactoryMapper baseFactoryMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QrPackageDownloadRecordMapper qrPackageDownloadRecordMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QrPackageBatchMapper qrPackageBatchMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AmqpTemplate amqpTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SendmailUtil sendmailUtil;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SmsUtil smsUtil;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisClient redisClient;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存码包
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void saveQrPackage(SaveQrPackageReq req) {
|
|
|
+ Long qrPackageId = req.getId();
|
|
|
+ // 修改码包时的条件限制
|
|
|
+ QrPackage qrPackage;
|
|
|
+ if (qrPackageId != null) {
|
|
|
+ qrPackage = qrPackageMapper.selectById(qrPackageId);
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+ // 只有待审核、审核拒绝状态下才可编辑
|
|
|
+ Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
+ if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
+ throw new BusinessException("码包不可编辑");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果SAP订单号和物料有重复数据,需提交额外申请原因
|
|
|
+ ValidSAPOrderNoAndMaterialReq reqValid = new ValidSAPOrderNoAndMaterialReq();
|
|
|
+ reqValid.setMaterialId(req.getMaterialId());
|
|
|
+ reqValid.setSapOrderNo(req.getSapOrderNo());
|
|
|
+ ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = validSAPOrderNoAndMaterial(reqValid);
|
|
|
+ if (Objects.nonNull(validSAPOrderNoAndMaterialRes) && CollectionUtil.isNotEmpty(validSAPOrderNoAndMaterialRes.getPackageBeanList())) {
|
|
|
+ Long id = validSAPOrderNoAndMaterialRes.getPackageBeanList().get(0).getId();
|
|
|
+ if (validSAPOrderNoAndMaterialRes.getPackageBeanList().size() > 1) {
|
|
|
+ if (Objects.isNull(req.getReasonApply())) {
|
|
|
+ throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (validSAPOrderNoAndMaterialRes.getPackageBeanList().size() == 1) {
|
|
|
+ if (req.getId() == null) {
|
|
|
+ if (Objects.isNull(req.getReasonApply())) {
|
|
|
+ throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!id.equals(req.getId())) {
|
|
|
+ if (Objects.isNull(req.getReasonApply())) {
|
|
|
+ throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
+ //同一个码包内,不同批次的批次号不一样
|
|
|
+ List<SaveQrPackageReq.PackageBatchBean> packageBatchBeanList = req.getPackageBatchBeanList();
|
|
|
+ //聚合批次号
|
|
|
+ List<String> batchNumberList = packageBatchBeanList.stream().map(SaveQrPackageReq.PackageBatchBean::getBatchNumber).distinct().collect(Collectors.toList());
|
|
|
+ if (batchNumberList.size() < req.getPackageBatchBeanList().size()) {
|
|
|
+ throw new BusinessException("批次号重复,请确认后重试");
|
|
|
+ }
|
|
|
+ //同一个码包内,批次加起来的总数量和码包数量一致
|
|
|
+ //计算码包数量总和
|
|
|
+ Long sum = packageBatchBeanList.stream().mapToLong(SaveQrPackageReq.PackageBatchBean::getBatchQrNumber).sum();
|
|
|
+ if (sum != req.getQrNumber()) {
|
|
|
+ throw new BusinessException("批次码数量与申请码总量不匹配,请确认后重试");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // copy属性值
|
|
|
+ qrPackage = PojoConverterUtils.copy(req, QrPackage.class);
|
|
|
+ //若当前登录用户为包材厂用户,则该选项默认选择该用户所在的包材厂,不可修改
|
|
|
+ qrPackage.setFactoryCoverId(UserUtil.getUser().getFactoryId() != null ? UserUtil.getUser().getFactoryId() : req.getFactoryCoverId());
|
|
|
+ // 新增or修改
|
|
|
+ Long userId = UserUtil.getUser().getId();
|
|
|
+ qrPackage.setUpdateBy(userId);
|
|
|
+ if (qrPackageId != null) {
|
|
|
+ // 修改时,需要重置码包的状态为待审核
|
|
|
+ qrPackage.setApplyStatus(QrPackageApplyStatusEnum.WAIT_REVIEW.getCode());
|
|
|
+ qrPackageMapper.updateById(qrPackage);
|
|
|
+ //更新批次号的数据
|
|
|
+ QueryWrapper<QrPackageBatch> qrPackageBatchQuery = new QueryWrapper<>();
|
|
|
+ qrPackageBatchQuery.eq("package_id", qrPackageId);
|
|
|
+ qrPackageBatchQuery.eq("is_delete", 0);
|
|
|
+ List<QrPackageBatch> qrPackageBatches = qrPackageBatchMapper.selectList(qrPackageBatchQuery);
|
|
|
+ List<Long> batchOldId = qrPackageBatches.stream().map(QrPackageBatch::getId).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
+ //提取出更新的批次数据
|
|
|
+ List<Long> batchNewId = req.getPackageBatchBeanList().stream().map(SaveQrPackageReq.PackageBatchBean::getId).collect(Collectors.toList());
|
|
|
+ //整理需删除的数据
|
|
|
+ List<Long> deleteBatch = new ArrayList<>(batchOldId);
|
|
|
+ deleteBatch.removeAll(batchNewId);
|
|
|
+ if (CollectionUtil.isNotEmpty(deleteBatch)) {
|
|
|
+ UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
+ qrPackageBatchDeleteParam.in("id", deleteBatch)
|
|
|
+ .set("is_delete", 1);
|
|
|
+ qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
+ }
|
|
|
+ //循环添加或更新
|
|
|
+ for (SaveQrPackageReq.PackageBatchBean packageBatchBean : req.getPackageBatchBeanList()) {
|
|
|
+ if (packageBatchBean.getId() == null) {
|
|
|
+ QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
+ qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
+ qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
+ qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
+ qrPackageBatch.setUpdateBy(userId);
|
|
|
+ qrPackageBatch.setCreateBy(userId);
|
|
|
+ qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
+ } else {
|
|
|
+ QueryWrapper<QrPackageBatch> qrPackageBatchQ = new QueryWrapper<>();
|
|
|
+ qrPackageBatchQ.eq("id", packageBatchBean.getId());
|
|
|
+ qrPackageBatchQ.eq("is_delete", 0);
|
|
|
+ QrPackageBatch qrPackageBatch = qrPackageBatchMapper.selectOne(qrPackageBatchQ);
|
|
|
+ if (Objects.isNull(qrPackageBatch)) {
|
|
|
+ throw new BusinessException(ErrorCodeEnum.NO_EXISTS_DATA.getCode(), "批次对象不存在");
|
|
|
+ }
|
|
|
+ qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
+ qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
+ qrPackageBatch.setUpdateBy(userId);
|
|
|
+ qrPackageBatchMapper.updateById(qrPackageBatch);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //入参没有批次信息,数据库有,则全删除
|
|
|
+ if (CollectionUtil.isNotEmpty(qrPackageBatches)) {
|
|
|
+ UpdateWrapper<QrPackageBatch> qrPackageBatchDeleteParam = new UpdateWrapper<>();
|
|
|
+ qrPackageBatchDeleteParam.in("id", batchOldId)
|
|
|
+ .set("is_delete", 1);
|
|
|
+ qrPackageBatchMapper.update(null, qrPackageBatchDeleteParam);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ qrPackage.setCreateBy(userId);
|
|
|
+ int insert = qrPackageMapper.insert(qrPackage);
|
|
|
+ if (CollectionUtil.isNotEmpty(req.getPackageBatchBeanList())) {
|
|
|
+ //插入批次号的数据
|
|
|
+ for (SaveQrPackageReq.PackageBatchBean packageBatchBean : req.getPackageBatchBeanList()) {
|
|
|
+ QrPackageBatch qrPackageBatch = new QrPackageBatch();
|
|
|
+ qrPackageBatch.setPackageId(qrPackage.getId());
|
|
|
+ qrPackageBatch.setBatchNumber(packageBatchBean.getBatchNumber());
|
|
|
+ qrPackageBatch.setBatchQrNumber(packageBatchBean.getBatchQrNumber());
|
|
|
+ qrPackageBatch.setUpdateBy(userId);
|
|
|
+ qrPackageBatch.setCreateBy(userId);
|
|
|
+ qrPackageBatchMapper.insert(qrPackageBatch);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 码包分页查询
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ListQrPackageRes listQrPackage(ListQrPackageReq req) {
|
|
|
+ //数据权限隔离,如果登录账号是包材厂,只能看账号包材厂的数据。否则看全部
|
|
|
+ if (UserUtil.getUser().getFactoryId() != null) {
|
|
|
+ req.setFactoryCoverId(UserUtil.getUser().getFactoryId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页查询
|
|
|
+ IPage<QrPackageVO> iPage = qrPackageMapper.listQrPackage(PageUtil.createPage(req), req);
|
|
|
+ List<QrPackageVO> qrPackageList = iPage.getRecords();
|
|
|
+
|
|
|
+ // 封装出参、放入分页信息
|
|
|
+ ListQrPackageRes res = new ListQrPackageRes();
|
|
|
+ PageUtil.copyPageInfo(res, iPage);
|
|
|
+ List<ListQrPackageRes.QrPackageBean> qrPackageBeanList = PojoConverterUtils.copyList(qrPackageList, ListQrPackageRes.QrPackageBean.class);
|
|
|
+ res.setQrRepertoryBeanList(qrPackageBeanList);
|
|
|
+
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 码包查询详情
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public GetQrPackageDetailRes getQrPackageDetail(GetQrPackageDetailReq req) {
|
|
|
+ // 查询码包对象
|
|
|
+ QrPackageVO qrPackage = qrPackageMapper.selectQrPackageDetailById(req.getId());
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+
|
|
|
+ return PojoConverterUtils.copy(qrPackage, GetQrPackageDetailRes.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除码包
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void deleteQrPackage(DeleteQrPackageReq req) {
|
|
|
+ QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+ // 只有待审核、审核拒绝状态下才可删除
|
|
|
+ Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
+ if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
+ throw new BusinessException("码包不可删除");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 逻辑删除
|
|
|
+ QrPackage update = new QrPackage().setId(req.getId()).setIsDelete(1);
|
|
|
+ qrPackageMapper.updateById(update);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 审核通过码包
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void passQrPackage(PassQrPackageReq req) {
|
|
|
+ QrPackageVO qrPackage = qrPackageMapper.selectQrPackageDetailById(req.getId());
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+
|
|
|
+ // 只有待审核、审核拒绝状态下才可通过
|
|
|
+ Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
+ if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
+ throw new BusinessException("码包不可通过");
|
|
|
+ }
|
|
|
+
|
|
|
+ QrPackage update = new QrPackage().setId(req.getId()).setApplyStatus(QrPackageApplyStatusEnum.REVIEW_PASS.getCode());
|
|
|
+ qrPackageMapper.updateById(update);
|
|
|
+
|
|
|
+ // 码库类型为系统生成时,放入rabbitmq,生成码
|
|
|
+ if (QrRepertoryTypeEnum.SYSTEM_GENERATE.is(qrPackage.getQrRepertoryType())) {
|
|
|
+ amqpTemplate.convertAndSend(GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE, JSONObject.toJSONString(qrPackage));
|
|
|
+ System.out.println("rabbitmq结束。。。。。。。。。。。。。。。。");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 审核拒绝码包
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void refuseQrPackage(RefuseQrPackageReq req) {
|
|
|
+ QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+
|
|
|
+ // 只有待审核、审核拒绝状态下才可拒绝
|
|
|
+ Integer applyStatus = qrPackage.getApplyStatus();
|
|
|
+ if (QrPackageApplyStatusEnum.REVIEW_PASS.is(applyStatus)) {
|
|
|
+ throw new BusinessException("码包不可拒绝");
|
|
|
+ }
|
|
|
+
|
|
|
+ QrPackage update = new QrPackage().setId(req.getId()).setApplyStatus(QrPackageApplyStatusEnum.REVIEW_REFUSE.getCode());
|
|
|
+ qrPackageMapper.updateById(update);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void downloadQrPackage(DownloadQrPackageReq req, HttpServletResponse response) {
|
|
|
+ //查询码包
|
|
|
+ QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+ //查询包材厂
|
|
|
+ BaseFactory factory = baseFactoryMapper.selectById(qrPackage.getFactoryCoverId());
|
|
|
+ AssertUtil.isNull(factory, "包材厂不存在");
|
|
|
+ if (StringUtils.isBlank(factory.getKeymanMobile())) {
|
|
|
+ throw new BusinessException("包材厂手机号不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 只有已生成状态下才可下载
|
|
|
+ Integer generateStatus = qrPackage.getGenerateStatus();
|
|
|
+ if (!QrPackageGenerateStatusEnum.GENERATE_SUCCESS.is(generateStatus)) {
|
|
|
+ throw new BusinessException("码包不可下载");
|
|
|
+ }
|
|
|
+
|
|
|
+ //特殊:校验验证码是否正确,正确才可以下载
|
|
|
+ boolean verifyCaptchaResult = verifyCaptcha(factory.getKeymanMobile(), req.getCaptcha(), qrPackage.getId());
|
|
|
+ if (!verifyCaptchaResult) {
|
|
|
+ throw new BusinessException("验证码错误");
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始下载
|
|
|
+ BufferedInputStream in = null;
|
|
|
+ BufferedOutputStream out = null;
|
|
|
+ try {
|
|
|
+ // TODO 从阿里云OSS读取文件,替换下面的测试代码
|
|
|
+ // TODO in = new BufferedInputStream(ossObject.getObjectContent());
|
|
|
+ in = new BufferedInputStream(new FileInputStream(new File("E:\\firefox_download\\202104161027287567357.zip")));
|
|
|
+ out = new BufferedOutputStream(response.getOutputStream());
|
|
|
+
|
|
|
+ String fileName = qrPackage.getSapOrderNo() + ".zip";
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
|
|
|
+
|
|
|
+ byte[] b = new byte[1024];
|
|
|
+ int len = 0;
|
|
|
+ while (-1 != (len = in.read(b))) {
|
|
|
+ out.write(b, 0, len);
|
|
|
+ }
|
|
|
+ out.flush();
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("IOException", e);
|
|
|
+ } finally {
|
|
|
+ IoUtil.close(in);
|
|
|
+ IoUtil.close(out);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 插入码包下载记录
|
|
|
+ Long userId = UserUtil.getUser().getId();
|
|
|
+ QrPackageDownloadRecord downloadRecord = new QrPackageDownloadRecord()
|
|
|
+ .setCreateBy(userId)
|
|
|
+ .setQrPackageId(qrPackage.getId());
|
|
|
+ qrPackageDownloadRecordMapper.insert(downloadRecord);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除生成的临时文件,并更新码包的下载路径
|
|
|
+ *
|
|
|
+ * @param txtFile txt文件
|
|
|
+ * @param zipFile 压缩文件
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void delFileAndUpdatePath(File txtFile, File zipFile, Long qrPackageId) {
|
|
|
+ // TODO 上传zip包到阿里云OSS后,删除本次生成的txt和zip文件
|
|
|
+ FileUtil.del(txtFile);
|
|
|
+ FileUtil.del(zipFile);
|
|
|
+
|
|
|
+ // TODO 更新下载路径
|
|
|
+ String downloadPath = "";
|
|
|
+ QrPackage update = new QrPackage().setId(qrPackageId).setDownloadPath(downloadPath);
|
|
|
+ qrPackageMapper.updateById(update);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 码生成失败回滚
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void failedRollback(QrPackage qrPackage) {
|
|
|
+ // 更改生成状态为生成失败
|
|
|
+ QrPackage qrPackageUpdate = new QrPackage().setId(qrPackage.getId()).setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_FAIL.getCode());
|
|
|
+ qrPackageMapper.updateById(qrPackageUpdate);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterial(ValidSAPOrderNoAndMaterialReq req) {
|
|
|
+ QueryWrapper<QrPackage> qrPackageQuery = new QueryWrapper<>();
|
|
|
+ qrPackageQuery.eq("material_id", req.getMaterialId());
|
|
|
+ qrPackageQuery.eq("sap_order_no", req.getSapOrderNo());
|
|
|
+ qrPackageQuery.eq("is_delete", 0);
|
|
|
+ List<QrPackage> qrPackages = qrPackageMapper.selectList(qrPackageQuery);
|
|
|
+ ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = new ValidSAPOrderNoAndMaterialRes();
|
|
|
+ List<ValidSAPOrderNoAndMaterialRes.PackageBean> packageBeans = PojoConverterUtils.copyList(qrPackages, ValidSAPOrderNoAndMaterialRes.PackageBean.class);
|
|
|
+ validSAPOrderNoAndMaterialRes.setPackageBeanList(packageBeans);
|
|
|
+ return validSAPOrderNoAndMaterialRes;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 码包生成完成后发送邮件给码包厂负责人邮箱
|
|
|
+ *
|
|
|
+ * @param targetEmail
|
|
|
+ * @param sapOrderNo
|
|
|
+ * @param filename
|
|
|
+ * @param password
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void sendEmailForQrPackageCreated(String targetEmail, String sapOrderNo, String filename, String password) {
|
|
|
+ try {
|
|
|
+ //拿到freemarker模板
|
|
|
+ Template template = FreeMarkerUtils.getTemplate("factory.ftl");
|
|
|
+
|
|
|
+ //填充的内容
|
|
|
+ Map paramMap = new HashMap<>();
|
|
|
+ paramMap.put("sapOrderNo", sapOrderNo);
|
|
|
+ paramMap.put("filename", filename);
|
|
|
+ paramMap.put("password", password);
|
|
|
+
|
|
|
+ //生成需要发送的内容
|
|
|
+ String emailContent = FreeMarkerTemplateUtils.processTemplateIntoString(template, paramMap);
|
|
|
+
|
|
|
+ sendmailUtil.doSendHtmlEmail("QMS系统通知", emailContent, targetEmail);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("发送码包通知邮件异常", e);
|
|
|
+ throw new BusinessException("发送码包通知邮件异常");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送短信验证码
|
|
|
+ *
|
|
|
+ * @param req
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void sendMobileMsg(SendMobileMsgReq req) {
|
|
|
+ //查询码包
|
|
|
+ QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
|
|
|
+ AssertUtil.isNull(qrPackage, "码包不存在");
|
|
|
+ //查询包材厂
|
|
|
+ BaseFactory factory = baseFactoryMapper.selectById(qrPackage.getFactoryCoverId());
|
|
|
+ AssertUtil.isNull(factory, "包材厂不存在");
|
|
|
+ if (StringUtils.isBlank(factory.getKeymanMobile())) {
|
|
|
+ throw new BusinessException("包材厂手机号不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ //key:packId:mobile
|
|
|
+ Long packId = qrPackage.getId();
|
|
|
+ String mobile = factory.getKeymanMobile();
|
|
|
+ String key = MessageFormat.format("{0}{1}:{2}", RedisKeysConstant.DOWNLOAD_MOBILE_MSG, packId, mobile);
|
|
|
+
|
|
|
+ //获取随机验证码
|
|
|
+ String captcha = RandomCodeUtils.getCaptcha(6);
|
|
|
+
|
|
|
+ //发送短信
|
|
|
+ smsUtil.sendCode(mobile, captcha);
|
|
|
+
|
|
|
+ //将验证码存入redis
|
|
|
+ redisClient.getRedisTemplate().opsForValue().set(key, captcha, 30 * 60, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验校验码
|
|
|
+ *
|
|
|
+ * @param mobile
|
|
|
+ * @param inputCaptcha
|
|
|
+ * @param packId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean verifyCaptcha(String mobile, String inputCaptcha, Long packId) {
|
|
|
+ String key = MessageFormat.format("{0}{1}:{2}", RedisKeysConstant.DOWNLOAD_MOBILE_MSG, packId, mobile);
|
|
|
+ log.info("验证下载key:{}", key);
|
|
|
+ String captcha = redisClient.get(key);
|
|
|
+ log.info(inputCaptcha + "--------------------" + captcha);
|
|
|
+
|
|
|
+ //不一致返回false
|
|
|
+ if (!inputCaptcha.equals(captcha)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除校验码
|
|
|
+ redisClient.delete(key);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|