src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java
@@ -1,8 +1,7 @@ package org.jeecg.modules.cms.controller; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java
@@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -12,6 +13,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.micrometer.core.annotation.Timed; import liquibase.pro.packaged.G; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; @@ -43,10 +45,10 @@ import org.jeecg.common.aspect.annotation.AutoLog; /** * @Description: 刀具领用单 * @Author: jeecg-boot * @Date: 2025-07-28 * @Version: V1.0 * @Description: 刀具领用单 * @Author: jeecg-boot * @Date: 2025-07-28 * @Version: V1.0 */ @Api(tags = "刀具领用单") @RestController @@ -58,14 +60,12 @@ @Autowired private ICuttingReceiveDetailService cuttingReceiveDetailService; @Autowired private ICuttingInventoryService cuttingInventoryService; /** * 分页列表查询 * * @param cuttingReceive * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "刀具领用单-分页列表查询") @ApiOperation(value = "刀具领用单-分页列表查询", notes = "刀具领用单-分页列表查询") @@ -75,16 +75,13 @@ @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); Page<CuttingReceive> page = new Page<>(pageNo, pageSize); IPage<CuttingReceive> pageList = cuttingReceiveService.page(page, queryWrapper); return Result.OK(pageList); } /** * 添加 * * @param jSONObject * @return */ @AutoLog(value = "刀具领用单-添加") @ApiOperation(value = "刀具领用单-添加", notes = "刀具领用单-添加") @@ -99,23 +96,32 @@ // 删除原有关联的明细数据 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); for (CuttingReceiveDetail temp : list) { temp.setOrderId(cuttingReceive.getId()); cuttingReceiveDetailService.save(temp); } // 更新库存刀具状态为"已出库" if (!list.isEmpty()) { // 收集所有需要更新状态的库存ID List<String> inventoryIds = list.stream() .map(CuttingReceiveDetail::getInventoryId) // 假设CuttingReceiveDetail中有inventoryId字段 .filter(id -> id != null && !id.isEmpty()) .collect(Collectors.toList()); if (!inventoryIds.isEmpty()) { // 更新库存状态为"已出库" cuttingInventoryService.updateStatus(inventoryIds, "待出库"); } } return Result.OK("添加成功!"); } /** * 编辑 * * @param cuttingReceive * @return */ @AutoLog(value = "刀具领用单-编辑") @ApiOperation(value = "刀具领用单-编辑", notes = "刀具领用单-编辑") @@ -128,44 +134,35 @@ /** * 通过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) { public Result<String> delete(@RequestParam(name = "id") 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) { public Result<String> deleteBatch(@RequestParam(name = "ids") 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) { public Result<CuttingReceive> queryById(@RequestParam(name = "id") String id) { CuttingReceive cuttingReceive = cuttingReceiveService.getById(id); if (cuttingReceive == null) { return Result.error("未找到对应数据"); @@ -175,9 +172,6 @@ /** * 导出excel * * @param request * @param cuttingReceive */ //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:exportXls") @RequestMapping(value = "/exportXls") @@ -187,10 +181,6 @@ /** * 通过excel导入数据 * * @param request * @param response * @return */ //@RequiresPermissions("cms_cutting_receive:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) @@ -200,9 +190,6 @@ /** * 根据领用id查询领用明细 * * @param orderId * @return */ @GetMapping("/detailList") public Result<?> detailList(@RequestParam("orderId") String orderId) { @@ -212,8 +199,6 @@ /** * 选择库存刀具的列表 * * @return */ @GetMapping("/getInventoryToolList") public Result<?> getInventoryToolList(@RequestParam("pageNo") Integer pageNo, @@ -222,4 +207,12 @@ IPage<Map<String, Object>> inventoryTooList = cuttingReceiveService.getInventoryToolList(pageNo, pageSize, params); return Result.ok(inventoryTooList); } @GetMapping("/submit") @Timed(value = "cutting.inbound.submit", description = "刀具入库提交耗时") public Result<?> submit(@RequestParam("orderId") String orderId) { return cuttingReceiveService.submit(orderId); } //TODO: @GetMapping("/handleBack") } src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java
@@ -59,6 +59,7 @@ /**领用单状态*/ @Excel(name = "领用单状态", width = 15) @ApiModelProperty(value = "领用单状态") @Dict(dicCode = "order_status") private String orderStatus; /**领用人*/ @Excel(name = "领用人", width = 15) src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml
@@ -9,9 +9,10 @@ t1.cutting_id cuttingId, t1.workpiece_material workpieceMaterial, t1.used_life usedLife, t2.cutting_barcode cuttingCBarcode, t2.cutting_barcode cuttingBarcode, t2.inventory_status inventoryStatus, t2.current_life currentLife, t2.id inventoryId, t3.cutting_code cuttingCode, t3.cutting_name cuttingName FROM src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java
@@ -17,5 +17,6 @@ public interface ICuttingInventoryService extends IService<CuttingInventory> { IPage<Map<String, Object>> statisticsByCuttingIdAndStatus(Page<Map<String, Object>> page); void updateStatus(List<String> ids, String status); } src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java
@@ -1,6 +1,7 @@ package org.jeecg.modules.cms.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.cms.entity.CuttingReceive; import com.baomidou.mybatisplus.extension.service.IService; @@ -15,4 +16,5 @@ public interface ICuttingReceiveService extends IService<CuttingReceive> { IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params); Result<?> submit(String orderId); } src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java
@@ -89,6 +89,13 @@ // 条码生成规则示例:刀具ID + 序号(4位) + 随机数 return cuttingId + String.format("%04d", index + 1) + (int) (Math.random() * 10000); } /** * 提交入库单 * * @param orderId 入库单ID * @return 提交结果 */ @Override @Timed(value = "cutting.inbound.submit", description = "刀具入库提交耗时") public synchronized Result<?> submit(String orderId) { @@ -160,8 +167,4 @@ return Result.error("提交失败: " + e.getMessage()); } } } src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java
@@ -1,21 +1,19 @@ package org.jeecg.modules.cms.service.impl; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.jeecg.modules.cms.entity.CuttingInventory; import org.jeecg.modules.cms.mapper.CuttingInventoryMapper; import org.jeecg.modules.cms.mapper.CuttingToolMapper; import org.jeecg.modules.cms.service.ICuttingInventoryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; /** * @Description: 刀具库存 @@ -30,4 +28,15 @@ IPage<Map<String, Object>> result = baseMapper.statisticsByCuttingIdAndStatus(page); return result; } @Override @Transactional(rollbackFor = Exception.class) public void updateStatus(List<String> ids, String status) { if (ids != null && !ids.isEmpty() && StringUtils.isNotBlank(status)) { UpdateWrapper<CuttingInventory> updateWrapper = new UpdateWrapper<>(); updateWrapper.in("id", ids); updateWrapper.set("inventory_status", status); // 根据实际数据库字段名调整 this.update(updateWrapper); } } } src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java
@@ -2,13 +2,22 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.micrometer.core.annotation.Timed; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.cms.entity.CuttingReceive; import org.jeecg.modules.cms.entity.CuttingReceiveDetail; import org.jeecg.modules.cms.mapper.CuttingReceiveMapper; import org.jeecg.modules.cms.service.ICuttingInventoryService; import org.jeecg.modules.cms.service.ICuttingReceiveDetailService; import org.jeecg.modules.cms.service.ICuttingReceiveService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.ArrayList; import java.util.List; import java.util.Map; /** @@ -17,12 +26,66 @@ * @Date: 2025-07-28 * @Version: V1.0 */ @Slf4j @Service public class CuttingReceiveServiceImpl extends ServiceImpl<CuttingReceiveMapper, CuttingReceive> implements ICuttingReceiveService { @Autowired private ICuttingInventoryService cuttingInventoryService; @Autowired private ICuttingReceiveDetailService cuttingReceiveDetailService; @Override public IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params) { IPage<Map> pageData = new Page<Map>(pageNo, pageSize); return super.getBaseMapper().getInventoryToolList(pageData,params); } @Override @Timed(value = "cutting.receive.submit", description = "刀具领用提交耗时") public synchronized Result<?> submit(String orderId) { long startTime = System.currentTimeMillis(); try { // 1. 更新领用单状态 CuttingReceive cuttingReceive = this.getById(orderId); if (cuttingReceive == null) { return Result.error("未找到对应的领用单"); } // 检查领用单状态,只允许状态为"1"的领用单提交 if (!"1".equals(cuttingReceive.getOrderStatus())) { return Result.error("只有状态为未提交的领用单才能执行提交操作"); } cuttingReceive.setOrderStatus("2"); // 设置为已领用状态 boolean updateResult = this.updateById(cuttingReceive); if (!updateResult) { return Result.error("更新领用单状态失败,可能已被其他用户处理"); } // 2. 获取领用明细 List<CuttingReceiveDetail> detailList = cuttingReceiveDetailService.lambdaQuery() .eq(CuttingReceiveDetail::getOrderId, orderId) .list(); // 3. 收集所有需要更新状态的库存ID List<String> inventoryIds = new ArrayList<>(); for (CuttingReceiveDetail detail : detailList) { if (detail.getInventoryId() != null && !detail.getInventoryId().isEmpty()) { inventoryIds.add(detail.getInventoryId()); } } // 4. 批量更新库存状态为"已出库" if (!inventoryIds.isEmpty()) { cuttingInventoryService.updateStatus(inventoryIds, "已出库"); } 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()); } } }