lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/OutboundOrderController.java
@@ -17,6 +17,7 @@ import org.jeecg.modules.tms.entity.dto.OutBoundRequestDto; import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto; import org.jeecg.modules.tms.entity.vo.OutboundDetailVo; import org.jeecg.modules.tms.entity.vo.SelectOutboundToolVo; import org.jeecg.modules.tms.enums.OutBillStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -96,6 +97,28 @@ return Result.OK(pageList); } @ApiOperation(value="åºåºç³è¯·-æ¥è¯¢åç¨åºåºå·¥å ·å表", notes="åºåºç³è¯·-æ¥è¯¢åç¨åºåºå·¥å ·å表") @GetMapping(value = "/selectBorrowOutboundToolPageList") public Result<IPage<SelectOutboundToolVo>> queryBorrowOutboundToolPageList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { Map<String, String[]> parameterMap = req.getParameterMap(); Page<SelectOutboundToolVo> page = new Page<>(pageNo, pageSize); IPage<SelectOutboundToolVo> pageList = outboundOrderService.queryBorrowOutboundToolPageList(page, parameterMap); return Result.OK(pageList); } @ApiOperation(value="åºåºç³è¯·-æ¥è¯¢å磨åºåºå·¥å ·å表", notes="åºåºç³è¯·-æ¥è¯¢å磨åºåºå·¥å ·å表") @GetMapping(value = "/selectSharpenOutboundToolPageList") public Result<IPage<SelectOutboundToolVo>> querySharpenOutboundToolPageList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { Map<String, String[]> parameterMap = req.getParameterMap(); Page<SelectOutboundToolVo> page = new Page<>(pageNo, pageSize); IPage<SelectOutboundToolVo> pageList = outboundOrderService.querySharpenOutboundToolPageList(page, parameterMap); return Result.OK(pageList); } @ApiOperation(value="tms_outbound_order-éè¿idæ¥è¯¢", notes="tms_outbound_order-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<?> queryById(@RequestParam("id") String id) { lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolSharpening.java
@@ -52,6 +52,10 @@ @ApiModelProperty(value = "åç£¨ç»æå建议") private String sharpeningResult; /** åç£¨ç¶æ;1:å¾ å磨ï¼2:å磨ä¸ï¼3:已宿 */ @ApiModelProperty(value = "åç£¨ç¶æ;1:å¾ å磨ï¼2:å磨ä¸ï¼3:已宿") private String sharpeningStatus; /** 责任人 */ @ApiModelProperty(value = "责任人") @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id") lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/OutboundDetailVo.java
@@ -93,4 +93,7 @@ /**å°è´¦æç»è¡¨ä¸»é®id*/ @ApiModelProperty(value = "å°è´¦æç»è¡¨ä¸»é®id,å·¥å ·éæ©æ¶å»éç¨") private String toolLedgerDetailId; /**å·¥å ·å磨表主é®id*/ @ApiModelProperty(value = "å·¥å ·å磨表主é®id,éæ©åç£¨å·¥å ·æ¶å»éç¨") private String toolSharpeningId; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/SelectOutboundToolVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package org.jeecg.modules.tms.entity.vo; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; import java.math.BigDecimal; /*** * å·¥å ·åºåºç³è¯·-éæ©åºåºå·¥å ·å表å±ç¤ºå¯¹è±¡å°è£ */ @Data public class SelectOutboundToolVo { /**主é®id*/ @ApiModelProperty(value = "主é®id") private String id; /**å°è´¦æç»id*/ @ApiModelProperty(value = "å°è´¦æç»id") private String toolLedgerDetailId; /**å·¥å ·ç¼ç (å ³èåæ®µ)*/ @ApiModelProperty(value = "å·¥å ·ç¼ç (å ³èåæ®µ,åtms_base_tools表主é®id)") private String toolCode; /**å·¥å ·ç¼ç */ @ApiModelProperty(value = "å·¥å ·ç¼ç (tms_base_tools表tool_codeåæ®µ)") private String toolNum; /**å·¥å ·ç¼å·*/ @ApiModelProperty(value = "å·¥å ·ç¼å·") private String toolId; /**å·¥å ·ä¸æåç§°*/ @ApiModelProperty(value = "å·¥å ·ä¸æåç§°") private String toolName; /**æ°é*/ @ApiModelProperty(value = "æ°é") private BigDecimal quantity; /**åºåº/åºå·*/ @ApiModelProperty(value = "åºåº/åºå·") private String warehouseId; /**ä»åºåç§°*/ @ApiModelProperty(value = "ä»åºåç§°") private String warehouseName; /**åºä½å·*/ @ApiModelProperty(value = "åºä½å·") private String positionCode; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/SharpenStatus.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package org.jeecg.modules.tms.enums; import lombok.Getter; /** * åç£¨ç¶ææä¸¾ */ @Getter public enum SharpenStatus { PENDING("1", "å¾ å磨"), IN_PROGRESS("2", "å磨ä¸"), COMPLETED("3", "已宿"); private final String value; private final String description; SharpenStatus(String value, String description) { this.value = value; this.description = description; } /** * æ ¹æ®ç¶æå¼è·åæä¸¾å®ä¾ * @param status ç¶æå¼ * @return æä¸¾å®ä¾ænull */ public static SharpenStatus fromStatus(String status) { for (SharpenStatus value : values()) { if (value.getValue().equals(status)) { return value; } } return null; } } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/OutboundOrderMapper.java
@@ -1,12 +1,14 @@ package org.jeecg.modules.tms.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.tms.entity.OutboundOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.tms.entity.vo.SelectOutboundToolVo; /** * @Description: tms_outbound_order @@ -18,4 +20,10 @@ IPage<OutboundOrder> queryPageList(Page<OutboundOrder> page, @Param(Constants.WRAPPER) Wrapper<OutboundOrder> queryWrapper); IPage<SelectOutboundToolVo> querySharpenOutboundToolPageList(Page<SelectOutboundToolVo> page, @Param(Constants.WRAPPER) Wrapper<SelectOutboundToolVo> queryWrapper); IPage<SelectOutboundToolVo> queryBorrowOutboundToolPageList(Page<SelectOutboundToolVo> page, @Param(Constants.WRAPPER) Wrapper<SelectOutboundToolVo> queryWrapper); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/OutboundDetailMapper.xml
@@ -37,6 +37,7 @@ t3.supplier_id supplierId, t11.id toolLedgerDetailId, t11.quantity, t13.id toolSharpeningId, ISNULL(t12.warehouse_id, '') + '/' + ISNULL(t12.warehouse_name, '') warehouseName, <choose> <when test="ew.paramNameValuePairs.paramaTableName == '1'"> @@ -72,6 +73,7 @@ LEFT JOIN tms_base_tools t2 on t1.tool_code = t2.id LEFT JOIN tms_tools_config_property t3 on t3.tool_code = t2.id LEFT JOIN tms_tool_ledger_detail t11 on t1.tool_code = t11.tool_code and t1.tool_id = t11.tool_id LEFT JOIN tms_tool_sharpening t13 on t1.tool_code = t13.tool_code and t1.tool_id = t13.tool_id LEFT JOIN tms_warehouse t12 on t1.storage_location = t12.id <choose> <when test="ew.paramNameValuePairs.paramaTableName == '1'"> lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/OutboundOrderMapper.xml
@@ -22,4 +22,43 @@ FROM tms_outbound_order t ${ew.customSqlSegment} </select> <select id="querySharpenOutboundToolPageList" resultType="org.jeecg.modules.tms.entity.vo.SelectOutboundToolVo"> SELECT t1.id, t2.id toolLedgerDetailId, t1.tool_code toolCode, t3.tool_code toolNum, t1.tool_id toolId, t3.chinese_name toolName, t3.tool_model toolModel, t2.quantity, t2.warehouse_id warehouseId, ISNULL(t4.warehouse_id, '') + '/' + ISNULL(t4.warehouse_name, '') warehouseName, t2.position_code positionCode FROM tms_tool_sharpening t1 INNER JOIN tms_tool_ledger_detail t2 on t1.tool_id = t2.tool_id LEFT JOIN tms_base_tools t3 on t1.tool_code = t3.id LEFT JOIN tms_warehouse t4 on t2.warehouse_id = t4.id ${ew.customSqlSegment} </select> <select id="queryBorrowOutboundToolPageList" resultType="org.jeecg.modules.tms.entity.vo.SelectOutboundToolVo"> SELECT t.id, t.id toolLedgerDetailId, t.tool_code toolCode, p.tool_code toolNum, t.tool_id toolId, p.chinese_name toolName, p.tool_model toolModel, t.quantity, t.warehouse_id warehouseId, ISNULL(q.warehouse_id, '') + '/' + ISNULL(q.warehouse_name, '') warehouseName, t.position_code positionCode FROM tms_tool_ledger_detail t LEFT JOIN tms_base_tools p on t.tool_code = p.id LEFT JOIN tms_warehouse q on t.warehouse_id = q.id ${ew.customSqlSegment} </select> </mapper> lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolLedgerDetailMapper.xml
@@ -5,6 +5,7 @@ <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.ToolLedgerDetail"> SELECT t.id, t.id toolLedgerDetailId, t.tool_code toolCode, p.tool_code toolNum, t.tool_id toolId, lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IOutboundOrderService.java
@@ -9,6 +9,7 @@ import org.jeecg.modules.tms.entity.dto.OutBoundOrderFlowDto; import org.jeecg.modules.tms.entity.dto.OutBoundRequestDto; import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto; import org.jeecg.modules.tms.entity.vo.SelectOutboundToolVo; import org.springframework.beans.factory.annotation.Autowired; import java.io.Serializable; import java.util.Collection; @@ -51,4 +52,8 @@ void outBoundByApply(List<OutBoundRequestDto> outBoundRequestList); void outBoundByAdd(List<OutBoundAddDto> boundAddList); IPage<SelectOutboundToolVo> querySharpenOutboundToolPageList(Page<SelectOutboundToolVo> page, Map<String, String[]> parameterMap); IPage<SelectOutboundToolVo> queryBorrowOutboundToolPageList(Page<SelectOutboundToolVo> page, Map<String, String[]> parameterMap); } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java
@@ -30,10 +30,8 @@ import org.jeecg.modules.tms.entity.dto.OutBoundOrderFlowDto; import org.jeecg.modules.tms.entity.dto.OutBoundRequestDto; import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto; import org.jeecg.modules.tms.enums.OutBillStatus; import org.jeecg.modules.tms.enums.OutBoundStatusEnum; import org.jeecg.modules.tms.enums.OutStorehouseType; import org.jeecg.modules.tms.enums.ToolCirculationStatus; import org.jeecg.modules.tms.entity.vo.SelectOutboundToolVo; import org.jeecg.modules.tms.enums.*; import org.jeecg.modules.tms.mapper.OutboundDetailMapper; import org.jeecg.modules.tms.convert.OutboundOrderConvert; import org.jeecg.modules.tms.mapper.OutboundOrderMapper; @@ -67,6 +65,8 @@ private IOutStoreDetailService outStoreDetailService; @Autowired private IBaseToolsService baseToolsService; @Autowired private IToolsSharpeningService toolsSharpeningService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired @@ -206,13 +206,13 @@ String toolCode = detail.getToolCode(); List<ToolLedgerDetail> ledgerDetailList = toolLedgerDetailList.stream().filter(item -> Objects.equals(item.getToolCode(), toolCode) && Objects.equals(item.getToolId(), detail.getToolId())).collect(Collectors.toList()); BaseTools tools = baseToolsService.getById(toolCode); if (CollectionUtil.isEmpty(ledgerDetailList)) { BaseTools tools = baseToolsService.getById(toolCode); throw new JeecgBootException("ç¼ç 为ã" + tools.getToolCode() + "ãçå·¥å ·ï¼åºåä¸è¶³ï¼"); } else { ToolLedgerDetail toolLedgerDetail = ledgerDetailList.get(0); if (toolLedgerDetail.getQuantity().compareTo(detail.getOutboundQuantity()) < 0) { throw new JeecgBootException("ç¼ç 为ã" + toolLedgerDetail.getToolCode() + "ãçå·¥å ·ï¼åºåä¸è¶³ï¼"); throw new JeecgBootException("ç¼ç 为ã" + tools.getToolCode() + "ãçå·¥å ·ï¼åºåä¸è¶³ï¼"); } else { //æ£åå°è´¦æç»ä¸çåºåï¼æ§è¡éåº if (StrUtil.isBlank(detail.getToolId())) { @@ -386,22 +386,32 @@ Map<String, ToolLedger> toolLedgerMap = toolLedgerService.list(new LambdaQueryWrapper<ToolLedger>().in(ToolLedger::getToolId, toolIdList)).stream() .collect(Collectors.toMap(ToolLedger::getToolId, item -> item, (k1, k2) -> k1)); LambdaQueryWrapper<ToolLedgerDetail> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ToolLedgerDetail> ledgerDetailQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ToolSharpening> toolSharpenQueryWrapper = new LambdaQueryWrapper<>(); for (int i = 0; i < outboundDetailList.size(); i++) { if (i > 0) { queryWrapper.or(); ledgerDetailQueryWrapper.or(); toolSharpenQueryWrapper.or(); } OutboundDetail detail = outboundDetailList.get(i); queryWrapper.or(wrapper -> ledgerDetailQueryWrapper.or(wrapper -> wrapper.eq(ToolLedgerDetail::getToolCode, detail.getToolCode()) .eq(ToolLedgerDetail::getToolId, detail.getToolId()) //妿ä¸ç®¡å°æï¼è¯¥å段为空 ); toolSharpenQueryWrapper.or(wrapper -> wrapper.eq(ToolSharpening::getToolCode, detail.getToolCode()) .eq(ToolSharpening::getToolId, detail.getToolId()) .eq(ToolSharpening::getSharpeningStatus, SharpenStatus.PENDING.getValue()) ); } List<ToolLedgerDetail> toolLedgerDetailList = toolLedgerDetailService.list(queryWrapper); List<ToolLedgerDetail> toolLedgerDetailList = toolLedgerDetailService.list(ledgerDetailQueryWrapper); List<ToolSharpening> toolSharpeningList = toolsSharpeningService.list(toolSharpenQueryWrapper); List<ToolLedger> toolLedgerUpdateList = CollectionUtil.newArrayList(); List<ToolLedgerDetail> toolLedgerDetailUpdateList = CollectionUtil.newArrayList(); List<OutStoreDetail> outStoreAddList = CollectionUtil.newArrayList(); List<OutboundDetail> outboundDetailUpdateList = CollectionUtil.newArrayList(); List<ToolSharpening> toolSharpeningUpdateList = CollectionUtil.newArrayList(); for (OutboundDetail detail : outboundDetailList) { //æ´æ°åºåå°è´¦ @@ -448,6 +458,15 @@ toolLedgerDetailUpdateList.add(item); }); if (outStorehouseType == OutStorehouseType.GRINDING_OUTBOUND) { //æ´æ°å磨åç¶æ toolSharpeningList.stream().filter(item -> item.getToolCode().equals(detail.getToolCode()) && item.getToolId().equals(detail.getToolId())) .findFirst().ifPresent(item -> { item.setSharpeningStatus(SharpenStatus.IN_PROGRESS.getValue()); toolSharpeningUpdateList.add(item); }); } //è®°å½åºåºæµæ°´ OutStoreDetail outStoreDetail = new OutStoreDetail() .setToolCode(detail.getToolCode()) @@ -473,6 +492,7 @@ toolLedgerDetailService.updateBatchById(toolLedgerDetailUpdateList); outStoreDetailService.saveBatch(outStoreAddList); outboundDetailService.updateBatchById(outboundDetailUpdateList); toolsSharpeningService.updateBatchById(toolSharpeningUpdateList); //æ´æ°ç³è¯·å boolean allMatch = outboundDetailService.list(new LambdaQueryWrapper<OutboundDetail>() @@ -534,7 +554,10 @@ .toMap(OutBoundAddDto::getToolLedgerDetailId, item -> item, (k1, k2) -> k1)); Map<String, ToolLedgerDetail> toolLedgerDetailMap = toolLedgerDetailService.listByIds(boundAddDtoMap.keySet()).stream() .collect(Collectors.toMap(ToolLedgerDetail::getId, item -> item, (k1, k2) -> k1)); List<ToolSharpening> toolSharpeningList = toolsSharpeningService.list(new LambdaQueryWrapper<ToolSharpening>() .in(ToolSharpening::getToolCode, toolBoundQuantityMap.keySet()).eq(ToolSharpening::getSharpeningStatus, SharpenStatus.PENDING.getValue())); List<ToolLedgerDetail> toolLedgerDetailUpdateList = CollectionUtil.newArrayList(); List<ToolSharpening> toolSharpeningUpdateList = CollectionUtil.newArrayList(); for (String toolLedgerDetailId : boundAddDtoMap.keySet()) { OutBoundAddDto outBoundAddDto = boundAddDtoMap.get(toolLedgerDetailId); BigDecimal outboundQuantity = outBoundAddDto.getOutboundQuantity(); @@ -563,6 +586,12 @@ break; case GRINDING_OUTBOUND: toolLedgerDetail.setStatus(ToolCirculationStatus.GRINDING.getValue()); //åæ¶æ´æ°å磨åç¶æ toolSharpeningList.stream().filter(item -> item.getToolCode().equals(outBoundAddDto.getToolCode()) && item.getToolId().equals(outBoundAddDto.getToolId())).findFirst().ifPresent(item -> { item.setSharpeningStatus(SharpenStatus.IN_PROGRESS.getValue()); toolSharpeningUpdateList.add(item); }); break; default: throw new JeecgBootException("æªç¥çåºåºç±»åï¼"); @@ -573,6 +602,7 @@ } toolLedgerService.updateBatchById(toolLedgerUpdateList); toolLedgerDetailService.updateBatchById(toolLedgerDetailUpdateList); toolsSharpeningService.updateBatchById(toolSharpeningUpdateList); //è®°å½åºåºæµæ°´ List<OutStoreDetail> outStoreAddList = CollectionUtil.newArrayList(); for (OutBoundAddDto outBoundAddDto : boundAddList) { @@ -588,6 +618,53 @@ outStoreDetailService.saveBatch(outStoreAddList); } @Override public IPage<SelectOutboundToolVo> querySharpenOutboundToolPageList(Page<SelectOutboundToolVo> page, Map<String, String[]> parameterMap) { QueryWrapper<SelectOutboundToolVo> queryWrapper = Wrappers.query(); String[] toolCodes = parameterMap.get("toolCode"); if (toolCodes != null && toolCodes.length > 0) { queryWrapper.like("t3.tool_code", toolCodes[0]); } String[] classifyIds = parameterMap.get("classifyId"); if (classifyIds != null && classifyIds.length > 0) { queryWrapper.eq("t3.classify_id", classifyIds[0]); } String[] excludeIds = parameterMap.get("excludeIds"); if (excludeIds != null && excludeIds.length > 0) { String[] idArray = excludeIds[0].split(","); queryWrapper.notIn("t1.id", idArray); } queryWrapper.eq("t1.sharpening_status", SharpenStatus.PENDING.getValue()); return this.baseMapper.querySharpenOutboundToolPageList(page, queryWrapper); } @Override public IPage<SelectOutboundToolVo> queryBorrowOutboundToolPageList(Page<SelectOutboundToolVo> page, Map<String, String[]> parameterMap) { QueryWrapper<SelectOutboundToolVo> queryWrapper = Wrappers.query(); String[] toolCodes = parameterMap.get("toolCode"); if (toolCodes != null && toolCodes.length > 0) { queryWrapper.like("p.tool_code", toolCodes[0]); } String[] statuses = parameterMap.get("status"); if (statuses != null && statuses.length > 0) { queryWrapper.eq("t.status", statuses[0]); } String[] quantities = parameterMap.get("quantity"); if (quantities != null && quantities.length > 0) { queryWrapper.gt("t.quantity", quantities[0]); } String[] classifyIds = parameterMap.get("classifyId"); if (classifyIds != null && classifyIds.length > 0) { queryWrapper.eq("p.classify_id", classifyIds[0]); } String[] excludeIds = parameterMap.get("excludeIds"); if (excludeIds != null && excludeIds.length > 0) { String[] idArray = excludeIds[0].split(","); queryWrapper.notIn("t.id", idArray); } return this.baseMapper.queryBorrowOutboundToolPageList(page, queryWrapper); } private boolean fromOneApply(List<OutBoundRequestDto> outBoundRequestList) { long count = outBoundRequestList.stream().map(OutBoundRequestDto::getOutBoundOrderId).distinct().count();