From bb923868d80b31d1057424a28b4bd7709c5a6648 Mon Sep 17 00:00:00 2001 From: lixiangyu <lixiangyu@xalxzn.com> Date: 星期四, 11 九月 2025 17:57:57 +0800 Subject: [PATCH] feat(cms): - 在`CuttingInventoryServiceImpl`中添加了批量更新库存状态的方法,并添加了事务注解。 - 在`CuttingReceive`实体类中添加了领用单对库存状态变化功能 - 在`CuttingReceiveController`中添加了提交领用单的方法,并优化了部分方法的参数和逻辑。 - 在`CuttingReceiveDetailMapper.xml`中添加了库存ID字段,以让数据库能正常获取库存id。 - 在`CuttingReceiveServiceImpl`中实现了提交领用单的逻辑,并添加了日志记录。- 在`ICuttingInventoryService`接口中添加了批量更新库存状态的方法。 - 在`ICuttingReceiveService`接口中添加了提交领用单的方法。 --- src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java | 19 +++- src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java | 65 ++++++++++++++++ src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java | 1 src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java | 11 +- src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml | 3 src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java | 2 src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java | 81 +++++++++----------- src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java | 1 src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java | 5 9 files changed, 130 insertions(+), 58 deletions(-) diff --git a/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java b/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java index a0e4d74..396546f 100644 --- a/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java +++ b/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; diff --git a/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java b/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java index a1be185..35302fe 100644 --- a/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java +++ b/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") } diff --git a/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java b/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java index c0e3ad6..d362d02 100644 --- a/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java +++ b/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) diff --git a/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml b/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml index 643a8fc..1211c04 100644 --- a/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml +++ b/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 diff --git a/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java b/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java index 5c4098a..875a21f 100644 --- a/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java +++ b/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); } diff --git a/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java b/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java index 1e69198..5b9df57 100644 --- a/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java +++ b/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); } diff --git a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java index 17ded30..18a80ad 100644 --- a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java +++ b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java @@ -89,6 +89,13 @@ // 鏉$爜鐢熸垚瑙勫垯绀轰緥锛氬垁鍏稩D + 搴忓彿(4浣�) + 闅忔満鏁� return cuttingId + String.format("%04d", index + 1) + (int) (Math.random() * 10000); } + + /** + * 鎻愪氦鍏ュ簱鍗� + * + * @param orderId 鍏ュ簱鍗旾D + * @return 鎻愪氦缁撴灉 + */ @Override @Timed(value = "cutting.inbound.submit", description = "鍒�鍏峰叆搴撴彁浜よ�楁椂") public synchronized Result<?> submit(String orderId) { @@ -160,8 +167,4 @@ return Result.error("鎻愪氦澶辫触: " + e.getMessage()); } } - - - - } diff --git a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java index f5adc82..6443d88 100644 --- a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java +++ b/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); + } + } + } diff --git a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java index b385d79..5ec91bd 100644 --- a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java +++ b/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()); + } + } } -- Gitblit v1.9.3