From 3dbbf41e66f433784cda81b56b8b97917f284ff5 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期三, 26 二月 2025 17:10:22 +0800
Subject: [PATCH] 菜单只看我功能添加
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java | 1704 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 857 insertions(+), 847 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
index 1faaee4..43fcea6 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -1,847 +1,857 @@
-//package com.ruoyi.inspect.service.impl;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.collection.CollectionUtil;
-//import cn.hutool.core.date.DateTime;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.alibaba.excel.EasyExcel;
-//import com.alibaba.excel.ExcelWriter;
-//import com.alibaba.excel.write.metadata.WriteSheet;
-//import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
-//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//import com.ruoyi.basic.dto.*;
-//import com.ruoyi.basic.pojo.IfsInventoryQuantity;
-//import com.ruoyi.common.constant.InsOrderTypeConstants;
-//import com.ruoyi.common.core.domain.entity.User;
-//import com.ruoyi.common.utils.LimsDateUtil;
-//import com.ruoyi.common.utils.QueryWrappers;
-//import com.ruoyi.common.utils.SecurityUtils;
-//import com.ruoyi.common.utils.WxCpUtils;
-//import com.ruoyi.framework.properties.WechatProperty;
-//import com.ruoyi.inspect.dto.CopperInsOrderDto;
-//import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
-//import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-//import com.ruoyi.basic.mapper.StandardTreeMapper;
-//import com.ruoyi.inspect.dto.SampleProductDto;
-//import com.ruoyi.inspect.mapper.InsOrderMapper;
-//import com.ruoyi.inspect.mapper.InsProductMapper;
-//import com.ruoyi.inspect.mapper.InsSampleMapper;
-//import com.ruoyi.inspect.pojo.InsOrder;
-//import com.ruoyi.inspect.pojo.InsReport;
-//import com.ruoyi.inspect.service.InsOrderService;
-//import com.ruoyi.inspect.service.InsReportService;
-//import com.ruoyi.inspect.service.RawMaterialOrderService;
-//import com.ruoyi.common.numgen.NumberGenerator;
-//import com.ruoyi.framework.exception.ErrorException;
-//import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
-//import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
-//import com.ruoyi.system.mapper.UserMapper;
-//import lombok.AllArgsConstructor;
-//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-//import org.springframework.stereotype.Service;
-//import org.springframework.transaction.annotation.Transactional;
-//
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.io.UnsupportedEncodingException;
-//import java.math.BigDecimal;
-//import java.net.URLEncoder;
-//import java.text.SimpleDateFormat;
-//import java.time.LocalDateTime;
-//import java.time.format.DateTimeFormatter;
-//import java.util.*;
-//import java.util.concurrent.atomic.AtomicInteger;
-//
-///**
-// * @Author zhuo
-// * @Date 2024/7/31
-// */
-//@Service
-//@AllArgsConstructor
-//public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
-//
-// private StandardTreeMapper standardTreeMapper;
-// private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
-// private UserMapper userMapper;
-// private InsOrderService insOrderService;
-// private InsOrderMapper insOrderMapper;
-// private InsSampleMapper insSampleMapper;
-// private final NumberGenerator<InsOrder> numberGenerator;
-// private InsReportService insReportService;
-// private WechatProperty wechatProperty;
-// private ThreadPoolTaskExecutor threadPoolTaskExecutor;
-// private InsProductMapper insProductMapper;
-// private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
-//
-//
-// @Override
-// public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
-// if (StringUtils.isBlank(partNo)) {
-// throw new ErrorException("闆朵欢鍙蜂涪澶�");
-// }
-// List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
-// if (CollectionUtil.isEmpty(factoryDtos)) {
-// throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
-// }
-// RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
-// for (FactoryDto factoryDto : factoryDtos) {
-// for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
-// for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
-// if (sampleTypeDto.getChildren().size() == 0) {
-// sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
-// }
-// // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
-// if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
-// // 娣诲姞瀵硅薄
-// rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-// + laboratoryDto.getValue() + "-"
-// + sampleTypeDto.getValue());
-// rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
-// rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
-// rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
-// rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
-// } else {
-// for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
-// if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
-// // 娣诲姞瀵硅薄
-// rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-// + laboratoryDto.getValue() + "-"
-// + sampleTypeDto.getValue() + "-"
-// + sampleDto.getValue());
-// rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
-// rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
-// rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
-// rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
-// }
-// }
-// }
-// }
-// }
-// }
-// return rawMaterialStandardTreeDto;
-// }
-//
-// @Override
-// public IPage<IfsInventoryQuantity> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
-// return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
-// }
-//
-// @Override
-// public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
-// return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
-// }
-//
-//
-// /**
-// * 鎶ユ
-// * @param ids
-// * @return
-// */
-// @Override
-// public int inspectionReport(List<Integer> ids) {
-// Integer userId = SecurityUtils.getUserId().intValue();
-// ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-// .in(IfsInventoryQuantity::getId, ids)
-// .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
-// .set(IfsInventoryQuantity::getDeclareUserId, userId)
-// .set(IfsInventoryQuantity::getIsInspect, 1)
-// .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
-// );
-// threadPoolTaskExecutor.execute(() -> {
-// List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
-// .in(IfsInventoryQuantity::getId, ids));
-// // 浼佷笟寰俊閫氱煡
-// String message = "";
-// message += "鏂板鎶ユ閫氱煡";
-// for (IfsInventoryQuantity inventoryQuantity : quantityList) {
-// message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
-// message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
-// message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
-//
-// // 鍒ゆ柇鏈夋病鏈夊埌20鍚�. 鎴栬�呰兘鍚﹀厤妫�
-// int result = notificationRawOrder(inventoryQuantity.getId());
-// switch (result) {
-// case 1:
-// message += "\n褰撳墠鏍峰搧宸叉楠岃繃, 鍙互鍏嶆";
-// break;
-// case 2:
-// message += "\n褰撳墠鏍峰搧宸茶秴杩�20鍚�";
-// break;
-// }
-// message += "\n";
-// }
-// WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
-// });
-// return 1;
-// }
-//
-// /**
-// * 鎾ら攢鎶ユ
-// * @param id
-// * @return
-// */
-// @Override
-// public int revokeInspectionReport(Integer id) {
-// return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-// .eq(IfsInventoryQuantity::getId, id)
-// .set(IfsInventoryQuantity::getIsInspect, 0)
-// );
-// }
-//
-// /**
-// * 鎵撳嵃鏍囩鏌ヨ
-// * @param ids
-// * @return
-// */
-// @Override
-// public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
-// return ifsInventoryQuantityMapper.printLabel(ids);
-// }
-//
-// /**
-// * 鎶ユ
-// * @param ifsInventoryQuantity
-// * @return
-// */
-// @Override
-// public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
-// Integer userId = SecurityUtils.getUserId().intValue();
-// ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-// .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
-// .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
-// .set(IfsInventoryQuantity::getDeclareUserId, userId)
-// .set(IfsInventoryQuantity::getIsInspect, 1)
-// .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
-// .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
-// );
-//
-// threadPoolTaskExecutor.execute(() -> {
-// IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
-// // 浼佷笟寰俊閫氱煡
-// String message = "";
-// message += "鏂板鎶ユ閫氱煡";
-// message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
-// message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
-// message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
-// WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
-// });
-// return 1;
-// }
-//
-// /**
-// * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
-// * @param id
-// * @return
-// */
-// @Override
-// public String getIndustryChain(Integer id) {
-// return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
-// }
-//
-// /**
-// * 鍘熸潗鏂欐挙閿�鎺ュ彛
-// * @param ifsInventoryId
-// * @return
-// */
-// @Override
-// public boolean repealRawOrder(Integer ifsInventoryId) {
-// // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
-// IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-// if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
-// // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
-// ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
-// } else {
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getState, 0)
-// .set(IfsInventoryQuantity::getIsQuarter, 1)
-// .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-// }
-//
-// insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-// .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
-// .set(InsOrder::getState, -1)
-// .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-// return true;
-// }
-//
-// /**
-// * 鍘熸潗鏂欏厤妫�涓嬪崟
-// * @param list
-// * @param insOrder
-// * @return
-// */
-// @Override
-// @Transactional(rollbackFor = Exception.class)
-// public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
-// if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
-// throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
-// }
-// insOrder.setSendTime(LocalDateTime.now());
-// // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
-// insOrder.setState(4);
-// insOrder.setTypeSource(1);
-//
-// String code = "Y";
-// // 鐢熸垚缂栧彿
-// String no = numberGenerator.generateNumberWithPrefix(3,
-// "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-// InsOrder::getEntrustCode);
-//
-// insOrderMapper.insert(insOrder); // 涓昏〃
-//
-// AtomicInteger count = new AtomicInteger();
-// list.forEach(a -> {
-// count.getAndIncrement();
-// a.setId(null);
-// a.setInsOrderId(insOrder.getId());
-// if (StrUtil.isEmpty(a.getSampleCode())) {
-// // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-// if (list.size() != 1) {
-// a.setSampleCode(no + "-" + count.get());
-// } else {
-// a.setSampleCode(no);
-// }
-// }
-// insSampleMapper.insert(a);
-//
-// if (!CollectionUtil.isEmpty(a.getInsProduct())) {
-// throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
-// }
-// });
-//
-// // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-// IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
-// Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-// User user = userMapper.selectById(declareUserId);
-// // 渚涘簲鍟嗗悕绉�
-// insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-// // 濮旀墭浜哄悕绉�
-// insOrder.setPrepareUser(user.getName());
-// insOrder.setPhone(user.getPhone());
-//
-// // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
-// .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
-//
-// insOrder.setExamineTime(LocalDateTime.now());
-//
-// insOrder.setEntrustCode(no);
-// insOrder.setIsExemption(1);
-//
-// insOrderMapper.updateById(insOrder);
-//
-// // 娣诲姞宸ユ椂
-// addAuxiliary(insOrder, ifsInventoryQuantity);
-//
-// // todo: ifs鐩存帴绉诲簱
-// insReportService.isRawMaterial(insOrder);
-//
-// return insOrder.getId();
-// }
-//
-//
-// /**
-// * 鏌ヨ寰呬笅鍗�
-// * @param page
-// * @param ifsInventoryQuantity
-// * @return
-// */
-// @Override
-// public IPage<IfsInventoryQuantityCheckDto> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
-// return standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
-// }
-//
-// /**
-// * 鏌ヨ宸叉楠�
-// * @param page
-// * @param ifsInventoryQuantityDto
-// * @return
-// */
-// @Override
-// public IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
-// // todo: 鍙湅鎴�
-// String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-// String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-// ifsInventoryQuantityDto.setBeginDeclareDate(null);
-// ifsInventoryQuantityDto.setEndDeclareDate(null);
-//
-// return standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
-// }
-//
-// /**
-// * 鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅
-// * @param id
-// * @return
-// */
-// @Override
-// public int delIfsInventory(Integer id) {
-// return ifsInventoryQuantityMapper.deleteById(id);
-// }
-//
-// /**
-// * 鍘熸潗鏂欐斁琛屽厤妫�
-// * @param ifsInventoryId
-// * @return
-// */
-// @Override
-// @Transactional(rollbackFor = Exception.class)
-// public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
-// // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getState, 2)
-// .set(IfsInventoryQuantity::getIsQuarter, 0)
-// .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//
-// // 鏌ヨ鍘熸潗鏂欎俊鎭�
-// IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-// // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-// Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-// User user = userMapper.selectById(declareUserId);
-//
-// InsOrder insOrder = new InsOrder();
-// insOrder.setState(4);
-// insOrder.setTypeSource(1);
-// String code = "Y";
-// // 鐢熸垚缂栧彿
-// String no = numberGenerator.generateNumberWithPrefix(3,
-// "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-// InsOrder::getEntrustCode);
-// insOrder.setExamineTime(LocalDateTime.now());
-// insOrder.setEntrustCode(no);
-// insOrder.setIsExemption(1);
-// // 渚涘簲鍟嗗悕绉�
-// insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-// // 濮旀墭浜哄悕绉�
-// insOrder.setPrepareUser(user.getName());
-// insOrder.setPhone(user.getPhone());
-// insOrder.setIfsInventoryId(ifsInventoryId);
-// insOrder.setPartDetail(partDetail);
-// insOrder.setSendTime(LocalDateTime.now());
-// insOrder.setSample(ifsInventoryQuantity.getPartDesc());
-// // 杩涘巶妫�楠�
-// insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
-//
-// insOrderMapper.insert(insOrder);
-//
-// // 娣诲姞宸ユ椂
-// addAuxiliary(insOrder, ifsInventoryQuantity);
-//
-// // todo: ifs鐩存帴绉诲簱
-// insReportService.isRawMaterial(insOrder);
-// return true;
-// }
-//
-// /**
-// * 0, 鏃犳彁绀�, 1鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡妫�楠岃繃, 鍙互鍏嶆, 2 鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡瓒�20鍚�, 闇�瑕佸绾у娆℃楠�
-// *
-// * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
-// * @param ifsInventoryId
-// * @return
-// */
-// @Override
-// public int notificationRawOrder(Integer ifsInventoryId) {
-// IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-// // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
-// List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
-// .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
-// .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
-// .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
-// .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
-//
-// // 鍒ゆ柇鏄惁澶т簬20鍚�
-// BigDecimal bigDecimal = new BigDecimal("20000");
-// BigDecimal count = BigDecimal.ZERO;
-// for (IfsInventoryQuantity inventoryQuantity : quantityList) {
-// // 鍒ゆ柇鍗曚綅鏄痥g鎴栬�卼
-// if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
-// count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
-// } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
-// count = count.add(inventoryQuantity.getQtyArrived());
-// }
-// }
-//
-// if (count.compareTo(bigDecimal) >= 0) {
-// return 2;
-// } else {
-// // 鍒ゆ柇涔嬪墠鏄惁鍑鸿繃鎶ュ憡, 鍑鸿繃鎶ュ憡鍙互鍏嶆
-// int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
-// if (reportCount > 0) {
-// return 1;
-// }
-// }
-// return 0;
-// }
-//
-// /**
-// * 鎶ユ鍙互鏂板鎶ユ淇℃伅
-// * @param ifsInventoryQuantity
-// */
-// @Override
-// public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
-// ifsInventoryQuantity.setIsSource(0);
-// ifsInventoryQuantity.setState(0);
-// ifsInventoryQuantity.setIsFinish(0);
-// ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-// }
-//
-// @Override
-// public void shiftingParking(List<Integer> ids) {
-// for (Integer id : ids) {
-// InsOrder order = insOrderService.getById(id);
-// // todo: ifs鐩存帴绉诲簱
-// insReportService.isRawMaterial(order);
-// }
-// }
-//
-// /**
-// * 閾滃崟涓濅笅鍗曞厤妫�
-// * @param list
-// * @param insOrder
-// */
-// @Override
-// @Transactional(rollbackFor = Exception.class)
-// public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
-// if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
-// throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
-// }
-// insOrder.setSendTime(LocalDateTime.now());
-// // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
-// insOrder.setState(4);
-// insOrder.setTypeSource(1);
-//
-// String code = "Y";
-// // 鐢熸垚缂栧彿
-// String no = numberGenerator.generateNumberWithPrefix(3,
-// "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-// InsOrder::getEntrustCode);
-//
-// insOrderMapper.insert(insOrder); // 涓昏〃
-//
-// AtomicInteger count = new AtomicInteger();
-// list.forEach(a -> {
-// count.getAndIncrement();
-// a.setId(null);
-// a.setInsOrderId(insOrder.getId());
-// if (StrUtil.isEmpty(a.getSampleCode())) {
-// // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-// if (list.size() != 1) {
-// a.setSampleCode(no + "-" + count.get());
-// } else {
-// a.setSampleCode(no);
-// }
-// }
-// insSampleMapper.insert(a);
-//
-// if (!CollectionUtil.isEmpty(a.getInsProduct())) {
-// throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
-// }
-// });
-// // 娣诲姞鍘熸潗鏂欎俊鎭�
-// IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
-// // 鍩烘湰淇℃伅
-// ifsInventoryQuantity.setIsSource(0);
-// ifsInventoryQuantity.setState(2);
-// ifsInventoryQuantity.setIsInspect(1);
-// ifsInventoryQuantity.setIsFinish(1);
-// ifsInventoryQuantity.setIsCopper(1);
-// ifsInventoryQuantity.setInspectStatus(1);
-// ifsInventoryQuantity.setIsQuarter(0);
-//
-// ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
-// ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
-// ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
-// ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
-// ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
-//
-// ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-//
-// insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
-// insOrder.setExamineTime(LocalDateTime.now());
-//
-// insOrder.setEntrustCode(no);
-// insOrder.setIsExemption(1);
-//
-// insOrderMapper.updateById(insOrder);
-//
-// // 娣诲姞宸ユ椂
-// addAuxiliary(insOrder, ifsInventoryQuantity);
-//
-// return insOrder.getId();
-// }
-//
-// @Override
-// @Transactional(rollbackFor = Exception.class)
-// public boolean concessionRelease(Integer ifsInventoryId) {
-// // 鏌ヨ鍘熸潗鏂欎俊鎭�
-// IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-// if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
-// throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
-// }
-//
-// // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-// String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
-//
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getInspectStatus, 4)
-// .set(IfsInventoryQuantity::getToLocation, toLocation)
-// .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//
-// return true;
-// }
-//
-// /**
-// * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
-// * @param enterOrderId
-// * @return
-// */
-// @Override
-// @Transactional(rollbackFor = Exception.class)
-// public boolean repealEnterRawOrder(Integer enterOrderId) {
-// // 鏌ヨ璁㈠崟
-// InsOrder order = insOrderMapper.selectById(enterOrderId);
-//
-// // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
-// IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
-// if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
-// // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
-// ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
-// } else {
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getState, 0)
-// .set(IfsInventoryQuantity::getIsQuarter, 1)
-// .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-// }
-// insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-// .eq(InsOrder::getId, enterOrderId)
-// .set(InsOrder::getState, -1)
-// .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-//
-// // 娓呴櫎涔嬪墠鐨勫伐鏃�
-// auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-// .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
-//
-// // 娓呴櫎涔嬪墠鎶ュ憡
-// insReportService.remove(Wrappers.<InsReport>lambdaQuery()
-// .eq(InsReport::getInsOrderId, enterOrderId));
-//
-// return true;
-// }
-//
-// /**
-// * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
-// * @param quarterOrderId
-// * @return
-// */
-// @Override
-// @Transactional(rollbackFor = Exception.class)
-// public boolean repealQuarterRawOrder(Integer quarterOrderId) {
-// // 鏌ヨ璁㈠崟
-// InsOrder order = insOrderMapper.selectById(quarterOrderId);
-//
-// Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-// .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
-// .ne(InsOrder::getState, -1)
-// .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
-// .ne(InsOrder::getId, order.getId()));
-// // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�, 娌℃湁闇�瑕佷慨鏀瑰師鏉愭枡淇℃伅
-// if (count == 0) {
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getState, 0)
-// .set(IfsInventoryQuantity::getIsQuarter, 1)
-// .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-// } else {
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getIsQuarter, 1)
-// .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-// }
-//
-// insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-// .eq(InsOrder::getId, quarterOrderId)
-// .set(InsOrder::getState, -1)
-// .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-// auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-// .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
-// // 娓呴櫎涔嬪墠鎶ュ憡
-// insReportService.remove(Wrappers.<InsReport>lambdaQuery()
-// .eq(InsReport::getInsOrderId, quarterOrderId));
-// return true;
-// }
-//
-// /**
-// * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
-// * @param ifsInventoryQuantityDto
-// * @param response
-// */
-// @Override
-// public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
-// //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
-// String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-// String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-// ifsInventoryQuantityDto.setBeginDeclareDate(null);
-// ifsInventoryQuantityDto.setEndDeclareDate(null);
-// List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
-//
-// for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
-// dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-// dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-// dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-// switch (dto.getInspectStatus()) {
-// case 1:
-// dto.setInspectStatusString("鍚堟牸");
-// break;
-// case 2:
-// dto.setInspectStatusString("涓嶅悎鏍�");
-// // 鏌ヨ涓嶅悎鏍奸」
-// List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
-// dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
-// break;
-// case 3:
-// dto.setInspectStatusString("鏈笅鍗�");
-// break;
-// case 4:
-// dto.setInspectStatusString("璁╂鏀捐");
-// break;
-// case 0:
-// dto.setInspectStatusString("妫�楠屼腑");
-// break;
-//
-// }
-// }
-//
-//
-// response.setContentType("application/vnd.ms-excel");
-// response.setCharacterEncoding("UTF-8");
-// // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
-// String fileName = URLEncoder.encode("鍘熸潗鏂欐娴嬩俊鎭鍑�", "UTF-8");
-// response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
-// try {
-// //鏂板缓ExcelWriter
-// ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
-// //鑾峰彇sheet0瀵硅薄
-// WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
-//
-// //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
-// excelWriter.write(ifsByOverList, mainSheet);
-// //鍏抽棴娴�
-// excelWriter.finish();
-// } catch (IOException e) {
-// throw new RuntimeException("瀵煎嚭澶辫触");
-// }
-// }
-//
-// /**
-// * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
-// * @param page
-// * @param ifsInventoryQuantityDto
-// * @return
-// */
-// @Override
-// public IPage<IfsInventoryQuantitySupplierDto> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
-//
-// // todo: 鍙湅鎴�
-// String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-// String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-// ifsInventoryQuantityDto.setBeginDeclareDate(null);
-// ifsInventoryQuantityDto.setEndDeclareDate(null);
-//
-// return standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
-// }
-//
-// /**
-// * 鎻愬墠鍏ュ簱
-// * @param ifsInventoryId
-// * @return
-// */
-// @Override
-// public boolean advancedGodown(Integer ifsInventoryId) {
-// // 鏌ヨ鍘熸潗鏂欎俊鎭�
-// IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-// if (!ifsInventoryQuantity.getInspectStatus().equals(0)
-// && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
-// throw new ErrorException("鏈娴嬪畬鎴愭暟鎹墠鑳芥彁鍓嶅叆搴�");
-// }
-//
-// // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-// String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
-//
-// ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-// .set(IfsInventoryQuantity::getInspectStatus, 1)
-// .set(IfsInventoryQuantity::getIsFinish, 1)
-// .set(IfsInventoryQuantity::getToLocation, toLocation)
-// .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-//
-// return true;
-// }
-//
-//
-// /**
-// * 娣诲姞宸ユ椂
-// * @param insOrder
-// * @param ifsInventoryQuantity
-// */
-// private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
-// AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
-// auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "鍏嶆");//妫�娴嬮」鍒嗙被
-// auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//鏍峰搧缂栧彿
-// auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
-// auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
-//
-// // 鍏嶆榛樿2
-// auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//闈炲姞鐝伐鏃�
-// auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
-// auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
-// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-// DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-// auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
-// LocalDateTime localDateTime = LocalDateTime.now();
-// DateTime parse = DateUtil.parse(localDateTime.format(formatter));
-// auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
-// auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
-// auxiliaryOutputWorkingHours.setCheck(SecurityUtils.getUserId().intValue());//妫�娴嬩汉
-// auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//鍗曚环
-//
-// auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
-// }
-//
-// public static String getWeek(String dayStr) {
-// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-// try {
-// Date date = sdf.parse(dayStr);
-// Calendar calendar = Calendar.getInstance();
-// calendar.setTime(date);
-// int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
-// int day = calendar.get(Calendar.DAY_OF_MONTH);
-// return getWeekDay(dayOfWeek);
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// return null;
-// }
-//
-// public static String getWeekDay(int dayOfWeek) {
-// switch (dayOfWeek) {
-// case Calendar.MONDAY:
-// return "鍛ㄤ竴";
-// case Calendar.TUESDAY:
-// return "鍛ㄤ簩";
-// case Calendar.WEDNESDAY:
-// return "鍛ㄤ笁";
-// case Calendar.THURSDAY:
-// return "鍛ㄥ洓";
-// case Calendar.FRIDAY:
-// return "鍛ㄤ簲";
-// case Calendar.SATURDAY:
-// return "鍛ㄥ叚";
-// case Calendar.SUNDAY:
-// return "鍛ㄦ棩";
-// default:
-// return "鏈煡";
-// }
-// }
-//}
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.common.constant.InsOrderTypeConstants;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.properties.WechatProperty;
+import com.ruoyi.common.utils.LimsDateUtil;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.inspect.dto.CopperInsOrderDto;
+import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.mapper.StandardTreeMapper;
+import com.ruoyi.inspect.dto.SampleProductDto;
+import com.ruoyi.inspect.mapper.InsOrderMapper;
+import com.ruoyi.inspect.mapper.InsProductMapper;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsReport;
+import com.ruoyi.inspect.service.InsOrderService;
+import com.ruoyi.inspect.service.InsReportService;
+import com.ruoyi.inspect.service.RawMaterialOrderService;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
+import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @Author zhuo
+ * @Date 2024/7/31
+ */
+@Service
+@AllArgsConstructor
+public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
+
+ private StandardTreeMapper standardTreeMapper;
+ private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+ private UserMapper userMapper;
+ private InsOrderService insOrderService;
+ private InsOrderMapper insOrderMapper;
+ private InsSampleMapper insSampleMapper;
+ private final NumberGenerator<InsOrder> numberGenerator;
+ private InsReportService insReportService;
+ private WechatProperty wechatProperty;
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ private InsProductMapper insProductMapper;
+ private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+
+
+ @Override
+ public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
+ if (StringUtils.isBlank(partNo)) {
+ throw new ErrorException("闆朵欢鍙蜂涪澶�");
+ }
+ List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
+ if (CollectionUtil.isEmpty(factoryDtos)) {
+ throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
+ }
+ RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
+ Set<String> sampleTypeValues = new HashSet<>();
+ for (FactoryDto factoryDto : factoryDtos) {
+ for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
+ for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
+ if (sampleTypeDto.getChildren().size() == 0) {
+ sampleTypeValues.add(sampleTypeDto.getValue());
+ }
+ }
+ }
+ }
+ // 鎵归噺鏌ヨ鎵�鏈� sampleTypeDto 鐨勬暟鎹�
+ List<SampleDto> standardList = standardTreeMapper.getStandardTree3Batch(sampleTypeValues);
+ Map<String, List<SampleDto>> standardTreeMap = standardList.stream().collect(Collectors.groupingBy(SampleDto::getValue));
+
+ for (FactoryDto factoryDto : factoryDtos) {
+ for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
+ for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
+ List<SampleDto> standardTreeList = standardTreeMap.get(sampleTypeDto.getValue());
+ if (sampleTypeDto.getChildren().size() == 0) {
+ sampleTypeDto.getChildren().addAll(standardTreeList);
+ }
+ // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
+ if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
+ // 娣诲姞瀵硅薄
+ rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
+ + laboratoryDto.getValue() + "-"
+ + sampleTypeDto.getValue());
+ rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
+ rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
+ rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
+ rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
+ } else {
+ for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
+ if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
+ // 娣诲姞瀵硅薄
+ rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
+ + laboratoryDto.getValue() + "-"
+ + sampleTypeDto.getValue() + "-"
+ + sampleDto.getValue());
+ rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
+ rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
+ rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
+ rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
+ }
+ }
+ }
+ }
+ }
+ }
+ return rawMaterialStandardTreeDto;
+ }
+
+ @Override
+ public IPage<IfsInventoryQuantity> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
+ return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
+ }
+
+ @Override
+ public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
+ return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
+ }
+
+
+ /**
+ * 鎶ユ
+ * @param ids
+ * @return
+ */
+ @Override
+ public int inspectionReport(List<Integer> ids) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+ .in(IfsInventoryQuantity::getId, ids)
+ .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
+ .set(IfsInventoryQuantity::getDeclareUserId, userId)
+ .set(IfsInventoryQuantity::getIsInspect, 1)
+ .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
+ );
+ threadPoolTaskExecutor.execute(() -> {
+ List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+ .in(IfsInventoryQuantity::getId, ids));
+ // 浼佷笟寰俊閫氱煡
+ String message = "";
+ message += "鏂板鎶ユ閫氱煡";
+ for (IfsInventoryQuantity inventoryQuantity : quantityList) {
+ message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
+ message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
+ message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
+
+ // 鍒ゆ柇鏈夋病鏈夊埌20鍚�. 鎴栬�呰兘鍚﹀厤妫�
+ int result = notificationRawOrder(inventoryQuantity.getId());
+ switch (result) {
+ case 1:
+ message += "\n褰撳墠鏍峰搧宸叉楠岃繃, 鍙互鍏嶆";
+ break;
+ case 2:
+ message += "\n褰撳墠鏍峰搧宸茶秴杩�20鍚�";
+ break;
+ }
+ message += "\n";
+ }
+ WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
+ });
+ return 1;
+ }
+
+ /**
+ * 鎾ら攢鎶ユ
+ * @param id
+ * @return
+ */
+ @Override
+ public int revokeInspectionReport(Integer id) {
+ return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+ .eq(IfsInventoryQuantity::getId, id)
+ .set(IfsInventoryQuantity::getIsInspect, 0)
+ );
+ }
+
+ /**
+ * 鎵撳嵃鏍囩鏌ヨ
+ * @param ids
+ * @return
+ */
+ @Override
+ public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
+ return ifsInventoryQuantityMapper.printLabel(ids);
+ }
+
+ /**
+ * 鎶ユ
+ * @param ifsInventoryQuantity
+ * @return
+ */
+ @Override
+ public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+ .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
+ .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
+ .set(IfsInventoryQuantity::getDeclareUserId, userId)
+ .set(IfsInventoryQuantity::getIsInspect, 1)
+ .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
+ .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
+ );
+
+ threadPoolTaskExecutor.execute(() -> {
+ IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
+ // 浼佷笟寰俊閫氱煡
+ String message = "";
+ message += "鏂板鎶ユ閫氱煡";
+ message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
+ message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
+ message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
+ WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
+ });
+ return 1;
+ }
+
+ /**
+ * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
+ * @param id
+ * @return
+ */
+ @Override
+ public String getIndustryChain(Integer id) {
+ return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
+ }
+
+ /**
+ * 鍘熸潗鏂欐挙閿�鎺ュ彛
+ * @param ifsInventoryId
+ * @return
+ */
+ @Override
+ public boolean repealRawOrder(Integer ifsInventoryId) {
+ // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+ if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
+ // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
+ ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
+ } else {
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getState, 0)
+ .set(IfsInventoryQuantity::getIsQuarter, 1)
+ .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+ }
+
+ insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
+ .set(InsOrder::getState, -1)
+ .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+ return true;
+ }
+
+ /**
+ * 鍘熸潗鏂欏厤妫�涓嬪崟
+ * @param list
+ * @param insOrder
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
+ if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+ throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
+ }
+ insOrder.setSendTime(LocalDateTime.now());
+ // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
+ insOrder.setState(4);
+ insOrder.setTypeSource(1);
+
+ String code = "Y";
+ // 鐢熸垚缂栧彿
+ String no = numberGenerator.generateNumberWithPrefix(3,
+ "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+ InsOrder::getEntrustCode);
+
+ insOrderMapper.insert(insOrder); // 涓昏〃
+
+ AtomicInteger count = new AtomicInteger();
+ list.forEach(a -> {
+ count.getAndIncrement();
+ a.setId(null);
+ a.setInsOrderId(insOrder.getId());
+ if (StrUtil.isEmpty(a.getSampleCode())) {
+ // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+ if (list.size() != 1) {
+ a.setSampleCode(no + "-" + count.get());
+ } else {
+ a.setSampleCode(no);
+ }
+ }
+ insSampleMapper.insert(a);
+
+ if (!CollectionUtil.isEmpty(a.getInsProduct())) {
+ throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
+ }
+ });
+
+ // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+ Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+ User user = userMapper.selectById(declareUserId);
+ // 渚涘簲鍟嗗悕绉�
+ insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+ // 濮旀墭浜哄悕绉�
+ insOrder.setPrepareUser(user.getName());
+ insOrder.setPhone(user.getPhone());
+
+ // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
+ .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
+
+ insOrder.setExamineTime(LocalDateTime.now());
+
+ insOrder.setEntrustCode(no);
+ insOrder.setIsExemption(1);
+
+ insOrderMapper.updateById(insOrder);
+
+ // 娣诲姞宸ユ椂
+ addAuxiliary(insOrder, ifsInventoryQuantity);
+
+ // todo: ifs鐩存帴绉诲簱
+ insReportService.isRawMaterial(insOrder);
+
+ return insOrder.getId();
+ }
+
+
+ /**
+ * 鏌ヨ寰呬笅鍗�
+ * @param page
+ * @param ifsInventoryQuantity
+ * @return
+ */
+ @Override
+ public IPage<IfsInventoryQuantityCheckDto> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
+ return standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
+ }
+
+ /**
+ * 鏌ヨ宸叉楠�
+ * @param page
+ * @param ifsInventoryQuantityDto
+ * @return
+ */
+ @Override
+ public IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+ // todo: 鍙湅鎴�
+ String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+ String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+ ifsInventoryQuantityDto.setBeginDeclareDate(null);
+ ifsInventoryQuantityDto.setEndDeclareDate(null);
+
+ return standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+ }
+
+ /**
+ * 鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅
+ * @param id
+ * @return
+ */
+ @Override
+ public int delIfsInventory(Integer id) {
+ return ifsInventoryQuantityMapper.deleteById(id);
+ }
+
+ /**
+ * 鍘熸潗鏂欐斁琛屽厤妫�
+ * @param ifsInventoryId
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
+ // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getState, 2)
+ .set(IfsInventoryQuantity::getIsQuarter, 0)
+ .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+
+ // 鏌ヨ鍘熸潗鏂欎俊鎭�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+ // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+ Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+ User user = userMapper.selectById(declareUserId);
+
+ InsOrder insOrder = new InsOrder();
+ insOrder.setState(4);
+ insOrder.setTypeSource(1);
+ String code = "Y";
+ // 鐢熸垚缂栧彿
+ String no = numberGenerator.generateNumberWithPrefix(3,
+ "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+ InsOrder::getEntrustCode);
+ insOrder.setExamineTime(LocalDateTime.now());
+ insOrder.setEntrustCode(no);
+ insOrder.setIsExemption(1);
+ // 渚涘簲鍟嗗悕绉�
+ insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+ // 濮旀墭浜哄悕绉�
+ insOrder.setPrepareUser(user.getName());
+ insOrder.setPhone(user.getPhone());
+ insOrder.setIfsInventoryId(ifsInventoryId);
+ insOrder.setPartDetail(partDetail);
+ insOrder.setSendTime(LocalDateTime.now());
+ insOrder.setSample(ifsInventoryQuantity.getPartDesc());
+ // 杩涘巶妫�楠�
+ insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
+
+ insOrderMapper.insert(insOrder);
+
+ // 娣诲姞宸ユ椂
+ addAuxiliary(insOrder, ifsInventoryQuantity);
+
+ // todo: ifs鐩存帴绉诲簱
+ insReportService.isRawMaterial(insOrder);
+ return true;
+ }
+
+ /**
+ * 0, 鏃犳彁绀�, 1鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡妫�楠岃繃, 鍙互鍏嶆, 2 鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡瓒�20鍚�, 闇�瑕佸绾у娆℃楠�
+ *
+ * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
+ * @param ifsInventoryId
+ * @return
+ */
+ @Override
+ public int notificationRawOrder(Integer ifsInventoryId) {
+ IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+ // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
+ List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+ .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
+ .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
+ .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
+ .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
+
+ // 鍒ゆ柇鏄惁澶т簬20鍚�
+ BigDecimal bigDecimal = new BigDecimal("20000");
+ BigDecimal count = BigDecimal.ZERO;
+ for (IfsInventoryQuantity inventoryQuantity : quantityList) {
+ // 鍒ゆ柇鍗曚綅鏄痥g鎴栬�卼
+ if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
+ count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
+ } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
+ count = count.add(inventoryQuantity.getQtyArrived());
+ }
+ }
+
+ if (count.compareTo(bigDecimal) >= 0) {
+ return 2;
+ } else {
+ // 鍒ゆ柇涔嬪墠鏄惁鍑鸿繃鎶ュ憡, 鍑鸿繃鎶ュ憡鍙互鍏嶆
+ int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
+ if (reportCount > 0) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 鎶ユ鍙互鏂板鎶ユ淇℃伅
+ * @param ifsInventoryQuantity
+ */
+ @Override
+ public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
+ ifsInventoryQuantity.setIsSource(0);
+ ifsInventoryQuantity.setState(0);
+ ifsInventoryQuantity.setIsFinish(0);
+ ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+ }
+
+
+
+
+ /**
+ * 閾滃崟涓濅笅鍗曞厤妫�
+ * @param list
+ * @param insOrder
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
+ if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+ throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
+ }
+ insOrder.setSendTime(LocalDateTime.now());
+ // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
+ insOrder.setState(4);
+ insOrder.setTypeSource(1);
+
+ String code = "Y";
+ // 鐢熸垚缂栧彿
+ String no = numberGenerator.generateNumberWithPrefix(3,
+ "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+ InsOrder::getEntrustCode);
+
+ insOrderMapper.insert(insOrder); // 涓昏〃
+
+ AtomicInteger count = new AtomicInteger();
+ list.forEach(a -> {
+ count.getAndIncrement();
+ a.setId(null);
+ a.setInsOrderId(insOrder.getId());
+ if (StrUtil.isEmpty(a.getSampleCode())) {
+ // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+ if (list.size() != 1) {
+ a.setSampleCode(no + "-" + count.get());
+ } else {
+ a.setSampleCode(no);
+ }
+ }
+ insSampleMapper.insert(a);
+
+ if (!CollectionUtil.isEmpty(a.getInsProduct())) {
+ throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
+ }
+ });
+ // 娣诲姞鍘熸潗鏂欎俊鎭�
+ IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
+ // 鍩烘湰淇℃伅
+ ifsInventoryQuantity.setIsSource(0);
+ ifsInventoryQuantity.setState(2);
+ ifsInventoryQuantity.setIsInspect(1);
+ ifsInventoryQuantity.setIsFinish(1);
+ ifsInventoryQuantity.setIsCopper(1);
+ ifsInventoryQuantity.setInspectStatus(1);
+ ifsInventoryQuantity.setIsQuarter(0);
+
+ ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
+ ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
+ ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
+ ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
+ ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
+
+ ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+
+ insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
+ insOrder.setExamineTime(LocalDateTime.now());
+
+ insOrder.setEntrustCode(no);
+ insOrder.setIsExemption(1);
+
+ insOrderMapper.updateById(insOrder);
+
+ // 娣诲姞宸ユ椂
+ addAuxiliary(insOrder, ifsInventoryQuantity);
+
+ return insOrder.getId();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean concessionRelease(Integer ifsInventoryId) {
+ // 鏌ヨ鍘熸潗鏂欎俊鎭�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+ if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
+ throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
+ }
+
+ // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
+ String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getInspectStatus, 4)
+ .set(IfsInventoryQuantity::getToLocation, toLocation)
+ .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+
+ return true;
+ }
+
+ /**
+ * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
+ * @param enterOrderId
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean repealEnterRawOrder(Integer enterOrderId) {
+ // 鏌ヨ璁㈠崟
+ InsOrder order = insOrderMapper.selectById(enterOrderId);
+
+ // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+ if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
+ // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
+ ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
+ } else {
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getState, 0)
+ .set(IfsInventoryQuantity::getIsQuarter, 1)
+ .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+ }
+ insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, enterOrderId)
+ .set(InsOrder::getState, -1)
+ .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+
+ // 娓呴櫎涔嬪墠鐨勫伐鏃�
+ auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+ .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
+
+ // 娓呴櫎涔嬪墠鎶ュ憡
+ insReportService.remove(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, enterOrderId));
+
+ return true;
+ }
+
+ /**
+ * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
+ * @param quarterOrderId
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean repealQuarterRawOrder(Integer quarterOrderId) {
+ // 鏌ヨ璁㈠崟
+ InsOrder order = insOrderMapper.selectById(quarterOrderId);
+
+ Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+ .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
+ .ne(InsOrder::getState, -1)
+ .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
+ .ne(InsOrder::getId, order.getId()));
+ // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�, 娌℃湁闇�瑕佷慨鏀瑰師鏉愭枡淇℃伅
+ if (count == 0) {
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getState, 0)
+ .set(IfsInventoryQuantity::getIsQuarter, 1)
+ .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+ } else {
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getIsQuarter, 1)
+ .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+ }
+
+ insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, quarterOrderId)
+ .set(InsOrder::getState, -1)
+ .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+ auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+ .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
+ // 娓呴櫎涔嬪墠鎶ュ憡
+ insReportService.remove(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, quarterOrderId));
+ return true;
+ }
+
+ /**
+ * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
+ * @param ifsInventoryQuantityDto
+ * @param response
+ */
+ @Override
+ public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
+ //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
+ String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+ String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+ ifsInventoryQuantityDto.setBeginDeclareDate(null);
+ ifsInventoryQuantityDto.setEndDeclareDate(null);
+ List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+
+ for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
+ dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ switch (dto.getInspectStatus()) {
+ case 1:
+ dto.setInspectStatusString("鍚堟牸");
+ break;
+ case 2:
+ dto.setInspectStatusString("涓嶅悎鏍�");
+ // 鏌ヨ涓嶅悎鏍奸」
+ List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
+ dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
+ break;
+ case 3:
+ dto.setInspectStatusString("鏈笅鍗�");
+ break;
+ case 4:
+ dto.setInspectStatusString("璁╂鏀捐");
+ break;
+ case 0:
+ dto.setInspectStatusString("妫�楠屼腑");
+ break;
+
+ }
+ }
+
+
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+ String fileName = URLEncoder.encode("鍘熸潗鏂欐娴嬩俊鎭鍑�", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ try {
+ //鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ //鑾峰彇sheet0瀵硅薄
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
+
+ //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
+ excelWriter.write(ifsByOverList, mainSheet);
+ //鍏抽棴娴�
+ excelWriter.finish();
+ } catch (IOException e) {
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ /**
+ * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
+ * @param page
+ * @param ifsInventoryQuantityDto
+ * @return
+ */
+ @Override
+ public IPage<IfsInventoryQuantitySupplierDto> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+
+ // todo: 鍙湅鎴�
+ String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+ String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+ ifsInventoryQuantityDto.setBeginDeclareDate(null);
+ ifsInventoryQuantityDto.setEndDeclareDate(null);
+
+ return standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+ }
+
+ /**
+ * 鎻愬墠鍏ュ簱
+ * @param ifsInventoryId
+ * @return
+ */
+ @Override
+ public boolean advancedGodown(Integer ifsInventoryId) {
+ // 鏌ヨ鍘熸潗鏂欎俊鎭�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+ if (!ifsInventoryQuantity.getInspectStatus().equals(0)
+ && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
+ throw new ErrorException("鏈娴嬪畬鎴愭暟鎹墠鑳芥彁鍓嶅叆搴�");
+ }
+
+ // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
+ String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+
+ ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+ .set(IfsInventoryQuantity::getInspectStatus, 1)
+ .set(IfsInventoryQuantity::getIsFinish, 1)
+ .set(IfsInventoryQuantity::getToLocation, toLocation)
+ .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+
+ return true;
+ }
+
+
+ /**
+ * 娣诲姞宸ユ椂
+ * @param insOrder
+ * @param ifsInventoryQuantity
+ */
+ private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
+ AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
+ auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "鍏嶆");//妫�娴嬮」鍒嗙被
+ auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//鏍峰搧缂栧彿
+ auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
+ auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
+
+ // 鍏嶆榛樿2
+ auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//闈炲姞鐝伐鏃�
+ auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
+ auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
+ LocalDateTime localDateTime = LocalDateTime.now();
+ DateTime parse = DateUtil.parse(localDateTime.format(formatter));
+ auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
+ auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
+ auxiliaryOutputWorkingHours.setCheck(SecurityUtils.getUserId().intValue());//妫�娴嬩汉
+ auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//鍗曚环
+
+ auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+ }
+
+ public static String getWeek(String dayStr) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ try {
+ Date date = sdf.parse(dayStr);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+ int day = calendar.get(Calendar.DAY_OF_MONTH);
+ return getWeekDay(dayOfWeek);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static String getWeekDay(int dayOfWeek) {
+ switch (dayOfWeek) {
+ case Calendar.MONDAY:
+ return "鍛ㄤ竴";
+ case Calendar.TUESDAY:
+ return "鍛ㄤ簩";
+ case Calendar.WEDNESDAY:
+ return "鍛ㄤ笁";
+ case Calendar.THURSDAY:
+ return "鍛ㄥ洓";
+ case Calendar.FRIDAY:
+ return "鍛ㄤ簲";
+ case Calendar.SATURDAY:
+ return "鍛ㄥ叚";
+ case Calendar.SUNDAY:
+ return "鍛ㄦ棩";
+ default:
+ return "鏈煡";
+ }
+ }
+}
--
Gitblit v1.9.3