src/main/java/org/jeecg/modules/cms/controller/CuttingInboundController.java
@@ -279,163 +279,75 @@ /* * 生成唯一条码的方法 * 生成唯一条码的方法(目前还没有编码规则,确定后在这里改) */ private String generateUniqueBarcode(String cuttingId, int index) { // 条码生成规则示例:刀具ID + 序号(4位) + 随机数 return cuttingId + String.format("%04d", index + 1) + (int) (Math.random() * 10000); } // @GetMapping("/submit") // public Result<?> submit(@RequestParam("orderId") String orderId) { // // cuttingInboundService.submit(orderId); // // return Result.ok("提交成功"); @GetMapping("/submit") @Timed(value = "cutting.inbound.submit", description = "刀具入库提交耗时") public Result<?> submit(@RequestParam("orderId") String orderId) { // long startTime = System.currentTimeMillis(); // try { // // 1. 更新入库单状态 // CuttingInbound cuttingInbound = cuttingInboundService.getById(orderId); // if (cuttingInbound == null) { // return Result.error("未找到对应的入库单"); // } // // // 检查入库单状态,只允许状态为"1"的入库单提交 // if (!"1".equals(cuttingInbound.getOrderStatus())) { // return Result.error("只有状态为未提交的入库单才能执行提交操作"); // } // // // 2. 更新状态为已提交 // cuttingInbound.setOrderStatus("2"); // boolean updateResult = cuttingInboundService.updateById(cuttingInbound); // if (!updateResult) { // return Result.error("更新入库单状态失败"); // } // cuttingInboundService.updateById(cuttingInbound); // // // 3. 获取入库明细 // // 2. 获取入库明细 // List<CuttingInboundDetail> detailList = cuttingInboundDetailService.lambdaQuery() // .eq(CuttingInboundDetail::getOrderId, orderId) // .list(); // // // 用于统计总数量 // int totalSubmitted = 0; // // // 批量保存的列表 // // 3. 收集所有需要保存的数据 // List<CuttingInventory> inventoryList = new ArrayList<>(); // List<CuttingInboundInventory> inboundInventoryList = new ArrayList<>(); // // // 4. 根据明细数量生成库存记录和条码 // for (CuttingInboundDetail detail : detailList) { // // 根据明细中的数量生成对应数量的库存记录receive_number // int quantity = detail.getReceiveNumber() != null ? detail.getReceiveNumber() : 0; // for (int i = 0; i < quantity; i++) { // totalSubmitted++; // // 为每个刀具生成独立的库存记录 // CuttingInventory cuttingInventory = new CuttingInventory(); // String inventoryId = UUID.randomUUID().toString().replace("-", ""); // cuttingInventory.setId(inventoryId); // cuttingInventory.setCuttingId(detail.getCuttingId()); // // 为每个刀具生成唯一条码 // cuttingInventory.setCuttingBarcode(generateUniqueBarcode(detail.getCuttingId(), i)); // // 设置库存状态为在库 // cuttingInventory.setInventoryStatus("正常"); // // 设置当前寿命为100 // cuttingInventory.setCurrentLife(BigDecimal.valueOf(100)); // // 添加到批量保存列表 // inventoryList.add(cuttingInventory); // int quantity = detail.getReceiveNumber() != null ? detail.getReceiveNumber().intValue() : 0; // // // 建立入库单与库存的关联关系 // for (int i = 0; i < quantity; i++) { // // 生成库存记录 // CuttingInventory cuttingInventory = new CuttingInventory(); // cuttingInventory.setCuttingId(detail.getCuttingId()); // cuttingInventory.setCuttingBarcode(generateUniqueBarcode(detail.getCuttingId(), i)); // cuttingInventory.setInventoryStatus("正常"); // cuttingInventory.setCurrentLife(BigDecimal.valueOf(100)); // inventoryList.add(cuttingInventory); // } // } // // // 4. 批量保存库存记录(一次性操作) // if (!inventoryList.isEmpty()) { // cuttingInventoryService.saveBatch(inventoryList); // // // 5. 为每个保存的库存记录创建关联关系 // for (CuttingInventory inventory : inventoryList) { // CuttingInboundInventory cuttingInboundInventory = new CuttingInboundInventory(); // cuttingInboundInventory.setOrderId(orderId); // cuttingInboundInventory.setInventoryId(inventoryId); // // 添加到批量保存列表 // cuttingInboundInventory.setInventoryId(inventory.getId()); // inboundInventoryList.add(cuttingInboundInventory); // } // // // 6. 批量保存关联关系(一次性操作) // cuttingInboundInventoryService.saveBatch(inboundInventoryList); // } // // // 批量保存库存记录 // if (!inventoryList.isEmpty()) { // boolean saveResult = cuttingInventoryService.saveBatch(inventoryList); // if (!saveResult) { // throw new RuntimeException("保存库存记录失败"); // } // } // long endTime = System.currentTimeMillis(); // log.info("刀具入库提交完成,耗时: {} s", (endTime - startTime)/1000); // return Result.ok("提交成功"); // // // 批量保存关联关系 // if (!inboundInventoryList.isEmpty()) { // boolean relationSaveResult = cuttingInboundInventoryService.saveBatch(inboundInventoryList); // if (!relationSaveResult) { // throw new RuntimeException("保存关联关系失败"); // } // } // // Map<String, Object> result = new HashMap<>(); // result.put("message", "提交成功"); // result.put("totalSubmitted", totalSubmitted); // return Result.ok(result); // } catch (Exception e) { // log.error("提交入库单失败,orderId: " + orderId, e); // throw new RuntimeException("提交失败: " + e.getMessage(), e); // long endTime = System.currentTimeMillis(); // log.error("提交入库单失败,orderId: " + orderId + ",耗时: " + (endTime - startTime) + " ms", e); // return Result.error("提交失败: " + e.getMessage()); // } // } @GetMapping("/submit") @Timed(value = "cutting.inbound.submit", description = "刀具入库提交耗时") public Result<?> submit(@RequestParam("orderId") String orderId) { long startTime = System.currentTimeMillis(); try { // 1. 更新入库单状态 CuttingInbound cuttingInbound = cuttingInboundService.getById(orderId); if (cuttingInbound == null) { return Result.error("未找到对应的入库单"); } cuttingInbound.setOrderStatus("2"); cuttingInboundService.updateById(cuttingInbound); // 2. 获取入库明细 List<CuttingInboundDetail> detailList = cuttingInboundDetailService.lambdaQuery() .eq(CuttingInboundDetail::getOrderId, orderId) .list(); // 3. 收集所有需要保存的数据 List<CuttingInventory> inventoryList = new ArrayList<>(); List<CuttingInboundInventory> inboundInventoryList = new ArrayList<>(); for (CuttingInboundDetail detail : detailList) { int quantity = detail.getReceiveNumber() != null ? detail.getReceiveNumber().intValue() : 0; for (int i = 0; i < quantity; i++) { // 生成库存记录 CuttingInventory cuttingInventory = new CuttingInventory(); cuttingInventory.setCuttingId(detail.getCuttingId()); cuttingInventory.setCuttingBarcode(generateUniqueBarcode(detail.getCuttingId(), i)); cuttingInventory.setInventoryStatus("正常"); cuttingInventory.setCurrentLife(BigDecimal.valueOf(100)); inventoryList.add(cuttingInventory); } } // 4. 批量保存库存记录(一次性操作) if (!inventoryList.isEmpty()) { cuttingInventoryService.saveBatch(inventoryList); // 5. 为每个保存的库存记录创建关联关系 for (CuttingInventory inventory : inventoryList) { CuttingInboundInventory cuttingInboundInventory = new CuttingInboundInventory(); cuttingInboundInventory.setOrderId(orderId); cuttingInboundInventory.setInventoryId(inventory.getId()); inboundInventoryList.add(cuttingInboundInventory); } // 6. 批量保存关联关系(一次性操作) cuttingInboundInventoryService.saveBatch(inboundInventoryList); } long endTime = System.currentTimeMillis(); log.info("刀具入库提交完成,耗时: {} s", (endTime - startTime)/1000); return Result.ok("提交成功"); } catch (Exception e) { long endTime = System.currentTimeMillis(); log.error("提交入库单失败,orderId: " + orderId + ",耗时: " + (endTime - startTime) + " ms", e); return Result.error("提交失败: " + e.getMessage()); } return cuttingInboundService.submit(orderId); } } src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java
@@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.cms.entity.CuttingInventory; src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java
@@ -43,141 +43,141 @@ import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; /** /** * @Description: 刀具领用单 * @Author: jeecg-boot * @Date: 2025-07-28 * @Date: 2025-07-28 * @Version: V1.0 */ @Api(tags="刀具领用单") @Api(tags = "刀具领用单") @RestController @RequestMapping("/cms/cuttingReceive") @Slf4j public class CuttingReceiveController extends JeecgController<CuttingReceive, ICuttingReceiveService> { @Autowired private ICuttingReceiveService cuttingReceiveService; @Autowired private ICuttingReceiveService cuttingReceiveService; @Autowired private ICuttingReceiveDetailService cuttingReceiveDetailService; /** * 分页列表查询 * * @param cuttingReceive * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "刀具领用单-分页列表查询") @ApiOperation(value="刀具领用单-分页列表查询", notes="刀具领用单-分页列表查询") @GetMapping(value = "/list") public Result<IPage<CuttingReceive>> queryPageList(CuttingReceive cuttingReceive, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<CuttingReceive> queryWrapper = QueryGenerator.initQueryWrapper(cuttingReceive, req.getParameterMap()); Page<CuttingReceive> page = new Page<CuttingReceive>(pageNo, pageSize); IPage<CuttingReceive> pageList = cuttingReceiveService.page(page, queryWrapper); return Result.OK(pageList); } /** * 添加 * * @param jSONObject * @return */ @AutoLog(value = "刀具领用单-添加") @ApiOperation(value="刀具领用单-添加", notes="刀具领用单-添加") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody JSONObject jSONObject) { CuttingReceive cuttingReceive = jSONObject.toJavaObject(CuttingReceive.class); cuttingReceive.setOrderStatus("1"); cuttingReceiveService.saveOrUpdate(cuttingReceive); //删除原关联数据 List<CuttingReceiveDetail> cuttingReceiveDetailList = cuttingReceiveDetailService.lambdaQuery().eq(CuttingReceiveDetail::getOrderId,cuttingReceive.getId()).list(); cuttingReceiveDetailService.removeBatchByIds(cuttingReceiveDetailList); //添加新关联数据 JSONArray jsonArray = jSONObject.getJSONArray("detailData"); List<CuttingReceiveDetail> list = jsonArray.toJavaList(CuttingReceiveDetail.class); for (int i = 0; i < list.size(); i++) { CuttingReceiveDetail temp = list.get(i); temp.setOrderId(cuttingReceive.getId()); cuttingReceiveDetailService.save(temp); } return Result.OK("添加成功!"); } /** * 编辑 * * @param cuttingReceive * @return */ @AutoLog(value = "刀具领用单-编辑") @ApiOperation(value="刀具领用单-编辑", notes="刀具领用单-编辑") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> edit(@RequestBody CuttingReceive cuttingReceive) { cuttingReceiveService.updateById(cuttingReceive); return Result.OK("编辑成功!"); } /** * 通过id删除 * * @param id * @return */ @AutoLog(value = "刀具领用单-通过id删除") @ApiOperation(value="刀具领用单-通过id删除", notes="刀具领用单-通过id删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name="id",required=true) String id) { cuttingReceiveService.removeById(id); return Result.OK("删除成功!"); } /** * 批量删除 * * @param ids * @return */ @AutoLog(value = "刀具领用单-批量删除") @ApiOperation(value="刀具领用单-批量删除", notes="刀具领用单-批量删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.cuttingReceiveService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } /** * 通过id查询 * * @param id * @return */ //@AutoLog(value = "刀具领用单-通过id查询") @ApiOperation(value="刀具领用单-通过id查询", notes="刀具领用单-通过id查询") @GetMapping(value = "/queryById") public Result<CuttingReceive> queryById(@RequestParam(name="id",required=true) String id) { CuttingReceive cuttingReceive = cuttingReceiveService.getById(id); if(cuttingReceive==null) { return Result.error("未找到对应数据"); } return Result.OK(cuttingReceive); } @Autowired private ICuttingReceiveDetailService cuttingReceiveDetailService; /** * 导出excel * * @param request * @param cuttingReceive */ * 分页列表查询 * * @param cuttingReceive * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "刀具领用单-分页列表查询") @ApiOperation(value = "刀具领用单-分页列表查询", notes = "刀具领用单-分页列表查询") @GetMapping(value = "/list") public Result<IPage<CuttingReceive>> queryPageList(CuttingReceive cuttingReceive, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper<CuttingReceive> queryWrapper = QueryGenerator.initQueryWrapper(cuttingReceive, req.getParameterMap()); Page<CuttingReceive> page = new Page<CuttingReceive>(pageNo, pageSize); IPage<CuttingReceive> pageList = cuttingReceiveService.page(page, queryWrapper); return Result.OK(pageList); } /** * 添加 * * @param jSONObject * @return */ @AutoLog(value = "刀具领用单-添加") @ApiOperation(value = "刀具领用单-添加", notes = "刀具领用单-添加") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody JSONObject jSONObject) { CuttingReceive cuttingReceive = jSONObject.toJavaObject(CuttingReceive.class); cuttingReceive.setOrderStatus("1"); cuttingReceiveService.saveOrUpdate(cuttingReceive); //删除原关联数据 List<CuttingReceiveDetail> cuttingReceiveDetailList = cuttingReceiveDetailService.lambdaQuery().eq(CuttingReceiveDetail::getOrderId, cuttingReceive.getId()).list(); cuttingReceiveDetailService.removeBatchByIds(cuttingReceiveDetailList); //添加新关联数据 JSONArray jsonArray = jSONObject.getJSONArray("detailData"); List<CuttingReceiveDetail> list = jsonArray.toJavaList(CuttingReceiveDetail.class); for (int i = 0; i < list.size(); i++) { CuttingReceiveDetail temp = list.get(i); temp.setOrderId(cuttingReceive.getId()); cuttingReceiveDetailService.save(temp); } return Result.OK("添加成功!"); } /** * 编辑 * * @param cuttingReceive * @return */ @AutoLog(value = "刀具领用单-编辑") @ApiOperation(value = "刀具领用单-编辑", notes = "刀具领用单-编辑") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) public Result<String> edit(@RequestBody CuttingReceive cuttingReceive) { cuttingReceiveService.updateById(cuttingReceive); return Result.OK("编辑成功!"); } /** * 通过id删除 * * @param id * @return */ @AutoLog(value = "刀具领用单-通过id删除") @ApiOperation(value = "刀具领用单-通过id删除", notes = "刀具领用单-通过id删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name = "id", required = true) String id) { cuttingReceiveService.removeById(id); return Result.OK("删除成功!"); } /** * 批量删除 * * @param ids * @return */ @AutoLog(value = "刀具领用单-批量删除") @ApiOperation(value = "刀具领用单-批量删除", notes = "刀具领用单-批量删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { this.cuttingReceiveService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } /** * 通过id查询 * * @param id * @return */ //@AutoLog(value = "刀具领用单-通过id查询") @ApiOperation(value = "刀具领用单-通过id查询", notes = "刀具领用单-通过id查询") @GetMapping(value = "/queryById") public Result<CuttingReceive> queryById(@RequestParam(name = "id", required = true) String id) { CuttingReceive cuttingReceive = cuttingReceiveService.getById(id); if (cuttingReceive == null) { return Result.error("未找到对应数据"); } return Result.OK(cuttingReceive); } /** * 导出excel * * @param request * @param cuttingReceive */ //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, CuttingReceive cuttingReceive) { @@ -185,28 +185,28 @@ } /** * 通过excel导入数据 * * @param request * @param response * @return */ * 通过excel导入数据 * * @param request * @param response * @return */ //@RequiresPermissions("cms_cutting_receive:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, CuttingReceive.class); } /** * 根据领用id查询领用明细 * * @param orderId * @return */ @GetMapping("/detailList") public Result<?> detailList(@RequestParam("orderId") String orderId) { List<Map<String, Object>> list = cuttingReceiveDetailService.detailList(orderId); return Result.ok(list); } /** * 根据领用id查询领用明细 * * @param orderId * @return */ @GetMapping("/detailList") public Result<?> detailList(@RequestParam("orderId") String orderId) { List<Map<String, Object>> list = cuttingReceiveDetailService.detailList(orderId); return Result.ok(list); } } src/main/java/org/jeecg/modules/cms/controller/CuttingToolController.java
@@ -40,145 +40,145 @@ import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; /** /** * @Description: 刀具信息 * @Author: jeecg-boot * @Date: 2025-07-28 * @Date: 2025-07-28 * @Version: V1.0 */ @Api(tags="刀具信息") @Api(tags = "刀具信息") @RestController @RequestMapping("/cms/cuttingTool") @Slf4j public class CuttingToolController extends JeecgController<CuttingTool, ICuttingToolService> { @Autowired private ICuttingToolService cuttingToolService; @Autowired private ICuttingToolService cuttingToolService; @Autowired private ICuttingPropertiesService cuttingPropertiesService; /** * 分页列表查询 * * @param cuttingTool * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "刀具信息-分页列表查询") @ApiOperation(value="刀具信息-分页列表查询", notes="刀具信息-分页列表查询") @GetMapping(value = "/list") public Result<IPage<CuttingTool>> queryPageList(CuttingTool cuttingTool, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<CuttingTool> queryWrapper = QueryGenerator.initQueryWrapper(cuttingTool, req.getParameterMap()); Page<CuttingTool> page = new Page<CuttingTool>(pageNo, pageSize); IPage<CuttingTool> pageList = cuttingToolService.page(page, queryWrapper); return Result.OK(pageList); } /** * 添加 * * @param cuttingTool * @return */ @AutoLog(value = "刀具信息-添加") @ApiOperation(value="刀具信息-添加", notes="刀具信息-添加") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody CuttingTool cuttingTool) { cuttingToolService.save(cuttingTool); List<CuttingProperties> cuttingPropertiesList = cuttingTool.getCuttingPropertiesList(); for (CuttingProperties cuttingProperties : cuttingPropertiesList) { cuttingProperties.setCuttingId(cuttingTool.getId()); cuttingPropertiesService.save(cuttingProperties); } return Result.OK("添加成功!"); } /** * 编辑 * * @param cuttingTool * @return */ @AutoLog(value = "刀具信息-编辑") @ApiOperation(value="刀具信息-编辑", notes="刀具信息-编辑") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> edit(@RequestBody CuttingTool cuttingTool) { cuttingToolService.saveOrUpdate(cuttingTool); List<String> deletePropertiesIds = cuttingTool.getDeletePropertiesIds(); if (deletePropertiesIds != null) { for (String deletePropertiesId : deletePropertiesIds) { cuttingPropertiesService.removeById(deletePropertiesId); } } List<CuttingProperties> cuttingPropertiesList = cuttingTool.getCuttingPropertiesList(); for (CuttingProperties cuttingProperties : cuttingPropertiesList) { cuttingProperties.setCuttingId(cuttingTool.getId()); cuttingPropertiesService.saveOrUpdate(cuttingProperties); } return Result.OK("编辑成功!"); } /** * 通过id删除 * * @param id * @return */ @AutoLog(value = "刀具信息-通过id删除") @ApiOperation(value="刀具信息-通过id删除", notes="刀具信息-通过id删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name="id",required=true) String id) { cuttingToolService.removeById(id); cuttingPropertiesService.remove(new LambdaQueryWrapper<CuttingProperties>().eq(CuttingProperties::getCuttingId, id)); return Result.OK("删除成功!"); } /** * 批量删除 * * @param ids * @return */ @AutoLog(value = "刀具信息-批量删除") @ApiOperation(value="刀具信息-批量删除", notes="刀具信息-批量删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.cuttingToolService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } /** * 通过id查询 * * @param id * @return */ //@AutoLog(value = "刀具信息-通过id查询") @ApiOperation(value="刀具信息-通过id查询", notes="刀具信息-通过id查询") @GetMapping(value = "/queryById") public Result<CuttingTool> queryById(@RequestParam(name="id",required=true) String id) { CuttingTool cuttingTool = cuttingToolService.getById(id); if(cuttingTool==null) { return Result.error("未找到对应数据"); } return Result.OK(cuttingTool); } @Autowired private ICuttingPropertiesService cuttingPropertiesService; /** * 导出excel * * @param request * @param cuttingTool */ * 分页列表查询 * * @param cuttingTool * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "刀具信息-分页列表查询") @ApiOperation(value = "刀具信息-分页列表查询", notes = "刀具信息-分页列表查询") @GetMapping(value = "/list") public Result<IPage<CuttingTool>> queryPageList(CuttingTool cuttingTool, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper<CuttingTool> queryWrapper = QueryGenerator.initQueryWrapper(cuttingTool, req.getParameterMap()); Page<CuttingTool> page = new Page<CuttingTool>(pageNo, pageSize); IPage<CuttingTool> pageList = cuttingToolService.page(page, queryWrapper); return Result.OK(pageList); } /** * 添加 * * @param cuttingTool * @return */ @AutoLog(value = "刀具信息-添加") @ApiOperation(value = "刀具信息-添加", notes = "刀具信息-添加") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody CuttingTool cuttingTool) { cuttingToolService.save(cuttingTool); List<CuttingProperties> cuttingPropertiesList = cuttingTool.getCuttingPropertiesList(); for (CuttingProperties cuttingProperties : cuttingPropertiesList) { cuttingProperties.setCuttingId(cuttingTool.getId()); cuttingPropertiesService.save(cuttingProperties); } return Result.OK("添加成功!"); } /** * 编辑 * * @param cuttingTool * @return */ @AutoLog(value = "刀具信息-编辑") @ApiOperation(value = "刀具信息-编辑", notes = "刀具信息-编辑") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) public Result<String> edit(@RequestBody CuttingTool cuttingTool) { cuttingToolService.saveOrUpdate(cuttingTool); List<String> deletePropertiesIds = cuttingTool.getDeletePropertiesIds(); if (deletePropertiesIds != null) { for (String deletePropertiesId : deletePropertiesIds) { cuttingPropertiesService.removeById(deletePropertiesId); } } List<CuttingProperties> cuttingPropertiesList = cuttingTool.getCuttingPropertiesList(); for (CuttingProperties cuttingProperties : cuttingPropertiesList) { cuttingProperties.setCuttingId(cuttingTool.getId()); cuttingPropertiesService.saveOrUpdate(cuttingProperties); } return Result.OK("编辑成功!"); } /** * 通过id删除 * * @param id * @return */ @AutoLog(value = "刀具信息-通过id删除") @ApiOperation(value = "刀具信息-通过id删除", notes = "刀具信息-通过id删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name = "id", required = true) String id) { cuttingToolService.removeById(id); cuttingPropertiesService.remove(new LambdaQueryWrapper<CuttingProperties>().eq(CuttingProperties::getCuttingId, id)); return Result.OK("删除成功!"); } /** * 批量删除 * * @param ids * @return */ @AutoLog(value = "刀具信息-批量删除") @ApiOperation(value = "刀具信息-批量删除", notes = "刀具信息-批量删除") //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { this.cuttingToolService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } /** * 通过id查询 * * @param id * @return */ //@AutoLog(value = "刀具信息-通过id查询") @ApiOperation(value = "刀具信息-通过id查询", notes = "刀具信息-通过id查询") @GetMapping(value = "/queryById") public Result<CuttingTool> queryById(@RequestParam(name = "id", required = true) String id) { CuttingTool cuttingTool = cuttingToolService.getById(id); if (cuttingTool == null) { return Result.error("未找到对应数据"); } return Result.OK(cuttingTool); } /** * 导出excel * * @param request * @param cuttingTool */ //@RequiresPermissions("org.jeecg.modules:cms_cutting_tool:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, CuttingTool cuttingTool) { @@ -186,30 +186,30 @@ } /** * 通过excel导入数据 * * @param request * @param response * @return */ * 通过excel导入数据 * * @param request * @param response * @return */ //@RequiresPermissions("cms_cutting_tool:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, CuttingTool.class); } @GetMapping(value = "/getCuttingToolList") public Result<?> getCuttingToolList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) { IPage<Map<String, Object>> cuttingToolList = cuttingToolService.getCuttingToolList(pageNo, pageSize, params); for (Map<String, Object> record : cuttingToolList.getRecords()) { String cuttingId = (String) record.get("id"); List<CuttingProperties> cuttingPropertiesList = cuttingPropertiesService.selectListByCuttingId(cuttingId); record.put("cuttingPropertiesList", cuttingPropertiesList); } return Result.ok(cuttingToolList); } //选择刀具的接口 @GetMapping(value = "/getCuttingToolList") public Result<?> getCuttingToolList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) { IPage<Map<String, Object>> cuttingToolList = cuttingToolService.getCuttingToolList(pageNo, pageSize, params); for (Map<String, Object> record : cuttingToolList.getRecords()) { String cuttingId = (String) record.get("id"); List<CuttingProperties> cuttingPropertiesList = cuttingPropertiesService.selectListByCuttingId(cuttingId); record.put("cuttingPropertiesList", cuttingPropertiesList); } return Result.ok(cuttingToolList); } } src/main/java/org/jeecg/modules/cms/entity/CuttingInventory.java
@@ -4,10 +4,8 @@ import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -57,6 +55,9 @@ @ApiModelProperty(value = "刀具ID") @Dict(dictTable = "cms_cutting_tool",dicCode="id",dicText = "cutting_code") private String cuttingId; @TableField(exist = false) // 表示这不是数据库字段 private String cuttingCode; /**刀具条码*/ @Excel(name = "刀具条码", width = 15) @ApiModelProperty(value = "刀具条码") @@ -69,4 +70,11 @@ @Excel(name = "当前寿命(百分比)", width = 15) @ApiModelProperty(value = "当前寿命(百分比)") private BigDecimal currentLife; // 在CuttingInventory实体类中添加 @TableField(exist = false) // 表示这不是数据库字段 private String cuttingIdSearch; @TableField(exist = false) // 表示这不是数据库字段 private String cuttingBarcodeSearch; } src/main/java/org/jeecg/modules/cms/mapper/CuttingReceiveDetailMapper.java
@@ -15,5 +15,5 @@ */ public interface CuttingReceiveDetailMapper extends BaseMapper<CuttingReceiveDetail> { public List<Map<String, Object>> detailList(@Param("orderId") String orderId); List<Map<String, Object>> detailList(@Param("orderId") String orderId); } src/main/java/org/jeecg/modules/cms/service/ICuttingInboundService.java
@@ -15,4 +15,6 @@ */ public interface ICuttingInboundService extends IService<CuttingInbound> { Result<?> importExcelData(List<CuttingInboundExportVo> list); Result<?> submit(String orderId); } src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveDetailService.java
@@ -7,6 +7,7 @@ import java.util.Map; /** * * @Description: 领用单明细 * @Author: jeecg-boot * @Date: 2025-07-28 @@ -14,5 +15,5 @@ */ public interface ICuttingReceiveDetailService extends IService<CuttingReceiveDetail> { public List<Map<String, Object>> detailList(String orderId); List<Map<String, Object>> detailList(String orderId); } src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java
@@ -1,17 +1,25 @@ package org.jeecg.modules.cms.service.impl; import io.micrometer.core.annotation.Timed; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.cms.entity.CuttingInbound; import org.jeecg.modules.cms.entity.CuttingInboundDetail; import org.jeecg.modules.cms.entity.CuttingInboundInventory; import org.jeecg.modules.cms.entity.CuttingInventory; import org.jeecg.modules.cms.mapper.CuttingInboundMapper; import org.jeecg.modules.cms.service.ICuttingInboundInventoryService; import org.jeecg.modules.cms.service.ICuttingInboundService; import org.jeecg.modules.cms.service.ICuttingInboundDetailService; import org.jeecg.modules.cms.service.ICuttingInventoryService; import org.jeecg.modules.cms.vo.CuttingInboundExportVo; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -22,10 +30,18 @@ * @Date: 2025-07-28 * @Version: V1.0 */ @Slf4j @Service public class CuttingInboundServiceImpl extends ServiceImpl<CuttingInboundMapper, CuttingInbound> implements ICuttingInboundService { @Autowired private ICuttingInboundDetailService cuttingInboundDetailService; // 注入从表服务 @Autowired private ICuttingInventoryService cuttingInventoryService; @Autowired private ICuttingInboundInventoryService cuttingInboundInventoryService; /** * 通过Excel导入刀具入库单数据 * @@ -35,39 +51,7 @@ @Override @Transactional(rollbackFor = Exception.class) public Result<?> importExcelData(List<CuttingInboundExportVo> list) { // try { // for (CuttingInboundExportVo exportVo : list) { // // 保存主表数据 // CuttingInbound cuttingInbound = new CuttingInbound(); // cuttingInbound.setReceiver(exportVo.getReceiver()); // cuttingInbound.setReceiveTime(exportVo.getReceiveTime()); // cuttingInbound.setReceiveComment(exportVo.getReceiveComment()); // cuttingInbound.setConfirmer(exportVo.getConfirmer()); // cuttingInbound.setConfirmTime(exportVo.getConfirmTime()); // cuttingInbound.setConfirmComment(exportVo.getConfirmComment()); // cuttingInbound.setOrderStatus(exportVo.getOrderStatus()); // // // 保存主表数据以获取ID // this.save(cuttingInbound); // // // 获取主表ID // String orderId = cuttingInbound.getId(); // // // 处理从表数据 // List<CuttingInboundDetail> detailList = exportVo.getDetailList(); // if (detailList != null && !detailList.isEmpty()) { // for (CuttingInboundDetail detail : detailList) { // detail.setOrderId(orderId); // 设置外键关联 // cuttingInboundDetailService.save(detail); // } // } // } // return Result.ok("导入成功"); // } catch (Exception e) { // log.error("导入失败", e); // return Result.error("导入失败: " + e.getMessage()); // } // } for (CuttingInboundExportVo exportVo : list) { // 保存主表数据 CuttingInbound cuttingInbound = new CuttingInbound(); @@ -96,4 +80,88 @@ } return Result.ok("导入成功"); } /* * 生成唯一条码的方法(确定编码生成规则后在此处重写) */ private String generateUniqueBarcode(String cuttingId, int index) { // 条码生成规则示例:刀具ID + 序号(4位) + 随机数 return cuttingId + String.format("%04d", index + 1) + (int) (Math.random() * 10000); } @Override @Timed(value = "cutting.inbound.submit", description = "刀具入库提交耗时") public synchronized Result<?> submit(String orderId) { long startTime = System.currentTimeMillis(); try { // 1. 更新入库单状态 CuttingInbound cuttingInbound = this.getById(orderId); if (cuttingInbound == null) { return Result.error("未找到对应的入库单"); } // 检查入库单状态,只允许状态为"1"的入库单提交 if (!"1".equals(cuttingInbound.getOrderStatus())) { return Result.error("只有状态为未提交的入库单才能执行提交操作"); } cuttingInbound.setOrderStatus("2"); boolean updateResult = this.updateById(cuttingInbound); if (!updateResult) { return Result.error("更新入库单状态失败,可能已被其他用户处理"); } // 2. 获取入库明细 List<CuttingInboundDetail> detailList = cuttingInboundDetailService.lambdaQuery() .eq(CuttingInboundDetail::getOrderId, orderId) .list(); // 3. 收集所有需要保存的数据 List<CuttingInventory> inventoryList = new ArrayList<>(); List<CuttingInboundInventory> inboundInventoryList = new ArrayList<>(); for (CuttingInboundDetail detail : detailList) { int quantity = detail.getReceiveNumber() != null ? detail.getReceiveNumber().intValue() : 0; for (int i = 0; i < quantity; i++) { // 生成库存记录 CuttingInventory cuttingInventory = new CuttingInventory(); cuttingInventory.setCuttingId(detail.getCuttingId()); cuttingInventory.setCuttingBarcode(generateUniqueBarcode(detail.getCuttingId(), i)); cuttingInventory.setInventoryStatus("正常"); cuttingInventory.setCurrentLife(BigDecimal.valueOf(100)); inventoryList.add(cuttingInventory); } } // 4. 批量保存库存记录(一次性操作) if (!inventoryList.isEmpty()) { cuttingInventoryService.saveBatch(inventoryList); // 5. 为每个保存的库存记录创建关联关系 for (CuttingInventory inventory : inventoryList) { CuttingInboundInventory cuttingInboundInventory = new CuttingInboundInventory(); cuttingInboundInventory.setOrderId(orderId); cuttingInboundInventory.setInventoryId(inventory.getId()); inboundInventoryList.add(cuttingInboundInventory); } // 6. 批量保存关联关系(一次性操作) cuttingInboundInventoryService.saveBatch(inboundInventoryList); } long endTime = System.currentTimeMillis(); log.info("刀具入库提交完成,耗时: {} ms", (endTime - startTime)); return Result.ok("提交成功"); } catch (Exception e) { long endTime = System.currentTimeMillis(); log.error("提交入库单失败,orderId: " + orderId + ",耗时: " + (endTime - startTime) + " ms", e); return Result.error("提交失败: " + e.getMessage()); } } }