diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/aspect/StoreLogAspect.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/aspect/StoreLogAspect.java index 4b5b0ad0..9ea70a1b 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/aspect/StoreLogAspect.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/aspect/StoreLogAspect.java @@ -218,7 +218,8 @@ public class StoreLogAspect { .map(RepairInputDetails::getMaCode) .collect(Collectors.joining(",")); bmStorageLog.setMaCode(maCode); - bmStorageLog.setInputType(InputOutEnum.CODE_DEVICE.getTypeId()); + bmStorageLog.setInputType(repairInputDetails.getInputType() != null ? + repairInputDetails.getInputType() : InputOutEnum.CODE_DEVICE.getTypeId() ); } else { bmStorageLog.setManageType(String.valueOf(InputOutEnum.NUMBER_DEVICE.getTypeId())); bmStorageLog.setInNum(repairInputDetails.getInputNum()); diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/config/AppOcrConfig.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/config/AppOcrConfig.java new file mode 100644 index 00000000..98b855e9 --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/config/AppOcrConfig.java @@ -0,0 +1,98 @@ +package com.bonus.common.biz.config; + +import java.text.DecimalFormat; + +/** + * @Author ma_sh + * @create 2025/1/2 15:03 + */ +public class AppOcrConfig { + + /** + * String字符串相似度比较 + * @param str + * @param target + * @param isIgnore + * @return + */ + public static float getSimilarityRatio(String str, String target, boolean isIgnore) { + float ret = 0; + DecimalFormat decimalFormat=new DecimalFormat(".0"); + + if (Math.max(str.length(), target.length()) == 0) { + ret = 1; + } else { + ret = 1 - (float) compare(str, target, isIgnore) / Math.max(str.length(), target.length()); + } + ret=Float.parseFloat(decimalFormat.format(ret*100)); + return ret; + } + + /** + * 字符串相似度比较 + * @param str + * @param target + * @param isIgnore + * @return + */ + public static int compare(String str, String target, boolean isIgnore) { + int[][] d; // 矩阵 + int n = str.length(); + int m = target.length(); + int i; // 遍历str的 + int j; // 遍历target的 + char ch1; // str的 + char ch2; // target的 + int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1 + if (n == 0) { + return m; + } + if (m == 0) { + return n; + } + d = new int[n + 1][m + 1]; + for (i = 0; i <= n; i++) { // 初始化第一列 + d[i][0] = i; + } + + for (j = 0; j <= m; j++) { // 初始化第一行 + d[0][j] = j; + } + + for (i = 1; i <= n; i++) { // 遍历str + ch1 = str.charAt(i - 1); + // 去匹配target + for (j = 1; j <= m; j++) { + ch2 = target.charAt(j - 1); + if (isIgnore) { + if (ch1 == ch2 || ch1 == ch2 + 32 || ch1 + 32 == ch2) { + temp = 0; + } else { + temp = 1; + } + } else { + if (ch1 == ch2) { + temp = 0; + } else { + temp = 1; + } + } + + // 左边+1,上边+1, 左上角+temp取最小 + d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp); + } + } + return d[n][m]; + } + + /** + * 取最小值 + * @param one + * @param two + * @param three + * @return + */ + public static int min(int one, int two, int three) { + return (one = Math.min(one, two)) < three ? one : three; + } +} diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/repair/RepairInputDetails.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/repair/RepairInputDetails.java index c94593a8..3c954039 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/repair/RepairInputDetails.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/repair/RepairInputDetails.java @@ -62,8 +62,8 @@ public class RepairInputDetails extends BaseEntity { @ApiModelProperty(value = "机具状态") private String maStatus; - @ApiModelProperty(value = "机具状态名称") - private String inputType; + @ApiModelProperty(value = "入库方式 0编码,1数量,2二维码,3标准箱") + private Integer inputType; @ApiModelProperty(value = "二维码code") private String qrCode; diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/MaMachineStatusEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/MaMachineStatusEnum.java index 92b82aa1..7e77f4e4 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/MaMachineStatusEnum.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/MaMachineStatusEnum.java @@ -27,7 +27,8 @@ public enum MaMachineStatusEnum { REPAIR_TO_SCRAP(7, "维修待报废"), SCRAP_AUDIT(8, "已报废审核"), BACK_TO_STORE(9, "退料待入库"), - SCRAP_TO_AUDIT(10, "报废待审核"); + SCRAP_TO_AUDIT(10, "报废待审核"), + RETURNED_MATERIAL(11, "退料暂存"); private final Integer status; private final String statusName; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/controller/AppOcrController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/controller/AppOcrController.java new file mode 100644 index 00000000..8633c06f --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/controller/AppOcrController.java @@ -0,0 +1,86 @@ +package com.bonus.material.app.controller; + +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.app.domain.MachineOcrBean; +import com.bonus.material.app.service.AppOcrService; +import com.bonus.material.common.annotation.PreventRepeatSubmit; +import com.bonus.material.ma.domain.vo.MachineVo; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * app ocr扫描接口 + * @Author ma_sh + * @create 2025/1/2 13:49 + */ +@RestController +@RequestMapping("/app/ocr") +public class AppOcrController extends BaseController { + + @Resource + private AppOcrService appOcrService; + + /** + * 查询机具出库列表 + * @param bean + * @return + */ + @GetMapping("/findByPage") + public AjaxResult findByPage(MachineOcrBean bean) { + startPage(); + List list = appOcrService.findByPage(bean); + return AjaxResult.success(getDataTable(list)); + } + + /** + * 根据code查询机具出库列表 + * @param bean + * @return + */ + @GetMapping("/findOutListByDeviceCode") + public AjaxResult findOutListByDeviceCode(MachineOcrBean bean) { + List list = appOcrService.findOutListByDeviceCode(bean); + return AjaxResult.success(list); + } + + /** + * 提交机具出库 + * @param bean + * @return + */ + @ApiOperation(value = "提交机具出库") + @PreventRepeatSubmit + @PostMapping("/submitOcrOut") + public AjaxResult submitOcrOut(@RequestBody MachineOcrBean bean) + { + return appOcrService.submitOcrOut(bean); + } + + /** + * 根据code查询机具退料列表 + * @param bean + * @return + */ + @GetMapping("/findBackListByDeviceCode") + public AjaxResult findBackListByDeviceCode(MachineOcrBean bean) { + List list = appOcrService.findBackListByDeviceCode(bean); + return AjaxResult.success(list); + } + + /** + * 提交机具退料 + * @param bean + * @return + */ + @ApiOperation(value = "提交机具退料") + @PreventRepeatSubmit + @PostMapping("/submitOcrBack") + public AjaxResult submitOcrBack(@RequestBody MachineOcrBean bean) + { + return appOcrService.submitOcrBack(bean); + } +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/domain/MachineOcrBean.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/domain/MachineOcrBean.java new file mode 100644 index 00000000..429fcff9 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/domain/MachineOcrBean.java @@ -0,0 +1,75 @@ +package com.bonus.material.app.domain; + +import com.bonus.common.core.web.domain.BaseEntity; +import lombok.Data; + +/** + * @Author ma_sh + * @create 2025/1/2 13:54 + */ +@Data +public class MachineOcrBean extends BaseEntity { + + private String id; + private String epcCode; + private String deviceName; + private String deviceModel; + private String maCode; + private String batchStatus; + private String maId; + private String typeId; + private String userId; + private String companyId; + private String remark; + private String keyWord; + + private String mStr; + private String taskId; + private String preOutNum; + private String alOutNum; + private String thisOutNum; + private String type; + private String outTime; + private String repairTime; + private String nextRepairTime; + private String days; + private String pickId; + private String deptId; + private String subId; + private String teamId; + private String rearId; + private String initType; + private String projectId; + private String maType; + private String maDeviceCode; + private String maCount; + private String maModel; + private String maModelId; + private String outNum; + private String backNum; + private String repairNum; + private String backStatus; + private String backTypeId; + + private String supplierId; + private String exampleId; + private String purchasePrice; + private String buyTime; + + private String outCode; + private String actualNum; + private String qualifiedNum; + + private String proName; + private String deptName; + private String unitId; + private String linkMan; + + private String model; + private String code; + private String result; + + private String exName; + private String exCode; + private String exUrl; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/mapper/AppOcrMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/mapper/AppOcrMapper.java new file mode 100644 index 00000000..3bcf0c7e --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/mapper/AppOcrMapper.java @@ -0,0 +1,50 @@ +package com.bonus.material.app.mapper; + +import com.bonus.material.app.domain.MachineOcrBean; +import com.bonus.material.ma.domain.vo.MachineVo; + +import java.util.List; + +/** + * @ClassName AppOcrMapper + * @Author ma_sh + * @create 2025/1/2 13:51 + */ +public interface AppOcrMapper { + + /** + * 查询机具出库列表 + * @param bean + * @return + */ + List findByPage(MachineOcrBean bean); + + /** + * 根据设备编号查询机具出库列表 + * @param bean + * @return + */ + List findListByDeviceCode(MachineOcrBean bean); + + /** + * 添加机具出库记录 + * @param o + */ + void addOcrRecord(MachineOcrBean o); + + /** + * 根据设备编号查询机具编码 + * @param o + * @return + */ + List findCodeList(MachineOcrBean o); + + /** + * 更新机具入库数据 + * @param bean + * @return + */ + int updateStorageData(MachineOcrBean bean); + + int updateStorageDataBack(MachineOcrBean bean); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/service/AppOcrService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/service/AppOcrService.java new file mode 100644 index 00000000..c25334fd --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/service/AppOcrService.java @@ -0,0 +1,50 @@ +package com.bonus.material.app.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.app.domain.MachineOcrBean; +import com.bonus.material.ma.domain.vo.MachineVo; + +import java.util.List; + +/** + * @ClassName AppOcrService + * @Author ma_sh + * @create 2025/1/2 13:50 + */ +public interface AppOcrService { + + /** + * 提交机具出库 + * @param bean + * @return + */ + AjaxResult submitOcrOut(MachineOcrBean bean); + + /** + * 查询机具出库列表 + * @param bean + * @return + */ + List findByPage(MachineOcrBean bean); + + /** + * 根据code查询机具出库列表 + * @param bean + * @return + */ + List findOutListByDeviceCode(MachineOcrBean bean); + + /** + * 根据code查询机具退料列表 + * @param bean + * @return + */ + List findBackListByDeviceCode(MachineOcrBean bean); + + /** + * 提交机具退料 + * @param bean + * @return + */ + AjaxResult submitOcrBack(MachineOcrBean bean); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/service/impl/AppOcrServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/service/impl/AppOcrServiceImpl.java new file mode 100644 index 00000000..9bfcd8ef --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/app/service/impl/AppOcrServiceImpl.java @@ -0,0 +1,250 @@ +package com.bonus.material.app.service.impl; + +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.bonus.common.biz.config.AppOcrConfig; +import com.bonus.common.biz.enums.HttpCodeEnum; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.app.domain.MachineOcrBean; +import com.bonus.material.app.mapper.AppOcrMapper; +import com.bonus.material.app.service.AppOcrService; +import com.bonus.material.ma.domain.Machine; +import com.bonus.material.ma.domain.vo.MachineVo; +import com.bonus.material.ma.mapper.MachineMapper; +import lombok.extern.slf4j.Slf4j; +import org.hibernate.validator.internal.util.StringHelper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName AppOcrServiceImpl + * @Author ma_sh + * @create 2025/1/2 13:50 + */ +@Service +@Slf4j +public class AppOcrServiceImpl implements AppOcrService { + + @Resource + private AppOcrMapper appOcrMapper; + + @Resource + private MachineMapper machineMapper; + + /** + * 提交机具出库 + * @param bean + * @return + */ + @Override + public AjaxResult submitOcrOut(MachineOcrBean bean) { + int res = 0; + try { + String taskId = bean.getTaskId(); + // ---------↓-----bpm_example修改状态发料进行中---↓--------- + //res = updateTaskStatus(bean,taskId); + String maId = bean.getMaId(); + MachineVo ma = machineMapper.selectMachineByMaId(Long.parseLong(maId)); + if (ma != null) { + // ---------↓-----bpm_pick_form修改数据---↓----------------- + //res = updateFormData(bean,taskId,pickId); + + // ---------↓-----ma_machine修改状态---↓----bpm_pick_form_details插入数据--↓------------- + ma.setMaStatus("2"); + res = updateMaStatus(bean, ma, taskId); + + if (res > 0) { + // ---------↓-----ma_machine_type修改库存,在用---↓--------- + res = updateStorageData(bean, taskId); + if (res > 0) { + log.info("maId:" + maId + "出库成功!"); + } else { + throw new RuntimeException("修改ma_machine_type信息失败!"); + } + } else { + throw new RuntimeException("修改ma_machine信息失败!"); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + if (res > 0) { + return AjaxResult.success("出库成功"); + } + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + + /** + * 修改库存数据 + * @param bean + * @param taskId + * @return + */ + private int updateStorageData(MachineOcrBean bean, String taskId) { + bean.setOutNum("1"); + return appOcrMapper.updateStorageData(bean); + } + + /** + * 修改机具状态 + * @param bean + * @param ma + * @param taskId + * @return + */ + private int updateMaStatus(MachineOcrBean bean, MachineVo ma, String taskId) { + Machine machine = new Machine(); + machine.setMaId(Long.parseLong(bean.getMaId())); + machine.setUpdateTime(DateUtils.getNowDate()); + machine.setMaStatus(ma.getMaStatus()); + return machineMapper.updateMachine(machine); + } + + /** + * 查询机具出库列表 + * @param bean + * @return + */ + @Override + public List findByPage(MachineOcrBean bean) { + return appOcrMapper.findByPage(bean); + } + + /** + * 根据code查询机具出库列表 + * @param bean + * @return + */ + @Override + public List findOutListByDeviceCode(MachineOcrBean bean) { + List codeList = appOcrMapper.findListByDeviceCode(bean); + if (CollectionUtils.isNotEmpty(codeList)) { + MachineOcrBean o= new MachineOcrBean(); + o.setModel("出库"); + o.setCode(bean.getMaCode()); + o.setResult("1"); + o.setCreateBy(SecurityUtils.getUsername()); + appOcrMapper.addOcrRecord(o); + return codeList; + } else { + MachineOcrBean o= new MachineOcrBean(); + o.setModel("出库"); + o.setCode(bean.getMaCode()); + o.setResult("0"); + o.setCreateBy(SecurityUtils.getUsername()); + appOcrMapper.addOcrRecord(o); + List rsList = new ArrayList<>(); + String ocrCode = o.getMaCode(); + List stList = appOcrMapper.findCodeList(o); + for(MachineVo m : stList){ + String code = m.getMaCode(); + float rsNum = AppOcrConfig.getSimilarityRatio(ocrCode, code, true); + if(rsNum > 91){ + rsList.add(m); + } + } + if (CollectionUtils.isNotEmpty(rsList)) { + return rsList; + } + } + return null; + } + + /** + * 根据code查询机具退料列表 + * @param bean + * @return + */ + @Override + public List findBackListByDeviceCode(MachineOcrBean bean) { + List codeList = appOcrMapper.findListByDeviceCode(bean); + if (CollectionUtils.isNotEmpty(codeList)) { + MachineOcrBean o= new MachineOcrBean(); + o.setModel("退料"); + o.setCode(bean.getMaCode()); + o.setResult("1"); + o.setCreateBy(SecurityUtils.getUsername()); + appOcrMapper.addOcrRecord(o); + return codeList; + } else { + MachineOcrBean o= new MachineOcrBean(); + o.setModel("退料"); + o.setCode(bean.getMaCode()); + o.setResult("0"); + o.setCreateBy(SecurityUtils.getUsername()); + appOcrMapper.addOcrRecord(o); + List rsList = new ArrayList<>(); + String ocrCode = o.getMaCode(); + List stList = appOcrMapper.findCodeList(o); + for(MachineVo m : stList){ + String code = m.getMaCode(); + float rsNum = AppOcrConfig.getSimilarityRatio(ocrCode, code, true); + if(rsNum > 91){ + rsList.add(m); + } + } + if (CollectionUtils.isNotEmpty(rsList)) { + return rsList; + } + } + return null; + } + + /** + * 提交机具退料 + * @param bean + * @return + */ + @Override + public AjaxResult submitOcrBack(MachineOcrBean bean) { + int res = 0; + try { + String taskId = bean.getTaskId(); + // ---------↓-----bpm_example修改状态发料进行中---↓--------- + //res = updateTaskStatus(bean,taskId); + String maId = bean.getMaId(); + MachineVo ma = machineMapper.selectMachineByMaId(Long.parseLong(maId)); + if (ma != null) { + // ---------↓-----bpm_pick_form修改数据---↓----------------- + //res = updateFormData(bean,taskId,pickId); + + // ---------↓-----ma_machine修改状态---↓----bpm_pick_form_details插入数据--↓------------- + ma.setMaStatus("1"); + res = updateMaStatus(bean, ma, taskId); + + if (res > 0) { + // ---------↓-----ma_machine_type修改库存,在库---↓--------- + res = updateStorageDataBack(bean, taskId); + if (res > 0) { + log.info("maId:" + maId + "出库成功!"); + } else { + throw new RuntimeException("修改ma_machine_type信息失败!"); + } + } else { + throw new RuntimeException("修改ma_machine信息失败!"); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + if (res > 0) { + return AjaxResult.success("退料成功"); + } + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + + /** + * 修改ma_machine_type库存,在库 + * @param bean + * @param taskId + * @return + */ + private int updateStorageDataBack(MachineOcrBean bean, String taskId) { + bean.setBackNum("1"); + return appOcrMapper.updateStorageDataBack(bean); + } +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java index e5753cb6..8884ba25 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/back/service/impl/BackApplyInfoServiceImpl.java @@ -354,8 +354,8 @@ public class BackApplyInfoServiceImpl implements IBackApplyInfoService { details.setApDetection(maCodeDto.getApDetection()); // 插入 CheckDetails result += backApplyInfoMapper.insertCheckDetails(details); - //更新ma_machine表状态为3(退料检修) - //result += machineMapper.updateStatus(maCodeDto.getMaId(), MaMachineStatusEnum.BACK_REPAIR.getStatus()); + //更新ma_machine表状态为11(退料暂存) + result += machineMapper.updateStatus(maCodeDto.getMaId(), MaMachineStatusEnum.RETURNED_MATERIAL.getStatus()); if (CollectionUtils.isNotEmpty(maCodeDto.getBmFileInfos())) { for (BmFileInfo bmFileInfo : maCodeDto.getBmFileInfos()) { bmFileInfo.setCreateBy(SecurityUtils.getUsername()); @@ -737,8 +737,8 @@ public class BackApplyInfoServiceImpl implements IBackApplyInfoService { details.setPreNum(BigDecimal.valueOf(1)); // 插入 CheckDetails result += backApplyInfoMapper.insertCheckDetails(details); - //更新ma_machine表状态为3(退料检修) - //result += machineMapper.updateStatus(details.getMaId(), MaMachineStatusEnum.BACK_REPAIR.getStatus()); + //更新ma_machine表状态为11(退料暂存) + result += machineMapper.updateStatus(details.getMaId(), MaMachineStatusEnum.RETURNED_MATERIAL.getStatus()); if (CollectionUtils.isNotEmpty(details.getBmFileInfos())) { for (BmFileInfo bmFileInfo : details.getBmFileInfos()) { bmFileInfo.setCreateBy(SecurityUtils.getUsername()); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java index eca3bf2e..0a03921b 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrBoxController.java @@ -140,6 +140,16 @@ public class BmQrBoxController extends BaseController { return qrBoxService.getBoxBindListByCode(bmQrBoxInfo); } + /** + * APP -- 修饰入库 -- 扫码获取绑定物资信息 + * @param bmQrBoxInfo + * @return + */ + @GetMapping("/getBoxCodeList") + public AjaxResult getBoxCodeList(@NotNull(message = "参数不能为空") BmQrBoxInfo bmQrBoxInfo) { + return qrBoxService.getBoxCodeList(bmQrBoxInfo); + } + /** * APP -- 新购入库 -- 确认入库标准箱 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java index da8b136a..1d298ce8 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java @@ -101,4 +101,11 @@ public interface BmQrBoxMapper { * @return */ int deleteBoxBind(LeaseOutDetails record); + + /** + * 根据二维码标准箱编码查询绑定详情 + * @param bmQrBoxInfo + * @return + */ + List getBoxCodeList(BmQrBoxInfo bmQrBoxInfo); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java index 8c0b6a75..b5f82c64 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/BmQrBoxService.java @@ -103,4 +103,11 @@ public interface BmQrBoxService { * @return */ AjaxResult getBoxBindListByCode(BmQrBoxInfo bmQrBoxInfo); + + /** + * APP -- 修饰入库 -- 扫码获取绑定物资信息 + * @param bmQrBoxInfo + * @return + */ + AjaxResult getBoxCodeList(BmQrBoxInfo bmQrBoxInfo); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java index 6b799b3f..8800bd98 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java @@ -468,4 +468,17 @@ public class BmQrBoxServiceImpl implements BmQrBoxService { result.put("msg", msg); return AjaxResult.success(result); } + + /** + * APP -- 修饰入库 -- 扫码获取绑定物资信息 + * @param bmQrBoxInfo + * @return + */ + @Override + public AjaxResult getBoxCodeList(BmQrBoxInfo bmQrBoxInfo) { + if (null == bmQrBoxInfo.getBoxCode() || null == bmQrBoxInfo.getMaTypeId()) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "标准箱编码或机具类型id不能为空"); + } + return AjaxResult.success(bmQrBoxMapper.getBoxCodeList(bmQrBoxInfo)); + } } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java index 6ab4e737..872d9ddc 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java @@ -39,6 +39,18 @@ public class ScrapApplyDetails extends BaseEntity { @ApiModelProperty(value = "任务ID") private Long taskId; + @ApiModelProperty(value = "前任务ID") + private Long preTaskId; + + @ApiModelProperty(value = "新任务ID") + private Long newTaskId; + + @ApiModelProperty(value = "协议id") + private Long agreementId; + + @ApiModelProperty(value = "退料id") + private Long backId; + @ApiModelProperty(value = "状态") private String status; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/mapper/ScrapApplyDetailsMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/mapper/ScrapApplyDetailsMapper.java index d8770a49..da082b38 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/mapper/ScrapApplyDetailsMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/mapper/ScrapApplyDetailsMapper.java @@ -74,4 +74,25 @@ public interface ScrapApplyDetailsMapper { * @return */ int updateStatus(ScrapApplyDetails applyDetails); + + /** + * 根据任务id查询上级id + * @param parentId + * @return + */ + Long selectBackIdByTaskId(Long parentId); + + /** + * 修改物资状态 + * @param applyDetails + * @return + */ + int updateMaStatus(ScrapApplyDetails applyDetails); + + /** + * 新增退料 + * @param applyDetails + * @return + */ + int insertRad(ScrapApplyDetails applyDetails); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java index 2ea04e54..f03e4054 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java @@ -1,17 +1,21 @@ package com.bonus.material.scrap.service.impl; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; import com.alibaba.nacos.common.utils.CollectionUtils; -import com.bonus.common.biz.enums.HttpCodeEnum; -import com.bonus.common.biz.enums.RepairInputStatusEnum; -import com.bonus.common.biz.enums.ScrapTaskStatusEnum; +import com.bonus.common.biz.constant.MaterialConstants; +import com.bonus.common.biz.enums.*; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.scrap.domain.vo.ScrapTaskListVo; +import com.bonus.material.task.domain.TmTask; +import com.bonus.material.task.domain.TmTaskAgreement; +import com.bonus.material.task.mapper.TmTaskAgreementMapper; import com.bonus.material.task.mapper.TmTaskMapper; import org.springframework.stereotype.Service; import com.bonus.material.scrap.mapper.ScrapApplyDetailsMapper; @@ -34,6 +38,9 @@ public class ScrapApplyDetailsServiceImpl implements IScrapApplyDetailsService { @Resource private TmTaskMapper taskMapper; + @Resource + private TmTaskAgreementMapper taskAgreementMapper; + /** * 查询报废任务详细 * @@ -206,6 +213,131 @@ public class ScrapApplyDetailsServiceImpl implements IScrapApplyDetailsService { */ @Override public AjaxResult reject(ScrapApplyDetails scrapApplyDetails) { - return null; + // TODO: 报废审核二级页面驳回 + int result = 0; + if (scrapApplyDetails != null) { + if (CollectionUtils.isNotEmpty(scrapApplyDetails.getScrapApplyDetailsList())) { + //插入任务表 + Long newTaskId = insertTt(scrapApplyDetails.getTaskId()); + result += insertTta(newTaskId, scrapApplyDetails); + for (ScrapApplyDetails applyDetails : scrapApplyDetails.getScrapApplyDetailsList()) { + applyDetails.setStatus("2"); + applyDetails.setAuditBy(SecurityUtils.getUserId()); + applyDetails.setAuditTime(DateUtils.getNowDate()); + result = scrapApplyDetailsMapper.updateStatus(applyDetails); + Long backId = scrapApplyDetailsMapper.selectBackIdByTaskId(applyDetails.getParentId()); + applyDetails.setCreateBy(SecurityUtils.getUsername()); + applyDetails.setCreateTime(DateUtils.getNowDate()); + applyDetails.setBackId(backId); + applyDetails.setNewTaskId(newTaskId); + if (applyDetails.getMaId() != null) { + applyDetails.setStatus(MaMachineStatusEnum.BACK_REPAIR.getStatus().toString()); + result += scrapApplyDetailsMapper.updateMaStatus(applyDetails); + } + result += insertWxTask(applyDetails); + } + if (result > 0) { + updateTaskStatus(scrapApplyDetails.getScrapApplyDetailsList().get(0)); + } + // TODO: 报废审核一级页面驳回 + } else if (CollectionUtils.isNotEmpty(scrapApplyDetails.getScrapTaskListVoList())) { + for (ScrapTaskListVo taskListVo : scrapApplyDetails.getScrapTaskListVoList()) { + // 根据任务id 查询任务详情 + ScrapApplyDetails applyDetails = new ScrapApplyDetails(); + applyDetails.setTaskId(taskListVo.getTaskId()); + applyDetails.setAgreementId(taskListVo.getAgreementId()); + //插入任务表 + Long newTaskId = insertTt(taskListVo.getTaskId()); + result += insertTta(newTaskId, applyDetails); + List scrapApplyDetailsList = scrapApplyDetailsMapper.selectRepairQuestListByTaskId(applyDetails); + // 将集合中status为0的筛选出来 + if (CollectionUtils.isNotEmpty(scrapApplyDetailsList)) { + for (ScrapApplyDetails applyDetails1 : scrapApplyDetailsList) { + applyDetails1.setStatus("2"); + applyDetails1.setAuditBy(SecurityUtils.getUserId()); + applyDetails1.setAuditTime(DateUtils.getNowDate()); + result = scrapApplyDetailsMapper.updateStatus(applyDetails1); + if (applyDetails1.getMaId() != null) { + applyDetails.setStatus(MaMachineStatusEnum.BACK_REPAIR.getStatus().toString()); + result += scrapApplyDetailsMapper.updateMaStatus(applyDetails1); + } + Long backId = scrapApplyDetailsMapper.selectBackIdByTaskId(applyDetails1.getParentId()); + applyDetails1.setCreateBy(SecurityUtils.getUsername()); + applyDetails1.setCreateTime(DateUtils.getNowDate()); + applyDetails1.setBackId(backId); + result += insertWxTask(applyDetails1); + } + } + if (result > 0) { + updateTaskStatus(applyDetails); + } + } + } + } + if (result > 0) { + return AjaxResult.success("驳回成功"); + } + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + + /** + * 新增维修单 + * @param applyDetails + * @return + */ + private int insertWxTask(ScrapApplyDetails applyDetails) { + return scrapApplyDetailsMapper.insertRad(applyDetails); + } + + /** + * 驳回后重新生成维修单 插入任务表 + * @return + */ + private Long insertTt(Long preTaskId) { + Long newTask = null; + int thisMonthMaxOrder = taskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_REPAIR.getTaskTypeId()); + // 生成维修单号 + String code = genderWxTaskCode(thisMonthMaxOrder); + TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_REPAIR.getTaskTypeId(), BackTaskStatusEnum.BACK_TASK_NO_FINISHED.getStatus(), + null,thisMonthMaxOrder + 1, code); + tmTask.setCreateTime(DateUtils.getNowDate()); + tmTask.setCreateBy(SecurityUtils.getUsername()); + tmTask.setPreTaskId(preTaskId); + // 插入任务 + int taskId = taskMapper.insertTmTask(tmTask); + // 如果插入成功且返回的 taskId 大于 0 + if (taskId > 0 && tmTask.getTaskId() > 0) { + newTask = tmTask.getTaskId(); + } + return newTask; + } + + /** + * 生成维修单号 + * @param thisMonthMaxOrder + * @return + */ + private String genderWxTaskCode(int thisMonthMaxOrder) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String result = format.replace("-", ""); + return MaterialConstants.REPAIR_TASK_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1); + } + + /** + * 插入协议任务表 + * @param newTaskId + * @param scrapApplyDetails + * @return + */ + private int insertTta(Long newTaskId, ScrapApplyDetails scrapApplyDetails) { + int res; + String agreementId = String.valueOf(scrapApplyDetails.getAgreementId()); + TmTaskAgreement tmTaskAgreement = new TmTaskAgreement(newTaskId, Long.parseLong(agreementId)); + tmTaskAgreement.setCreateTime(DateUtils.getNowDate()); + tmTaskAgreement.setCreateBy(SecurityUtils.getUsername()); + res = taskAgreementMapper.insertTmTaskAgreement(tmTaskAgreement); + return res; } } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/app/AppOcrMapper.xml similarity index 57% rename from bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml rename to bonus-modules/bonus-material/src/main/resources/mapper/material/app/AppOcrMapper.xml index 9ab92627..731bb7ed 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/Archives/ArchivesMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/app/AppOcrMapper.xml @@ -2,7 +2,7 @@ - + + + + + + + insert into archives_record_info @@ -206,6 +340,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + INSERT into ma_ocr_record(model,code,result,create_by,create_time) + values (#{model},#{code},#{result}, #{createBy}, now()) + + update archives_record_info @@ -233,6 +372,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where details_id = #{detailsId} + + UPDATE ma_type + SET storage_num = (IFNULL(storage_num, 0) - #{outNum}) + WHERE type_id = #{typeId} + + + UPDATE ma_type + SET storage_num = (IFNULL(storage_num, 0) + #{backNum}) + WHERE type_id = #{typeId} + + update archives_record_info set del_flag = '1' diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/back/BackApplyInfoMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/back/BackApplyInfoMapper.xml index f2098f75..891a2964 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/back/BackApplyInfoMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/back/BackApplyInfoMapper.xml @@ -119,9 +119,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN bm_agreement_info ba ON tta.agreement_id = ba.agreement_id WHERE 1 = 1 and mm.ma_status = '2' and mm.type_id = #{typeId} - AND mm.ma_id NOT IN (SELECT ma_id from back_check_details WHERE type_id = #{typeId}) AND ba.unit_id = #{unitId} AND ba.project_id = #{proId} + GROUP BY mm.ma_code + + \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml index a9987fd8..adcdc2d1 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml @@ -89,7 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + \ No newline at end of file