cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceDto.java
@@ -43,4 +43,7 @@ @ValueTableShow(value = 16, name = "下次校准日期") @ApiModelProperty(value = "下次校准日期") private LocalDateTime nextCalibrationDateTwo; @ApiModelProperty(value = "校准提醒") private String status; } cnas-server/src/main/resources/mapper/DeviceMapper.xml
@@ -102,12 +102,25 @@ SEPARATOR ';' ) AS insProductItem, u.name , l.laboratory_name l.laboratory_name, cmr.next_calibration_date nextCalibrationDateTwo, CASE WHEN cmr.next_calibration_date IS NULL THEN 0 WHEN cmr.next_calibration_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 45 DAY) THEN 1 ELSE 0 END AS status FROM device d LEFT JOIN `user` u ON u.id = d.equipment_manager LEFT JOIN laboratory l ON l.id = d.subordinate_departments_id LEFT JOIN device_metric_record cmr ON d.id = cmr.device_id LEFT JOIN (SELECT device_id, type, MAX(next_calibration_date) AS next_calibration_date FROM device_metric_record GROUP BY device_id )cmr ON d.id = cmr.device_id LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids) <where> <if test="laboratoryNameIsNull != null and laboratoryNameIsNull == true"> @@ -117,7 +130,7 @@ </where> GROUP BY d.id, u.name, l.laboratory_name u.name, l.laboratory_name,cmr.next_calibration_date,status ) a <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> ${ew.customSqlSegment} inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -109,6 +109,13 @@ return Result.success(insOrderPlanService.verifyPlan(sampleId, laboratory, type, tell)); } @ValueClassify("检验任务") @ApiOperation(value = "纠正复核") @PostMapping("/verifyPlan2") public Result<?> verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) throws IOException { return Result.success(insOrderPlanService.verifyPlan2(sampleId, laboratory, type, tell)); } @ValueAuth @ApiOperation(value = "校验检验任务提交") @PostMapping("/checkSubmitPlan") @@ -245,7 +252,6 @@ @ValueAuth @PostMapping("/getInsProduct2") @ApiOperation("查看检验历史") //这里的id是样品id public Result<?> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request, Integer num) { return Result.success(insOrderPlanService.getInsProduct2(id, type, laboratory, request, num)); } @@ -274,7 +280,6 @@ @ValueAuth @PostMapping("/getCheckUser") @ApiOperation("获取当前检验任务的所有检验员信息") //这里的传参是样品id,等检验任务那块全改了之后这里就没问题 public Result<?> getCheckUser(Integer id,String sonLaboratory) { List<InsSampleUser> insSampleUsers = insSampleUserMapper.selectList(Wrappers.<InsSampleUser>lambdaQuery() .eq(InsSampleUser::getState, 0) //检验人 inspect-server/src/main/java/com/yuanchu/mom/controller/WarehouseController.java
@@ -29,10 +29,12 @@ @ValueClassify("样品管理") @GetMapping("/selectWarehouse") @ApiOperation("查询仓库") @ApiOperation("查询仓库---仅查询为空货架") public Result selectWarehouse() { return Result.success(warehouseService.selectWarehouse()); } @ValueClassify("样品管理") @PostMapping("/addShelf") @ApiOperation("添加货架") @@ -95,4 +97,4 @@ public Result getSampleRecord(Integer id) { return Result.success(warehouseService.getSampleRecord(id)); } } } inspect-server/src/main/java/com/yuanchu/mom/pojo/WarehouseShelf.java
@@ -6,6 +6,7 @@ import java.io.Serializable; import java.time.LocalDateTime; import java.util.List; /** * 货架 @@ -15,7 +16,7 @@ @Data public class WarehouseShelf implements Serializable { /** * * */ @TableId(type = IdType.AUTO) private Integer id; @@ -38,7 +39,7 @@ private Integer col; /** * * */ @TableField(fill = FieldFill.INSERT) private Integer createUser; @@ -58,4 +59,7 @@ * 外键:仓库id */ private Integer warehouseId; } @TableField(select = false,exist = false) List<WarehouseCell> warehouseCellList; } inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -39,6 +39,9 @@ int verifyPlan(Integer sampleId, String laboratory, Integer type, String tell) throws IOException; //纠正复核错误的情况 int verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) throws IOException; int submitPlan(SubmitPlanDto submitPlanDto); //撤销提交 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -354,7 +354,7 @@ dianLuUtils.readDianLuFile1(sampleId, insOrderFile); } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && filename.contains("驻波")) { dianLuUtils.readDianLuFile2(sampleId, insOrderFile); }else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("无源器件")) { } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("无源器件")) { dianLuUtils.readDianLuFile3(sampleId, insOrderFile); } } catch (Exception e) { @@ -891,7 +891,7 @@ for (InsProductResultDto insProductResultDto : insProductResultDtos.getInsProductResultDtos()) { saveInsContext2(insProductResultDto); } return 1; return 1; } //温湿度试验+功率试验的保存检验内容 @@ -1061,16 +1061,9 @@ .set(InsOrderState::getVerifyTell, tell) .set(InsOrderState::getVerifyUser, userId)); //如果订单类型是原理样机,则该订单直接闭环 if (insOrder.getFormType().equals("原理样机")) { //出库 try { List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId())); for (InsSample sample : insSamples) { outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode()); } } catch (Exception e) { } List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId())); for (InsSample sample : insSamples) { outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode()); } insOrder.setState(4); insOrderMapper.updateById(insOrder); @@ -1080,7 +1073,98 @@ return 1; } private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) { @Override @Transactional(rollbackFor = Exception.class) public int verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) throws IOException { Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); InsSample insSample = insSampleMapper.selectById(sampleId); InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId()); /*type=0 再次试验; type=1 继续试验 ; type=2 结束试验*/ // 查询根据 id 倒序排列的第一条记录 InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery() .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) .eq(InsOrderState::getInsSampleId, sampleId) .eq(InsOrderState::getLaboratory, laboratory) .orderByDesc(InsOrderState::getId) .last("LIMIT 1")); // 确保只取一条记录 if (record != null) { //更新记录 insOrderUserMapper.update(null, Wrappers.<InsOrderUser>lambdaUpdate() .eq(InsOrderUser::getInsOrderStateId, record.getId()) .eq(InsOrderUser::getNum, record.getNum()) .set(InsOrderUser::getTell, tell)); switch (type) { case 0: //再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据); insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() .eq(InsOrderState::getId, record.getId()) .set(InsOrderState::getInsTime, LocalDateTime.now()) .set(InsOrderState::getInsState, 4) .set(InsOrderState::getVerifyTell, tell) .set(InsOrderState::getVerifyUser, userId) .set(InsOrderState::getNum, record.getNum() + 1)//次数加1 .set(InsOrderState::getCreateTime, LocalDateTime.now())); insOrder.setState(3); break; case 1: //继续试验:该样品该站点任务结束(可以再次扫码检验); //先判断上一个复核是什么结论 if (record.getInsState()==4){ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) .eq(InsOrderState::getInsSampleId, sampleId) .eq(InsOrderState::getLaboratory, laboratory) .set(InsOrderState::getInsState, 6) .set(InsOrderState::getVerifyTell, tell) .set(InsOrderState::getNum, record.getNum() - 1)//次数-1 .set(InsOrderState::getVerifyUser, userId)); }else { insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) .eq(InsOrderState::getInsSampleId, sampleId) .eq(InsOrderState::getLaboratory, laboratory) .set(InsOrderState::getInsState, 6) .set(InsOrderState::getVerifyTell, tell) .set(InsOrderState::getVerifyUser, userId)); } insOrder.setState(3); break; case 2: //结束试验:此委托单停止试验(无法再次检验)。 //先判断上一个复核是什么结论 if (record.getInsState()==4){ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) .eq(InsOrderState::getInsSampleId, sampleId) .eq(InsOrderState::getLaboratory, laboratory) .set(InsOrderState::getInsState, 5) .set(InsOrderState::getNum, record.getNum() - 1)//次数-1 .set(InsOrderState::getVerifyTell, tell) .set(InsOrderState::getVerifyUser, userId)); }else { insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) .eq(InsOrderState::getInsSampleId, sampleId) .eq(InsOrderState::getLaboratory, laboratory) .set(InsOrderState::getInsState, 5) .set(InsOrderState::getVerifyTell, tell) .set(InsOrderState::getVerifyUser, userId)); } //出库 List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId())); for (InsSample sample : insSamples) { outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode()); } insOrder.setState(4); break; } insOrderMapper.updateById(insOrder); } return 1; } private void getTemplateThing (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) { for (InsProduct product : insProducts) { if (product.getTemplateId() == null) { product.setTemplate(new ArrayList<>()); @@ -1194,7 +1278,7 @@ if (submitPlanDto.getLaboratory().equals("电路试验")) { if (!insOrder.getSampleType().equals("无源器件")) { wordUtils.generateWord(submitPlanDto.getTerm(), orderState); }else { } else { wordUtils.generateWord2(submitPlanDto.getTerm(), orderState); } //todo 电路站点报告 正式库部署放开 @@ -1283,8 +1367,8 @@ InsSample insSample = insSampleMapper.selectById(orderState.getInsSampleId()); /*删除记录检验任务每次的备注信息*/ insOrderUserMapper.delete(Wrappers.<InsOrderUser>lambdaQuery() .eq(InsOrderUser::getInsOrderStateId,orderState.getId()) .eq(InsOrderUser::getNum,orderState.getNum())); .eq(InsOrderUser::getInsOrderStateId, orderState.getId()) .eq(InsOrderUser::getNum, orderState.getNum())); //撤销提交 insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() .eq(InsOrderState::getInsOrderId, orderState.getInsOrderId()) @@ -1305,15 +1389,15 @@ informationNotificationService.addInformationNotification(info); //删除复核人--检验单相关负责人 insSampleUserMapper.delete(Wrappers.<InsSampleUser>lambdaQuery() .eq(InsSampleUser::getState,1) .eq(InsSampleUser::getSonLaboratory,orderState.getLaboratory()) .eq(InsSampleUser::getUserId,orderState.getVerifyUser()) .eq(InsSampleUser::getInsSampleId,orderState.getInsSampleId())); .eq(InsSampleUser::getState, 1) .eq(InsSampleUser::getSonLaboratory, orderState.getLaboratory()) .eq(InsSampleUser::getUserId, orderState.getVerifyUser()) .eq(InsSampleUser::getInsSampleId, orderState.getInsSampleId())); //删除生成的报告 if (orderState.getLaboratory().equals("电路试验")) { List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery() .eq(InsOrderFile::getType, 2) .like(InsOrderFile::getFileName,"电路参数.docx") .like(InsOrderFile::getFileName, "电路参数.docx") .eq(InsOrderFile::getInsOrderId, insOrder.getId()) .eq(InsOrderFile::getInsSampleId, orderState.getInsSampleId()) .eq(InsOrderFile::getSonLaboratory, orderState.getLaboratory())); @@ -1328,9 +1412,9 @@ List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId())); List<Integer> productIds = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList()); auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() .eq(AuxiliaryOutputWorkingHours::getSample,insSample.getSampleCode()) .in(AuxiliaryOutputWorkingHours::getInsProductId,productIds) .eq(AuxiliaryOutputWorkingHours::getNum,orderState.getNum())); .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode()) .in(AuxiliaryOutputWorkingHours::getInsProductId, productIds) .eq(AuxiliaryOutputWorkingHours::getNum, orderState.getNum())); // todo 企业微信消息推送@zss HashMap<String, Object> map = new HashMap<>(); inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductServiceImpl.java
@@ -11,9 +11,11 @@ import com.yuanchu.mom.mapper.InsOrderMapper; import com.yuanchu.mom.mapper.InsProductMapper; import com.yuanchu.mom.mapper.InsSampleMapper; import com.yuanchu.mom.mapper.WarehouseHistoryMapper; import com.yuanchu.mom.pojo.InsOrder; import com.yuanchu.mom.pojo.InsProduct; import com.yuanchu.mom.pojo.InsSample; import com.yuanchu.mom.pojo.WarehouseHistory; import com.yuanchu.mom.service.InsProductService; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.vo.InsOrderPlanVO; @@ -33,6 +35,8 @@ private InsOrderMapper insOrderMapper; private InsSampleMapper insSampleMapper; private WarehouseHistoryMapper warehouseHistoryMapper; @Override public int selectOrderManDay(Integer orderId) { @@ -83,6 +87,7 @@ @Override public void checkUpdate(Integer orderId, Integer state) { InsOrder insOrder = insOrderMapper.selectById(orderId); //通过 if (state == 1) { List<String> list = new ArrayList<>(); try { @@ -99,29 +104,29 @@ if (insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()).equals(ids)) { //如果该检验单下的所有项目全部都撤销,那么这个单子也需要撤销 insOrder.setState(3); } else { //出入库记录全部删掉 warehouseHistoryMapper.delete(Wrappers.<WarehouseHistory>lambdaQuery().in(WarehouseHistory::getInsSampleId, collect)); //全部撤销,样品和项目不能删掉,不然检验下单的撤销没有数据 } else { List<InsProduct> products = insProductMapper.selectBatchIds(ids); //首先根据选择的项目id进行撤销项目 updateBatchById(products.stream().map(insProduct -> { insProduct.setState(0); return insProduct; }).collect(Collectors.toList())); //如果该检验单某个样品下的项目全部都撤销了,那么这个样品也需要删掉 //如果该检验单某个样品下的项目全部都撤销了,那么这个样品的出入库记录也需要删掉 List<Integer> sampleIds = products.stream().map(InsProduct::getInsSampleId).distinct().collect(Collectors.toList()); //项目删掉 insProductMapper.deleteBatchIds(ids); for (Integer sampleId : sampleIds) { Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery() .eq(InsProduct::getInsSampleId, sampleId) .eq(InsProduct::getState, 1)); if(count<=0){ if (count <= 0) { //出入库记录全部删掉 warehouseHistoryMapper.delete(Wrappers.<WarehouseHistory>lambdaQuery().eq(WarehouseHistory::getInsSampleId, sampleId)); //对应的样品删掉 insSampleMapper.deleteById(sampleId); } } } //insProductMapper.updateInspected(id); } //不通过 insOrder.setIsRevocation(0); insOrder.setIsRevocation(state); insOrderMapper.updateById(insOrder); } inspect-server/src/main/java/com/yuanchu/mom/service/impl/WarehouseServiceImpl.java
@@ -151,9 +151,11 @@ if(tree.length < 4){ throw new ErrorException("库位选择错误"); } List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode)); List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery() .ne(InsOrder::getState,3)//排除撤销的订单 .eq(InsOrder::getEntrustCode, entrustCode)); if(insOrders.size()!=1){ throw new ErrorException("订单编号输入有误"); throw new ErrorException("订单编号输入有误,或者该订单编号已经撤销"); } List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() .eq(InsSample::getSampleCode, sampleCode) @@ -180,9 +182,11 @@ @Override public int outWarehouse(String sampleCode, boolean a,String entrustCode) { List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode)); List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery() .ne(InsOrder::getState,3)//排除撤销的订单 .eq(InsOrder::getEntrustCode, entrustCode)); if(insOrders.size()!=1){ throw new ErrorException("订单编号输入有误"); throw new ErrorException("订单编号输入有误,或者该订单编号已经撤销"); } List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() .eq(InsSample::getSampleCode, sampleCode) inspect-server/src/main/resources/mapper/WarehouseMapper.xml
@@ -3,14 +3,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yuanchu.mom.mapper.WarehouseMapper"> <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.Warehouse"> <id property="id" column="id" jdbcType="INTEGER"/> <result property="name" column="name" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="createUser" column="create_user" jdbcType="INTEGER"/> <result property="updateUser" column="update_user" jdbcType="INTEGER"/> <id property="id" column="id" jdbcType="INTEGER"/> <result property="name" column="name" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="createUser" column="create_user" jdbcType="INTEGER"/> <result property="updateUser" column="update_user" jdbcType="INTEGER"/> </resultMap> <resultMap id="Warehouse" type="com.yuanchu.mom.dto.WarehouseDto"> @@ -24,10 +23,32 @@ <result property="name" column="sName" jdbcType="VARCHAR"/> <result property="row" column="row" jdbcType="INTEGER"/> <result property="col" column="col" jdbcType="INTEGER"/> <collection property="warehouseCellList" resultMap="cell"/> </resultMap> <resultMap id="cell" type="com.yuanchu.mom.pojo.WarehouseCell"> <id property="id" column="cId" jdbcType="INTEGER"/> <result property="row" column="crow" jdbcType="INTEGER"/> <result property="col" column="ccol" jdbcType="INTEGER"/> </resultMap> <select id="selectWarehouseList" resultMap="Warehouse"> select w.id,w.name,ws.id sId,ws.name sName,ws.row,ws.col,ws.warehouse_id from warehouse w left join warehouse_shelf ws on w.id = ws.warehouse_id select w.id, w.name, ws.id sId, ws.name sName, ws.row, ws.col, wc.id cId, wc.row crow, wc.col ccol from warehouse w left join warehouse_shelf ws on w.id = ws.warehouse_id left join warehouse_cell wc on shelf_id = ws.id left join (select cell_id, count(*) num from warehouse_history group by cell_id) a on cell_id = wc.id where num is null or num % 2 = 0 order by id, sId, crow, ccol </select> </mapper>