From dbf6e64bf49107a663d926cc0088d57085f049ad Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Thu, 18 Dec 2025 16:36:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E9=80=BB=E8=BE=91=20=20?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AE=8C=E6=88=90=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/service/impl/ToErpServiceImpl.java | 3 +- .../api/service/impl/ToWmsServiceImpl.java | 122 +++--- .../service/impl/MydoJobServiceImpl.java | 19 +- .../com/ruoyi/pda/service/PdaServiceImp.java | 11 +- .../controller/InStockinNController.java | 182 ++++++++ .../ruoyi/system/domain/InStockinDetailN.java | 8 +- .../com/ruoyi/system/domain/InStockinN.java | 389 ++++++++++++++++++ .../system/domain/InStockinNQueryRequest.java | 252 ++++++++++++ .../system/mapper/InStockinDetailNMapper.java | 1 + .../service/IInStockinDetailNService.java | 1 + .../system/service/IInStockinNService.java | 79 ++++ .../impl/InStockinDetailNServiceImpl.java | 2 + .../service/impl/InStockinNServiceImpl.java | 204 +++++++++ .../resources/mapper/stock/BasStockMapper.xml | 6 +- .../mapper/system/InStockinDetailNMapper.xml | 8 +- .../mapper/system/InStockinNMapper.xml | 185 +++++++++ ruoyi-ui/src/api/pda/trayMsg.js | 44 ++ ruoyi-ui/src/views/pda/trayMsg/index.vue | 277 +++++++++++++ 18 files changed, 1710 insertions(+), 83 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinN.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNQueryRequest.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNServiceImpl.java create mode 100644 ruoyi-admin/src/main/resources/mapper/system/InStockinNMapper.xml create mode 100644 ruoyi-ui/src/api/pda/trayMsg.js create mode 100644 ruoyi-ui/src/views/pda/trayMsg/index.vue diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java index 393923e..0950239 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToErpServiceImpl.java @@ -795,11 +795,10 @@ public class ToErpServiceImpl implements IToErpService { if (detailRows != null) { for (int i = 0; i < detailRows.size(); i++) { JSONArray d = detailRows.getJSONArray(i); - Long erpDetailId = Convert.toLong(d.get(0)); String stockinDetailId = newStockin.getStockinId() + "-" + (i + 1); InStockinDetailN detail = new InStockinDetailN(); detail.setStockinDetailId(stockinDetailId); - detail.setErpDetailId(erpDetailId); + detail.setErpDetailId(Convert.toInt(d.get(0))); detail.setStockinGuid(newStockin.getStockinGuid()); detail.setStockinId(newStockin.getStockinId()); detail.setProductName(Convert.toStr(d.get(1))); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java index 2c77b4b..2b26248 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java @@ -34,6 +34,8 @@ import com.ruoyi.pda.trayMsg.domain.TrayMsg; import com.ruoyi.pda.trayMsg.service.ITrayMsgService; import com.ruoyi.stock.stock.domain.BasStock; import com.ruoyi.stock.stock.service.IBasStockService; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.service.IInStockinDetailNService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -82,6 +84,10 @@ public class ToWmsServiceImpl implements IToWmsService { private IInStockinService inStockinService; @Autowired private IInStockinDetailService inStockinDetailService; + + @Autowired + private IInStockinDetailNService inStockinDetailNService; + @Autowired private IBasRoadwayService basRoadwayService; @@ -94,85 +100,87 @@ public class ToWmsServiceImpl implements IToWmsService { private IBasStockService basStockService; - @Override @Transactional(rollbackFor = Exception.class) public AjaxResult requestEnterByTrayCode(RequestEnter requestEnter) { - //校验 - 条码空 if (StrUtil.isEmpty(requestEnter.getTrayCode())) { return AjaxResult.error("托盘条码不能为空"); } - MydoJob mydoJob1 = mydoJobService.selectMydoJobByTrayCode(requestEnter.getTrayCode()); - - String productId=""; + if (ObjUtil.isNotNull(mydoJob1) && !"1".equals(mydoJob1.getInOrOut())) { + //空托盘处理 + String productId = "KTP0001"; + String cargoSpaceId = getCargoSpaceByProductInfo(productId); + if (!StringUtils.isNotBlank(cargoSpaceId)) { + return AjaxResult.error("无符合条件的货位用于分配,请检查库存区占用情况,物料号:" + productId); + } + mydoJob1.setCargoSpaceId(cargoSpaceId); + BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); + mydoJob1.setRoadwayId(basCargoSpace.getTheFloor().toString()); + mydoJob1.setStatus("3"); + mydoJobService.insertMydoJob(mydoJob1); + return AjaxResult.success(mydoJob1); + } //校验 - 条码已经有作业 if (ObjUtil.isNotNull(mydoJob1) && "1".equals(mydoJob1.getInOrOut())) { return AjaxResult.error("已存在该条码的入库作业:" + requestEnter.getTrayCode()); } - MydoJob mydoJob = new MydoJob(); - if (ObjUtil.isNull(mydoJob1)) { - //入库分配 20251210 - //根据已绑定条码获取子单物料号 - TrayMsg msg = new TrayMsg(); - msg.setTrayCode(requestEnter.getTrayCode()); - List list = trayMsgService.selectTrayMsgList(msg); - - //校验 - 条码未绑定子单 - if (!CollUtil.isNotEmpty(list)) { - log.info("未找到该托盘【" + requestEnter.getTrayCode() + "】绑定的子单据,请检查绑定列表"); - return AjaxResult.error("该托盘未绑定子单据:" + requestEnter.getTrayCode()); - } - - //获取绑定的子单信息 - InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByStockinDetailId(list.get(0).getStockinDetailId()); - productId=inStockinDetail.getProductId(); - - //返回入库作业参数 - - HashMap map = new HashMap<>(); - map.put("v_param", "RK"); - mydoJobService.getInJobId(map);//存储过程【util_serial_job】生成作业号 - mydoJob.setJobId(map.get("v_serial")); - - mydoJob.setStatus("1"); - mydoJob.setInOrOut("1"); - mydoJob.setTrayCode(requestEnter.getTrayCode()); - map.put("v_param", "1"); - mydoJobService.getInTask(map); - mydoJob.setTaskNo(map.get("v_serial")); - - mydoJob.setCreateTime(new Date()); - mydoJobService.insertMydoJob(mydoJob); - }else if(ObjUtil.isNotNull(mydoJob1) && !"1".equals(mydoJob1.getInOrOut())){ - productId="KTP0001"; - mydoJob=mydoJob1; + TrayMsg msg = new TrayMsg(); + msg.setTrayCode(requestEnter.getTrayCode()); + List list = trayMsgService.selectTrayMsgList(msg); + if (!CollUtil.isNotEmpty(list)) { + log.info("未找到该托盘【{}】绑定的子单据,请检查绑定列表", requestEnter.getTrayCode()); + return AjaxResult.error("该托盘未绑定子单据:" + requestEnter.getTrayCode()); } - //获取货位 - String cargoSpaceId = getCargoSpaceByProductInfo(productId); - + TrayMsg trayMsg =list.get(0); + MydoJob mydoJob = new MydoJob(); + HashMap map = new HashMap<>(); + map.put("v_param", "RK"); + mydoJobService.getInJobId(map);//存储过程【util_serial_job】生成作业号 + mydoJob.setJobId(map.get("v_serial")); + mydoJob.setStatus("1"); + mydoJob.setInOrOut("1"); + mydoJob.setTrayCode(requestEnter.getTrayCode()); + map.put("v_param", "1"); + mydoJobService.getInTask(map); + mydoJob.setTaskNo(map.get("v_serial")); + mydoJob.setCreateTime(new Date()); + String stockinDetailId = trayMsg.getStockinDetailId(); + InStockinDetailN inStockinDetail = inStockinDetailNService.selectInStockinDetailNByStockinDetailId(stockinDetailId); + String cargoSpaceId = getCargoSpaceByProductInfo(inStockinDetail.getProductModel()); //是否有符合条件的货位 if (!StringUtils.isNotBlank(cargoSpaceId)) { - return AjaxResult.error("无符合条件的货位用于分配,请检查库存区占用情况,物料号:" + productId); + return AjaxResult.error("无符合条件的货位用于分配,请检查库存区占用情况,物料号:" + inStockinDetail.getProductModel()); } - mydoJob.setCargoSpaceId(cargoSpaceId); BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); mydoJob.setRoadwayId(basCargoSpace.getTheFloor().toString()); mydoJob.setStatus("3"); - mydoJobService.updateMydoJob(mydoJob); - + mydoJobService.insertMydoJob(mydoJob); + MydoJobDetail mydoJobDetail = new MydoJobDetail(); + mydoJobDetail.setJobDetailId(mydoJob.getJobId() + "-" + 1); + mydoJobDetail.setJobId(mydoJob.getJobId()); + mydoJobDetail.setProductName(inStockinDetail.getProductName()); + mydoJobDetail.setProductId(inStockinDetail.getProductModel()); + mydoJobDetail.setInQuantity(trayMsg.getQuantity()); + mydoJobDetail.setCreateTime(new Date()); + mydoJobDetail.setUnit(inStockinDetail.getUnit()); + mydoJobDetail.setInOrOutDId(stockinDetailId); + mydoJobDetail.setInOrOutId(inStockinDetail.getStockinId()); + mydoJobDetailService.insertMydoJobDetail(mydoJobDetail); return AjaxResult.success(mydoJob); } + /** * requestEnterByTrayCode -> 入库货位分配 * 入库任务请求根据托盘码 -> 向子单明细分配入库货位 * 获取库存物料号 -> 货位id -> 存储区组group -> 状态:未占用 -> 按规则获取货位 + * * @param productId 物料号 * @return */ - public String getCargoSpaceByProductInfo(String productId){ + public String getCargoSpaceByProductInfo(String productId) { //>>>>>>>>>>>>>>获取物料库存信息 -> 有库存 -> 货位(cargospace) -> 存储区组(groupCodingNo) -> 根据groupCoding(由高到低) -> 获取状态1的货位分配 //>>>>>>>>>>>>>>获取物料库存信息 -> 无库存 -> 遍历存储区组(groupCodingNo) -> 查找全部货位空的区组 -> 根据groupCoding(由高到低) -> 获取状态1的货位分配 try { @@ -207,7 +215,7 @@ public class ToWmsServiceImpl implements IToWmsService { List stocksNew = stocks.stream().distinct().collect(Collectors.toList()); //查询对应货位的区域在【BasCargoSpace】是否有空位 - 在groupCodingNo的分组中是否仍然有状态【1】的货位 - for (BasStock stock : stocksNew){ + for (BasStock stock : stocksNew) { //获取每种物料的存放货位信息 BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId()); @@ -218,15 +226,15 @@ public class ToWmsServiceImpl implements IToWmsService { List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceListByGroupCodingNo(group); //在集合中获取状态为【1】的货位 - for (BasCargoSpace cs : cargoSpaces){ + for (BasCargoSpace cs : cargoSpaces) { //货位状态:1(未占用) -> 返回该货位结果 - if ("1".equals(cs.getStatus())){ + if ("1".equals(cs.getStatus())) { return cs.getCargoSpaceId(); } } } - }catch(Exception e){ + } catch (Exception e) { log.error("入库子单获取目标货位失败,异常信息:" + e.getMessage()); } return null; @@ -343,16 +351,16 @@ public class ToWmsServiceImpl implements IToWmsService { param.setTrayCode(requestEnter.getTrayCode()); param.setWarehouseId(requestEnter.getWarehouseId()); List mydoJobs = mydoJobService.selectMydoJobListApi(param); - if (CollUtil.isEmpty(mydoJobs)){ + if (CollUtil.isEmpty(mydoJobs)) { return AjaxResult.error("没有该托盘任务", requestEnter.getTrayCode()); } MydoJob mydoJob = mydoJobs.get(0); - if(StrUtil.isEmpty(mydoJob.getCargoSpaceId())){ + if (StrUtil.isEmpty(mydoJob.getCargoSpaceId())) { BasCargoSpace basCargoSpaceParam = new BasCargoSpace(); basCargoSpaceParam.setWarehouseId(mydoJob.getWarehouseId()); basCargoSpaceParam.setRoadwayId(mydoJob.getRoadwayId()); BasCargoSpace basCargoSpace = basCargoSpaceService.selectEmptyCargoSpaceByWarehouseId(basCargoSpaceParam); - if (ObjUtil.isNull(basCargoSpace)){ + if (ObjUtil.isNull(basCargoSpace)) { return AjaxResult.error("没有空货位"); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java index b6caae1..18b4af9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java @@ -32,6 +32,8 @@ import com.ruoyi.pda.service.PdaService; import com.ruoyi.stock.stock.domain.BasStock; import com.ruoyi.stock.stock.mapper.BasStockMapper; import com.ruoyi.stock.stock.service.IBasStockService; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.service.IInStockinDetailNService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -61,6 +63,8 @@ public class MydoJobServiceImpl implements IMydoJobService { @Autowired private IInStockinDetailService inStockinDetailService; @Autowired + private IInStockinDetailNService inStockinDetailNService; + @Autowired private ICheckStockinDetailService checkStockinDetailService; @Autowired private IBasStockService basStockService; @@ -259,9 +263,8 @@ public class MydoJobServiceImpl implements IMydoJobService { if (mydoJob == null) { return AjaxResult.warn("任务不存在"); } - BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(mydoJob.getWarehouseId()); - if (StrUtil.isEmpty(mydoJob.getCargoSpaceId()) && "1".equals(basWarehouse.getWarehouseType())){ + if (StrUtil.isEmpty(mydoJob.getCargoSpaceId()) ){ return AjaxResult.warn("未分配货位"); } @@ -338,12 +341,10 @@ public class MydoJobServiceImpl implements IMydoJobService { if ("1".equals(mydoJob.getInOrOut()) ) { //修改单据实际数量 String inOrOutDId = mydoJobDetail.getInOrOutDId(); - InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByStockinDetailId(inOrOutDId); - inStockinDetail.setAssignNum(Convert.toStr(Convert.toBigDecimal(inStockinDetail.getAssignNum()).add(Convert.toBigDecimal(mydoJobDetail.getInQuantity())))); - inStockinDetailService.updateInStockinDetail(inStockinDetail); + InStockinDetailN inStockinDetail = inStockinDetailNService.selectInStockinDetailNByStockinDetailId(inOrOutDId); + inStockinDetail.setFinishNum(Convert.toBigDecimal(inStockinDetail.getFinishNum()).add(Convert.toBigDecimal(mydoJobDetail.getInQuantity()))); + inStockinDetailNService.updateInStockinDetailN(inStockinDetail); } - - //} //正常库存 BasStock stockByInStockinDetail = getStockByInStockinDetail(mydoJobDetail, mydoJob, "1"); stockByInStockinDetail.setSpare7("0"); @@ -354,16 +355,13 @@ public class MydoJobServiceImpl implements IMydoJobService { list.add(stockByInStockinDetail); } - //修改货位状态 basCargoSpace.setStatus("2"); basCargoSpace.setTrayCode(mydoJob.getTrayCode()); basCargoSpace.setCargoSpaceId(mydoJob.getCargoSpaceId()); basCargoSpaceService.updateBasCargoSpace(basCargoSpace); - //插入库存信息 basStockService.insertBasStockList(list); - //结束任务 mydoJob.setStatus("4"); mydoJob.setFinishTime(DateUtil.formatDateTime(DateUtil.date())); @@ -425,7 +423,6 @@ public class MydoJobServiceImpl implements IMydoJobService { stock.setStockinId(mydoJobDetail.getInOrOutId()); stock.setStockinDetailId(mydoJobDetail.getInOrOutDId()); stock.setInType(mydoJob.getInOrOut()); - stock.setLotNo(mydoJobDetail.getLotNo()); stock.setProductName(mydoJobDetail.getProductName()); stock.setSpare1(mydoJobDetail.getSpare1()); stock.setSpare3(mydoJobDetail.getSpare3()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java index ddfdaaa..15e8ac4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java @@ -23,6 +23,8 @@ import com.ruoyi.pda.trayMsg.domain.TrayMsg; import com.ruoyi.pda.trayMsg.service.ITrayMsgService; import com.ruoyi.stock.stock.domain.BasStock; import com.ruoyi.stock.stock.mapper.BasStockMapper; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.service.IInStockinDetailNService; import com.ruoyi.system.service.ISysRoleService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -42,6 +44,8 @@ public class PdaServiceImp implements PdaService { @Autowired IInStockinDetailService inStockinDetailService; @Autowired + IInStockinDetailNService inStockinDetailNService; + @Autowired ITrayMsgService trayMsgService; @Autowired private ICheckCommitRecordService checkCommitRecordService; @@ -205,9 +209,10 @@ public class PdaServiceImp implements PdaService { @Override public AjaxResult selectStockinDetail(String stockinDetailId) { - InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByStockinDetailId(stockinDetailId); - int i = Integer.parseInt(inStockinDetail.getQuantity()) - Integer.parseInt(inStockinDetail.getScanNum()); - inStockinDetail.setQuantityX(String.valueOf(i)); + InStockinDetailN inStockinDetail = inStockinDetailNService.selectInStockinDetailNByStockinDetailId(stockinDetailId); + java.math.BigDecimal quantity = inStockinDetail.getQuantity() == null ? java.math.BigDecimal.ZERO : inStockinDetail.getQuantity(); + java.math.BigDecimal smNum = inStockinDetail.getSmNum() == null ? java.math.BigDecimal.ZERO : inStockinDetail.getSmNum(); + inStockinDetail.setFinishNum(quantity.subtract(smNum)); return AjaxResult.success(inStockinDetail); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNController.java new file mode 100644 index 0000000..0678be4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/InStockinNController.java @@ -0,0 +1,182 @@ +package com.ruoyi.system.controller; + +import java.util.List; + +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.domain.InStockinNFinish; +import com.ruoyi.system.service.IInStockinNFinishService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.BeanUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.InStockinN; +import com.ruoyi.system.service.IInStockinNService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 入库单据管理Controller + * + * @author zgw + * @date 2025-12-16 + */ +@RestController +@RequestMapping("/system/inStockIn") +public class InStockinNController extends BaseController +{ + @Autowired + private IInStockinNService inStockinNService; + + @Autowired + private IInStockinNFinishService inStockinNFinishService; + + + + + @PreAuthorize("@ss.hasPermi('system:inStockIn:list')") + @GetMapping("/listAll") + public TableDataInfo listAll(InStockinN inStockinN) + { + if (inStockinN.getStatus()>3){ + return listFinish(inStockinN); + }else { + return list(inStockinN); + } + } + + /** + * 查询入库单据管理列表 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:list')") + @GetMapping("/list") + public TableDataInfo list(InStockinN inStockinN) + { + startPage(); + List list = inStockinNService.selectInStockinNList(inStockinN); + return getDataTable(list); + } + + public TableDataInfo listFinish(InStockinN inStockinN) + { + InStockinNFinish inStockinNFinish = new InStockinNFinish(); + BeanUtils.copyProperties(inStockinN, inStockinNFinish); + startPage(); + List list = inStockinNFinishService.selectInStockinNFinishList(inStockinNFinish); + return getDataTable(list); + } + + /** + * 导出入库单据管理列表 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:export')") + @Log(title = "入库单据管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, InStockinN inStockinN) + { + List list = inStockinNService.selectInStockinNList(inStockinN); + ExcelUtil util = new ExcelUtil(InStockinN.class); + util.exportExcel(response, list, "入库单据管理数据"); + } + + /** + * 获取入库单据管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:query')") + @GetMapping(value = "/{stockinGuid}") + public AjaxResult getInfo(@PathVariable("stockinGuid") String stockinGuid) + { + final InStockinN inStockinN = inStockinNService.selectInStockinNByStockinGuid(stockinGuid); + if (inStockinN==null){ + final InStockinNFinish inStockinNFinish = inStockinNFinishService.selectInStockinNFinishByStockinGuid(stockinGuid); + return success(inStockinNFinish); + } + return success(inStockinN); + } + + /** + * 新增入库单据管理 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:add')") + @Log(title = "入库单据管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody InStockinN inStockinN) + { + return toAjax(inStockinNService.insertInStockinN(inStockinN)); + } + + /** + * 新增入库单据 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:add')") + @Log(title = "入库单据管理", businessType = BusinessType.INSERT) + @RequestMapping("/addOrder") + public AjaxResult addOrder(@RequestBody InStockinN inStockinN) + { + return inStockinNService.insertInStockinNAndDetail(inStockinN, inStockinN.getInStockinDetailNList()); + } + + /** + * 修改入库单据管理 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:edit')") + @Log(title = "入库单据管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody InStockinN inStockinN) + { + return toAjax(inStockinNService.updateInStockinN(inStockinN)); + } + + /** + * 删除入库单据管理 --单据作废 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:remove')") + @Log(title = "入库单据管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockinGuids}") + public AjaxResult remove(@PathVariable String[] stockinGuids) + { + return toAjax(inStockinNService.deleteInStockinNByStockinGuids(stockinGuids)); + } + /** + * 单据作废 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:voided')") + @Log(title = "入库单据管理", businessType = BusinessType.DELETE) + @RequestMapping("/voided/{stockinGuids}") + public AjaxResult voided(@PathVariable String[] stockinGuids) + { + return inStockinNService.voidedInStockinNByStockinGuids(stockinGuids); + } + /** + * 单据确认 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:sure')") + @Log(title = "入库单据管理", businessType = BusinessType.DELETE) + @RequestMapping("/sure/{stockinGuids}") + public AjaxResult sure(@PathVariable String[] stockinGuids) + { + return inStockinNService.sureInStockinNByStockinGuids(stockinGuids); + } + + /** + * 单据审核 状态由0→1 + */ + @PreAuthorize("@ss.hasPermi('system:inStockIn:rvw')") + @Log(title = "入库单据管理", businessType = BusinessType.UPDATE) + @RequestMapping("/rvw/{stockinGuids}") + public AjaxResult rvw(@PathVariable String[] stockinGuids) + { + return toAjax(inStockinNService.rvw(stockinGuids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java index 4ac8b69..3fdd355 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinDetailN.java @@ -21,7 +21,7 @@ public class InStockinDetailN extends BaseEntity /** $column.columnComment */ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") - private Long erpDetailId; + private int erpDetailId; /** $column.columnComment */ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") @@ -158,17 +158,17 @@ public class InStockinDetailN extends BaseEntity /** $column.columnComment */ private String stockinDetailId; - public void setErpDetailId(Long erpDetailId) + public void setErpDetailId(int erpDetailId) { this.erpDetailId = erpDetailId; } - public Long getErpDetailId() + public int getErpDetailId() { return erpDetailId; } - public void setStockinGuid(String stockinGuid) + public void setStockinGuid(String stockinGuid) { this.stockinGuid = stockinGuid; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinN.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinN.java new file mode 100644 index 0000000..ffc2c4c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinN.java @@ -0,0 +1,389 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 入库单据管理对象 in_stockin_n + * + * @author zgw + * @date 2025-12-16 + */ +public class InStockinN extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** GUID(防止重复) */ + private String stockinGuid; + + /** 入库单据编号 */ + @Excel(name = "入库单据编号") + private String stockinId; + + /** 入库主题 */ + @Excel(name = "入库主题") + private String subject; + + /** 入库id(内部或外部流水ID) */ + @Excel(name = "入库id", readConverterExp = "内=部或外部流水ID") + private String erpStockinId; + + /** 入库状态(0-草稿,1-待确认,2-已确认,3-已入库等) */ + @Excel(name = "入库状态", readConverterExp = "0=-草稿,1-待确认,2-已确认,3-已入库等") + private int status; + + /** 单据数量 */ + @Excel(name = "单据数量") + private java.math.BigDecimal orderNum; + + /** 完成数量 */ + @Excel(name = "完成数量") + private java.math.BigDecimal finishNum; + + /** 申请人 */ + @Excel(name = "申请人") + private String applicant; + + /** 申请日期 */ + @Excel(name = "申请日期") + private String applyDate; + + /** 确认日期 */ + @Excel(name = "确认日期") + private String confirmDate; + + /** 审批人 */ + @Excel(name = "审批人") + private String approver; + + /** 审批意见 */ + @Excel(name = "审批意见") + private String approvalComment; + + /** 关联其他单据id */ + @Excel(name = "关联其他单据id") + private String relatedDocId; + + /** 添加时间(记录插入时间) */ + @Excel(name = "添加时间", readConverterExp = "记=录插入时间") + private String createdAt; + + /** 库管id(用户ID或职员ID) */ + @Excel(name = "库管id", readConverterExp = "用=户ID或职员ID") + private Long keeperId; + + /** 入库类别 */ + @Excel(name = "入库类别") + private String category; + + /** 入库编号(流水或业务编号) */ + @Excel(name = "入库编号", readConverterExp = "流=水或业务编号") + private String entryCode; + + /** 审批状态(0-未审批,1-通过,2-驳回) */ + @Excel(name = "审批状态", readConverterExp = "0=-未审批,1-通过,2-驳回") + private Long approvalStatus; + + /** 产品明细(建议存JSON或文本) */ + @Excel(name = "产品明细", readConverterExp = "建=议存JSON或文本") + private String productDetails; + + /** 客户名称 */ + @Excel(name = "客户名称") + private String customerName; + + /** 磅单编号 */ + @Excel(name = "磅单编号") + private String weighbillNo; + + /** 入库车号 */ + @Excel(name = "入库车号") + private String vehicleNo; + + /** ERP单据状态 */ + @Excel(name = "ERP单据状态") + private String erpStatus; + + @Excel(name = "ERP单据来源") + private String orderSrc; + + /** 子单列表 */ + private java.util.List inStockinDetailNList; + + public void setStockinGuid(String stockinGuid) + { + this.stockinGuid = stockinGuid; + } + + public String getStockinGuid() + { + return stockinGuid; + } + + public void setStockinId(String stockinId) + { + this.stockinId = stockinId; + } + + public String getStockinId() + { + return stockinId; + } + + public void setSubject(String subject) + { + this.subject = subject; + } + + public String getSubject() + { + return subject; + } + + public void setErpStockinId(String erpStockinId) + { + this.erpStockinId = erpStockinId; + } + + public String getErpStockinId() + { + return erpStockinId; + } + + public void setStatus(Integer status) + { + this.status = status; + } + + public int getStatus() + { + return status; + } + + public void setApplicant(String applicant) + { + this.applicant = applicant; + } + + public String getApplicant() + { + return applicant; + } + + public void setApplyDate(String applyDate) + { + this.applyDate = applyDate; + } + + public String getApplyDate() + { + return applyDate; + } + + public void setConfirmDate(String confirmDate) + { + this.confirmDate = confirmDate; + } + + public String getConfirmDate() + { + return confirmDate; + } + + public void setApprover(String approver) + { + this.approver = approver; + } + + public String getApprover() + { + return approver; + } + + public void setApprovalComment(String approvalComment) + { + this.approvalComment = approvalComment; + } + + public String getApprovalComment() + { + return approvalComment; + } + + public void setRelatedDocId(String relatedDocId) + { + this.relatedDocId = relatedDocId; + } + + public String getRelatedDocId() + { + return relatedDocId; + } + + public void setCreatedAt(String createdAt) + { + this.createdAt = createdAt; + } + + public String getCreatedAt() + { + return createdAt; + } + + public void setKeeperId(Long keeperId) + { + this.keeperId = keeperId; + } + + public Long getKeeperId() + { + return keeperId; + } + + public void setCategory(String category) + { + this.category = category; + } + + public String getCategory() + { + return category; + } + + public void setEntryCode(String entryCode) + { + this.entryCode = entryCode; + } + + public String getEntryCode() + { + return entryCode; + } + + public void setApprovalStatus(Long approvalStatus) + { + this.approvalStatus = approvalStatus; + } + + public Long getApprovalStatus() + { + return approvalStatus; + } + + public void setProductDetails(String productDetails) + { + this.productDetails = productDetails; + } + + public String getProductDetails() + { + return productDetails; + } + + public void setCustomerName(String customerName) + { + this.customerName = customerName; + } + + public String getCustomerName() + { + return customerName; + } + + public void setWeighbillNo(String weighbillNo) + { + this.weighbillNo = weighbillNo; + } + + public String getWeighbillNo() + { + return weighbillNo; + } + + public void setVehicleNo(String vehicleNo) + { + this.vehicleNo = vehicleNo; + } + + public String getVehicleNo() + { + return vehicleNo; + } + + public void setErpStatus(String erpStatus) + { + this.erpStatus = erpStatus; + } + + public String getErpStatus() + { + return erpStatus; + } + + public java.math.BigDecimal getOrderNum() { + return orderNum; + } + + public void setOrderNum(java.math.BigDecimal orderNum) { + this.orderNum = orderNum; + } + + public java.math.BigDecimal getFinishNum() { + return finishNum; + } + + public void setFinishNum(java.math.BigDecimal finishNum) { + this.finishNum = finishNum; + } + + + public void setOrderSrc(String orderSrc) { + this.orderSrc = orderSrc; + } + + public String getOrderSrc() { + return orderSrc; + } + + public java.util.List getInStockinDetailNList() { + return inStockinDetailNList; + } + + public void setInStockinDetailNList(java.util.List inStockinDetailNList) { + this.inStockinDetailNList = inStockinDetailNList; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("stockinGuid", getStockinGuid()) + .append("stockinId", getStockinId()) + .append("subject", getSubject()) + .append("erpStockinId", getErpStockinId()) + .append("status", getStatus()) + .append("orderNum", getOrderNum()) + .append("finishNum", getFinishNum()) + .append("applicant", getApplicant()) + .append("applyDate", getApplyDate()) + .append("confirmDate", getConfirmDate()) + .append("approver", getApprover()) + .append("approvalComment", getApprovalComment()) + .append("remark", getRemark()) + .append("relatedDocId", getRelatedDocId()) + .append("createdAt", getCreatedAt()) + .append("keeperId", getKeeperId()) + .append("category", getCategory()) + .append("entryCode", getEntryCode()) + .append("approvalStatus", getApprovalStatus()) + .append("productDetails", getProductDetails()) + .append("customerName", getCustomerName()) + .append("weighbillNo", getWeighbillNo()) + .append("vehicleNo", getVehicleNo()) + .append("erpStatus", getErpStatus()) + .toString(); + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNQueryRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNQueryRequest.java new file mode 100644 index 0000000..af1973c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/InStockinNQueryRequest.java @@ -0,0 +1,252 @@ +package com.ruoyi.system.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 入库单据查询请求实体 + *

+ * 用于接收前端查询入库单据的过滤条件与分页参数。 + * 字段命名通过 {@link JsonProperty} 与前端 JSON 键名保持一致,内部使用更符合 Java 的驼峰命名。 + * 说明:日期字段使用字符串类型以兼容各种格式,服务层可按需解析为时间类型。 + */ +public class InStockinNQueryRequest { + /** + * 申请开始时间,对应 JSON: "Date3_start" + * 示例:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("Date3_start") + private String date3Start = ""; + + /** + * 申请结束时间,对应 JSON: "Date3_end" + * 示例:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("Date3_end") + private String date3End = ""; + + /** + * 确认开始时间,对应 JSON: "Date5_start" + * 示例:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("Date5_start") + private String date5Start = ""; + + /** + * 确认结束时间,对应 JSON: "Date5_end" + * 示例:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("Date5_end") + private String date5End = ""; + + /** + * 入库类别(数值),对应 JSON: "Sort1" + * 例如:0-默认类别 等 + */ + @JsonProperty("Sort1") + private Integer sort1; + + /** + * 入库状态(数值),对应 JSON: "Complete1" + * 例如:3-已入库 等 + */ + @JsonProperty("Complete1") + private Integer complete1; + + /** + * 入库主题(文本),对应 JSON: "Title" + */ + @JsonProperty("Title") + private String title = ""; + + /** + * 入库编号(文本),对应 JSON: "Rkbh" + */ + @JsonProperty("Rkbh") + private String rkbh = ""; + + /** + * 产品名称(文本),对应 JSON: "CPTitle" + */ + @JsonProperty("CPTitle") + private String cpTitle = ""; + + /** + * 产品编号(文本),对应 JSON: "Order1" + */ + @JsonProperty("Order1") + private String order1 = ""; + + /** + * 申请人员(文本),对应 JSON: "Cateid" + */ + @JsonProperty("Cateid") + private String cateid = ""; + + /** + * 库管人员(文本),对应 JSON: "Kg" + */ + @JsonProperty("Kg") + private String kg = ""; + + /** + * 是否返回明细信息(0/1),对应 JSON: "needList" + */ + @JsonProperty("needList") + private Integer needList; + + /** + * 每页返回数据行数(分页),对应 JSON: "page_size" + */ + @JsonProperty("page_size") + private Integer pageSize; + + /** + * 从第几页开始返回(分页),对应 JSON: "page_index" + */ + @JsonProperty("page_index") + private Integer pageIndex; + + public String getDate3Start() { + return date3Start; + } + + public void setDate3Start(String date3Start) { + this.date3Start = date3Start; + } + + public String getDate3End() { + return date3End; + } + + public void setDate3End(String date3End) { + this.date3End = date3End; + } + + public String getDate5Start() { + return date5Start; + } + + public void setDate5Start(String date5Start) { + this.date5Start = date5Start; + } + + public String getDate5End() { + return date5End; + } + + public void setDate5End(String date5End) { + this.date5End = date5End; + } + + public Integer getSort1() { + return sort1; + } + + public void setSort1(Integer sort1) { + this.sort1 = sort1; + } + + public Integer getComplete1() { + return complete1; + } + + public void setComplete1(Integer complete1) { + this.complete1 = complete1; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getRkbh() { + return rkbh; + } + + public void setRkbh(String rkbh) { + this.rkbh = rkbh; + } + + public String getCpTitle() { + return cpTitle; + } + + public void setCpTitle(String cpTitle) { + this.cpTitle = cpTitle; + } + + public String getOrder1() { + return order1; + } + + public void setOrder1(String order1) { + this.order1 = order1; + } + + public String getCateid() { + return cateid; + } + + public void setCateid(String cateid) { + this.cateid = cateid; + } + + public String getKg() { + return kg; + } + + public void setKg(String kg) { + this.kg = kg; + } + + public Integer getNeedList() { + return needList; + } + + public void setNeedList(Integer needList) { + this.needList = needList; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Integer getPageIndex() { + return pageIndex; + } + + public void setPageIndex(Integer pageIndex) { + this.pageIndex = pageIndex; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("date3Start", date3Start) + .append("date3End", date3End) + .append("date5Start", date5Start) + .append("date5End", date5End) + .append("sort1", sort1) + .append("complete1", complete1) + .append("title", title) + .append("rkbh", rkbh) + .append("cpTitle", cpTitle) + .append("order1", order1) + .append("cateid", cateid) + .append("kg", kg) + .append("needList", needList) + .append("pageSize", pageSize) + .append("pageIndex", pageIndex) + .toString(); + } +} + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java index 48c326b..8911ef1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/InStockinDetailNMapper.java @@ -61,4 +61,5 @@ public interface InStockinDetailNMapper public int deleteInStockinDetailNByStockinDetailIds(String[] stockinDetailIds); void deleteByStockInId(@Param("stockinId") String stockinId); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java index 676d82b..3982b20 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinDetailNService.java @@ -58,4 +58,5 @@ public interface IInStockinDetailNService * @return 结果 */ public int deleteInStockinDetailNByStockinDetailId(String stockinDetailId); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNService.java new file mode 100644 index 0000000..ff4f751 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IInStockinNService.java @@ -0,0 +1,79 @@ +package com.ruoyi.system.service; + +import java.util.List; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.domain.InStockinN; + +/** + * 入库单据管理Service接口 + * + * @author zgw + * @date 2025-12-16 + */ +public interface IInStockinNService +{ + /** + * 查询入库单据管理 + * + * @param stockinGuid 入库单据管理主键 + * @return 入库单据管理 + */ + public InStockinN selectInStockinNByStockinGuid(String stockinGuid); + + /** + * 查询入库单据管理列表 + * + * @param inStockinN 入库单据管理 + * @return 入库单据管理集合 + */ + public List selectInStockinNList(InStockinN inStockinN); + + /** + * 新增入库单据管理 + * + * @param inStockinN 入库单据管理 + * @return 结果 + */ + public int insertInStockinN(InStockinN inStockinN); + + /** + * 修改入库单据管理 + * + * @param inStockinN 入库单据管理 + * @return 结果 + */ + public int updateInStockinN(InStockinN inStockinN); + + /** + * 批量删除入库单据管理 + * + * @param stockinGuids 需要删除的入库单据管理主键集合 + * @return 结果 + */ + public int deleteInStockinNByStockinGuids(String[] stockinGuids); + + /** + * 删除入库单据管理信息 + * + * @param stockinGuid 入库单据管理主键 + * @return 结果 + */ + public int deleteInStockinNByStockinGuid(String stockinGuid); + /** + * 根据入库编号和日期查询 + * @param stockinId + * @param date + * @return + */ + public InStockinN selectInStockinNByStockinIdAndDate(String stockinId, String date); + + int rvw(String[] stockinGuids); + + AjaxResult voidedInStockinNByStockinGuids(String[] stockinGuids); + + AjaxResult sureInStockinNByStockinGuids(String[] stockinGuids); + + AjaxResult insertInStockinNAndDetail(InStockinN inStockinN, List inStockinDetailNS); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java index bca9da0..502d36a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinDetailNServiceImpl.java @@ -93,4 +93,6 @@ public class InStockinDetailNServiceImpl implements IInStockinDetailNService { return inStockinDetailNMapper.deleteInStockinDetailNByStockinDetailId(stockinDetailId); } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNServiceImpl.java new file mode 100644 index 0000000..3357d79 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/InStockinNServiceImpl.java @@ -0,0 +1,204 @@ +package com.ruoyi.system.service.impl; + +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONUtil; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.system.domain.InStockinDetailN; +import com.ruoyi.system.domain.InStockinNFinish; +import com.ruoyi.system.mapper.InStockinDetailNFinishMapper; +import com.ruoyi.system.mapper.InStockinDetailNMapper; +import com.ruoyi.system.mapper.InStockinNFinishMapper; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.InStockinNMapper; +import com.ruoyi.system.domain.InStockinN; +import com.ruoyi.system.service.IInStockinNService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 入库单据管理Service业务层处理 + * + * @author zgw + * @date 2025-12-16 + */ +@Service +public class InStockinNServiceImpl implements IInStockinNService { + @Autowired + private InStockinNMapper inStockinNMapper; + @Autowired + private InStockinNFinishMapper inStockinNFinishMapper; + @Autowired + private InStockinDetailNMapper inStockinDetailNMapper; + @Autowired + private InStockinDetailNFinishMapper inStockinDetailNFinishMapper; + + + /** + * 查询入库单据管理 + * + * @param stockinGuid 入库单据管理主键 + * @return 入库单据管理 + */ + @Override + public InStockinN selectInStockinNByStockinGuid(String stockinGuid) { + return inStockinNMapper.selectInStockinNByStockinGuid(stockinGuid); + + } + + @Override + public InStockinN selectInStockinNByStockinIdAndDate(String stockinId, String date) { + return inStockinNMapper.selectInStockinNByStockinIdAndDate(stockinId, date); + } + + @Override + public int rvw(String[] stockinGuids) { + int updateNum = 0; + for (String stockinGuid : stockinGuids) { + InStockinN inStockinN = inStockinNMapper.selectInStockinNByStockinGuid(stockinGuid); + if (inStockinN.getStatus() == 1) { + inStockinN.setStatus(2); + } + updateNum += inStockinNMapper.updateInStockinN(inStockinN); + } + return updateNum > 0 ? 1 : 0; + } + + @Override + @Transactional + public AjaxResult voidedInStockinNByStockinGuids(String[] stockinGuids) { + for (String stockinGuid : stockinGuids) { + InStockinN inStockinN = inStockinNMapper.selectInStockinNByStockinGuid(stockinGuid); + //未执行可以作废 + if (inStockinN.getStatus() == 1) { + inStockinN.setStatus(4); + InStockinNFinish inStockinNFinish = new InStockinNFinish(); + BeanUtils.copyProperties(inStockinN, inStockinNFinish); + inStockinNFinish.setDeleteTime(DateUtil.now()); + inStockinNFinishMapper.insertInStockinNFinish(inStockinNFinish); + inStockinNMapper.deleteInStockinNByStockinGuid(stockinGuid); + //处理子单信息 + inStockinDetailNFinishMapper.insertByStockInId(inStockinN.getStockinId()); + inStockinDetailNMapper.deleteByStockInId(inStockinN.getStockinId()); + } + } + return AjaxResult.success(); + } + + + @Override + public AjaxResult sureInStockinNByStockinGuids(String[] stockinGuids) { + for (String stockinGuid : stockinGuids) { + InStockinN inStockinN = inStockinNMapper.selectInStockinNByStockinGuid(stockinGuid); + //未执行可以作废 + inStockinN.setStatus(5); + InStockinNFinish inStockinNFinish = new InStockinNFinish(); + if (inStockinN.getStatus() == 3) { + BeanUtils.copyProperties(inStockinN, inStockinNFinish); + inStockinNFinish.setDeleteTime(DateUtil.now()); + inStockinNFinishMapper.insertInStockinNFinish(inStockinNFinish); + inStockinNMapper.deleteInStockinNByStockinGuids(stockinGuids); + //处理子单信息 + inStockinDetailNFinishMapper.insertByStockInId(inStockinN.getStockinId()); + inStockinDetailNMapper.deleteByStockInId(inStockinN.getStockinId()); + } + } + return AjaxResult.success(); + } + + @Override + public AjaxResult insertInStockinNAndDetail(InStockinN inStockinN, List inStockinDetailNS) { + String stockinGuid = UUID.randomUUID().toString(); + inStockinN.setStockinGuid(stockinGuid); + java.math.BigDecimal orderSum = new java.math.BigDecimal("0"); + for (int i = 0; i < inStockinDetailNS.size(); i++) { + InStockinDetailN inStockinDetailN = inStockinDetailNS.get(i); + inStockinDetailN.setStockinGuid(inStockinN.getStockinGuid()); + String stockinDetailId = inStockinN.getStockinId() + "-" + (i + 1); + inStockinDetailN.setStockinId(inStockinN.getStockinId()); + inStockinDetailN.setStockinDetailId(stockinDetailId); + orderSum=orderSum.add(inStockinDetailN.getInQuantity()); + inStockinDetailNMapper.insertInStockinDetailN(inStockinDetailN); + } + inStockinNMapper.insertInStockinN(inStockinN); + return AjaxResult.success(); + } + + + /** + * 查询入库单据管理列表 + * + * @param inStockinN 入库单据管理 + * @return 入库单据管理 + */ + @Override + public List selectInStockinNList(InStockinN inStockinN) { + return inStockinNMapper.selectInStockinNList(inStockinN); + } + + /** + * 新增入库单据管理 + * + * @param inStockinN 入库单据管理 + * @return 结果 + */ + @Override + public int insertInStockinN(InStockinN inStockinN) { + return inStockinNMapper.insertInStockinN(inStockinN); + } + + /** + * 修改入库单据管理 + * + * @param inStockinN 入库单据管理 + * @return 结果 + */ + @Override + public int updateInStockinN(InStockinN inStockinN) { + return inStockinNMapper.updateInStockinN(inStockinN); + } + + /** + * 批量删除入库单据管理 + * + * @param stockinGuids 需要删除的入库单据管理主键 + * @return 结果 + */ + @Override + @Transactional + public int deleteInStockinNByStockinGuids(String[] stockinGuids) { + try { + for (String stockinGuid : stockinGuids) { + InStockinN inStockinN = inStockinNMapper.selectInStockinNByStockinGuid(stockinGuid); + inStockinN.setStatus(10); + InStockinNFinish inStockinNFinish = new InStockinNFinish(); + BeanUtils.copyProperties(inStockinN,inStockinNFinish); + inStockinNFinish.setDeleteTime(DateUtil.now()); + inStockinNFinishMapper.insertInStockinNFinish(inStockinNFinish); + inStockinNMapper.deleteInStockinNByStockinGuid(stockinGuid); + inStockinDetailNFinishMapper.insertByStockInId(inStockinN.getStockinId()); + inStockinDetailNMapper.deleteByStockInId(inStockinN.getStockinId()); + } + return 1; + } catch (BeansException e) { + return 0; + } + } + + /** + * 删除入库单据管理信息 + * + * @param stockinGuid 入库单据管理主键 + * @return 结果 + */ + @Override + public int deleteInStockinNByStockinGuid(String stockinGuid) { + return inStockinNMapper.deleteInStockinNByStockinGuid(stockinGuid); + } +} diff --git a/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml b/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml index 8f2eb4f..62d9745 100644 --- a/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/stock/BasStockMapper.xml @@ -488,9 +488,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" pd_detail_id,pd_product_name,pd_model,pd_unit,pd_unit_price,pd_aux_unit,pd_attr1,pd_attr2,pd_quantity,pd_in_qty,pd_aux_quantity,pd_total_price,pd_cost_unit_price,pd_total_price_2,pd_account_cost_total,pd_account_quantity,pd_account_status,pd_batch_no,pd_serial_no,pd_prod_date,pd_valid_date,pd_arrival_date,pd_remark,pd_custom1,pd_custom2,pd_custom3,pd_custom4,pd_custom5,pd_custom6,pd_loader) VALUES - (#{item.stockId},#{item.cargoSpaceId},#{item.stockStatus},#{item.productStatus},#{item.lotNo},#{item.inDate},#{item.backDate},#{item.productGuid},#{item.quantity},#{item.jobId},#{item.trayCode},#{item.outQuantity},#{item.stockinDetailId},#{item.stockinId},#{item.inType},#{item.inClassId},#{item.warehouseId},#{item.productId} - ,#{item.productName},/*#{item.voltage},#{item.netWeight},#{item.grossWeight},#{item.distribution},*/#{item.orderId}, - #{item.pdDetailId},#{item.pdProductName},#{item.pdModel},#{item.pdUnit},#{item.pdUnitPrice},#{item.pdAuxUnit},#{item.pdAttr1},#{item.pdAttr2},#{item.pdQuantity},#{item.pdInQty},#{item.pdAuxQuantity},#{item.pdTotalPrice},#{item.pdCostUnitPrice},#{item.pdTotalPrice2},#{item.pdAccountCostTotal},#{item.pdAccountQuantity},#{item.pdAccountStatus},#{item.pdBatchNo},#{item.pdSerialNo},#{item.pdProdDate},#{item.pdValidDate},#{item.pdArrivalDate},#{item.pdRemark},#{item.pdCustom1},#{item.pdCustom2},#{item.pdCustom3},#{item.pdCustom4},#{item.pdCustom5},#{item.pdCustom6},#{item.pdLoader}) + (#{item.stockId},#{item.cargoSpaceId},#{item.stockStatus},#{item.productStatus},#{item.lotNo},#{item.inDate, jdbcType=VARCHAR},#{item.backDate, jdbcType=VARCHAR},#{item.productGuid},#{item.quantity},#{item.jobId},#{item.trayCode},#{item.outQuantity},#{item.stockinDetailId},#{item.stockinId},#{item.inType},#{item.inClassId},#{item.warehouseId},#{item.productId} + ,#{item.productName},#{item.orderId}, + #{item.pdDetailId},#{item.pdProductName},#{item.pdModel},#{item.pdUnit},#{item.pdUnitPrice},#{item.pdAuxUnit},#{item.pdAttr1},#{item.pdAttr2},#{item.pdQuantity},#{item.pdInQty},#{item.pdAuxQuantity},#{item.pdTotalPrice},#{item.pdCostUnitPrice},#{item.pdTotalPrice2},#{item.pdAccountCostTotal},#{item.pdAccountQuantity},#{item.pdAccountStatus},#{item.pdBatchNo},#{item.pdSerialNo},#{item.pdProdDate, jdbcType=VARCHAR},#{item.pdValidDate, jdbcType=VARCHAR},#{item.pdArrivalDate, jdbcType=VARCHAR},#{item.pdRemark},#{item.pdCustom1},#{item.pdCustom2},#{item.pdCustom3},#{item.pdCustom4},#{item.pdCustom5},#{item.pdCustom6},#{item.pdLoader}) diff --git a/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml index c2576a6..91b4e34 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/InStockinDetailNMapper.xml @@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + and stockin_id = #{stockinId} + and subject = #{subject} + and erp_stockin_id = #{erpStockinId} + and order_num = #{orderNum} + and finish_num = #{finishNum} + and status = #{status} + and applicant = #{applicant} + and apply_date = #{applyDate} + and confirm_date = #{confirmDate} + and approver = #{approver} + and approval_comment = #{approvalComment} + and related_doc_id = #{relatedDocId} + and created_at = #{createdAt} + and keeper_id = #{keeperId} + and category = #{category} + and entry_code = #{entryCode} + and approval_status = #{approvalStatus} + and product_details = #{productDetails} + and customer_name like concat('%', #{customerName}, '%') + and weighbill_no = #{weighbillNo} + and vehicle_no = #{vehicleNo} + and erp_status = #{erpStatus} + + + + + + + insert into in_stockin_n + + stockin_guid, + stockin_id, + subject, + erp_stockin_id, + order_num, + finish_num, + status, + applicant, + apply_date, + confirm_date, + approver, + approval_comment, + remark, + related_doc_id, + created_at, + keeper_id, + category, + entry_code, + approval_status, + product_details, + customer_name, + weighbill_no, + vehicle_no, + erp_status, + order_Src, + create_time + + + #{stockinGuid}, + #{stockinId}, + #{subject}, + #{erpStockinId}, + #{orderNum}, + #{finishNum}, + #{status}, + #{applicant}, + #{applyDate}, + #{confirmDate}, + #{approver}, + #{approvalComment}, + #{remark}, + #{relatedDocId}, + #{createdAt}, + #{keeperId}, + #{category}, + #{entryCode}, + #{approvalStatus}, + #{productDetails}, + #{customerName}, + #{weighbillNo}, + #{vehicleNo}, + #{erpStatus}, + #{orderSrc}, + GETDATE() + + + + + update in_stockin_n + + stockin_id = #{stockinId}, + subject = #{subject}, + erp_stockin_id = #{erpStockinId}, + order_num = #{orderNum}, + finish_num = #{finishNum}, + status = #{status}, + applicant = #{applicant}, + apply_date = #{applyDate}, + confirm_date = #{confirmDate}, + approver = #{approver}, + approval_comment = #{approvalComment}, + remark = #{remark}, + related_doc_id = #{relatedDocId}, + created_at = #{createdAt}, + keeper_id = #{keeperId}, + category = #{category}, + entry_code = #{entryCode}, + approval_status = #{approvalStatus}, + product_details = #{productDetails}, + customer_name = #{customerName}, + weighbill_no = #{weighbillNo}, + vehicle_no = #{vehicleNo}, + erp_status = #{erpStatus}, + order_src = #{orderSrc}, + create_time = #{createTime}, + update_time = #{updateTime}, + + where stockin_guid = #{stockinGuid} + + + + delete from in_stockin_n where stockin_guid = #{stockinGuid} + + + + delete from in_stockin_n where stockin_guid in + + #{stockinGuid} + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/api/pda/trayMsg.js b/ruoyi-ui/src/api/pda/trayMsg.js new file mode 100644 index 0000000..751369b --- /dev/null +++ b/ruoyi-ui/src/api/pda/trayMsg.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询入库绑定信息列表 +export function listTrayMsg(query) { + return request({ + url: '/pda/trayMsg/list', + method: 'get', + params: query + }) +} + +// 查询入库绑定信息详细 +export function getTrayMsg(id) { + return request({ + url: '/pda/trayMsg/' + id, + method: 'get' + }) +} + +// 新增入库绑定信息 +export function addTrayMsg(data) { + return request({ + url: '/pda/trayMsg', + method: 'post', + data: data + }) +} + +// 修改入库绑定信息 +export function updateTrayMsg(data) { + return request({ + url: '/pda/trayMsg', + method: 'put', + data: data + }) +} + +// 删除入库绑定信息 +export function delTrayMsg(id) { + return request({ + url: '/pda/trayMsg/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/views/pda/trayMsg/index.vue b/ruoyi-ui/src/views/pda/trayMsg/index.vue new file mode 100644 index 0000000..f0c274f --- /dev/null +++ b/ruoyi-ui/src/views/pda/trayMsg/index.vue @@ -0,0 +1,277 @@ + + +