3 天以前 | zhangherong | ![]() |
3 天以前 | Houjie | ![]() |
3 天以前 | lixiangyu | ![]() |
3 天以前 | cuilei | ![]() |
3 天以前 | cuilei | ![]() |
3 天以前 | zhangherong | ![]() |
3 天以前 | zhangherong | ![]() |
3 天以前 | zhangherong | ![]() |
3 天以前 | cuilei | ![]() |
3 天以前 | cuilei | ![]() |
4 天以前 | lixiangyu | ![]() |
db/Ë«ÁÖлð¾æMESÊý¾Ý¿âÉè¼Æ.pdma.json
@@ -4,7 +4,7 @@ "avatar": "", "version": "4.9.2", "createdTime": "2025-3-10 16:38:19", "updatedTime": "2025-9-9 17:51:22", "updatedTime": "2025-9-12 15:03:56", "dbConns": [], "profile": { "default": { @@ -71266,7 +71266,9 @@ "B57F92D3-3089-453E-A007-85C497CEE088", "EE37A932-3559-47C8-A1F3-1E788DE4A116", "D1A16DCC-C4AB-4717-A74C-1B52B918A87F", "378CF92C-B63B-4D7F-84DF-5D2F84CE4753" "378CF92C-B63B-4D7F-84DF-5D2F84CE4753", "9F7C10B2-9B87-4E80-AF35-D054CEEF11FA", "C4D7D8D8-A80F-4A15-B253-50CF701ADF78" ], "refViews": [], "refDiagrams": [], 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,16 @@ 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") @GetMapping("/handleBack") public Result<?> handleBack(@RequestParam("orderId") String orderId) { return cuttingReceiveService.handleBack(orderId); } } src/main/java/org/jeecg/modules/cms/entity/CuttingInventory.java
@@ -77,4 +77,11 @@ @TableField(exist = false) // 表示è¿ä¸æ¯æ°æ®åºå段 private String cuttingBarcodeSearch; @TableField(exist = false) // 表示è¿ä¸æ¯æ°æ®åºå段 private String workpieceMaterial; @TableField(exist = false) // 表示è¿ä¸æ¯æ°æ®åºå段 private BigDecimal ratedLife; } 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,7 @@ public interface ICuttingReceiveService extends IService<CuttingReceive> { IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params); Result<?> submit(String orderId); Result<?> handleBack(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,26 @@ 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.CuttingInventory; import org.jeecg.modules.cms.entity.CuttingReceive; import org.jeecg.modules.cms.entity.CuttingReceiveDetail; import org.jeecg.modules.cms.entity.RatedLife; 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.jeecg.modules.cms.service.IRatedLifeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; /** @@ -17,12 +30,139 @@ * @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; @Autowired private IRatedLifeService ratedLifeService; @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()); } } @Override public synchronized Result<?> handleBack(String orderId) { long startTime = System.currentTimeMillis(); try { // 1. æ´æ°é¢ç¨åç¶æä¸ºå·²å½è¿ CuttingReceive cuttingReceive = this.getById(orderId); if (cuttingReceive == null) { return Result.error("æªæ¾å°å¯¹åºçé¢ç¨å"); } // æ£æ¥é¢ç¨åç¶æï¼åªå è®¸ç¶æä¸º"å·²é¢ç¨"çé¢ç¨åè¿è¡å½è¿æä½ if (!"2".equals(cuttingReceive.getOrderStatus())) { return Result.error("åªæç¶æä¸ºå·²é¢ç¨çé¢ç¨åæè½æ§è¡å½è¿æä½"); } cuttingReceive.setOrderStatus("3"); // 设置为已å½è¿ç¶æ 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, "æ£å¸¸"); } // 5. å¯¿å½æ£å for (CuttingReceiveDetail detail : detailList) { if (detail.getInventoryId() != null && !detail.getInventoryId().isEmpty()) { CuttingInventory inventory = cuttingInventoryService.getById(detail.getInventoryId()); //FIXME:ratedLife空æé RatedLife ratedLife = ratedLifeService.lambdaQuery() //é¢å®å¯¿å½ .eq(RatedLife::getCuttingId, inventory.getCuttingId()) .eq(RatedLife::getWorkpieceMaterial, inventory.getWorkpieceMaterial()) .one(); BigDecimal currentLife = inventory.getCurrentLife().divide(BigDecimal.valueOf(100),java.math.RoundingMode.HALF_UP);//å½å寿å½ç¾åæ¯ Integer useLife = detail.getUsedLife();//使ç¨å¯¿å½ //计ç®å ¬å¼: (ratedLife * currentLife - useLife) * 100 BigDecimal newLife = ratedLife.getRatedLife() .multiply(currentLife) .subtract(BigDecimal.valueOf(useLife)) .multiply(BigDecimal.valueOf(100)); // æ´æ°åºåå¯¿å½ inventory.setCurrentLife(newLife); cuttingInventoryService.updateById(inventory); } } 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()); } } } src/main/java/org/jeecg/modules/eam/controller/EamInspectionOrderController.java
@@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.util.TranslateDictTextUtils; import org.jeecg.modules.eam.constant.BusinessCodeConst; @@ -109,6 +110,7 @@ String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.INSPECTION_ORDER_CODE_RULE); eamInspectionOrderRequest.setOrderNum(codeSeq); eamInspectionOrderRequest.setCreationMethod(String.valueOf(OrderCreationMethodEnum.MANUAL)); eamInspectionOrderRequest.setDelFlag(CommonConstant.DEL_FLAG_0); eamInspectionOrderService.addInspectionOrder(eamInspectionOrderRequest); return Result.OK("æ·»å æåï¼"); } src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; @@ -25,7 +25,6 @@ import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamMaintenanceOrderDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; import org.jeecg.modules.eam.vo.MaintenanceStandardDetailVo; @@ -43,10 +42,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -296,37 +296,58 @@ * @return */ @RequestMapping(value = "/inspectionImportExcel", method = RequestMethod.POST) public Result<?> inspectionImportExcel(HttpServletRequest request, HttpServletResponse response) { public Result<?> inspectionImportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { // è·åä¸ä¼ æä»¶å¯¹è±¡ MultipartFile file = entity.getValue(); byte[] bytes = file.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(1); params.setSheetNum(1); params.setLastOfInvalidRow(23); params.setTitleRows(2); // è·³è¿å2è¡æ é¢ params.setHeadRows(2); // 第3è¡æ¯è¡¨å¤´ params.setSheetNum(1); // 读å第ä¸ä¸ªå·¥ä½è¡¨ params.setNeedSave(true); EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { //读å设å¤ç¼å·ï¼å¾çç readExcel(file, standardRequest); log.info("读åå°ç设å¤ç¼ç : {}", standardRequest.getEquipmentCode()); EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode()); if(equipment == null) { log.error("设å¤ä¸åå¨ï¼{}", standardRequest.getEquipmentCode()); continue; } standardRequest.setStandardName(standardRequest.getEquipmentName() + "ç¹æ£æ å"); standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.POINT_INSPECTION.name()); standardRequest.setEquipmentId(equipment.getId()); //读åä¿å »æç»å 容 List<MaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), MaintenanceStandardImport.class, params); // 读åä¿å »æç»å 容忷»å è°è¯ä¿¡æ¯ log.info("Excelå¯¼å ¥åæ°: titleRows={}, headRows={}, lastOfInvalidRow={}", params.getTitleRows(), params.getHeadRows(), params.getLastOfInvalidRow()); List<MaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), MaintenanceStandardImport.class, params); log.info("å®é 读åå°çæç»æ°é: {}", list.size()); //æç»é¡¹ List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList()); List<EamMaintenanceStandardDetail> tableList = new ArrayList<>(); for(MaintenanceStandardImport maintenanceStandardImport : list) { try { Integer.valueOf(maintenanceStandardImport.getItemCode()); } catch (NumberFormatException e) { break; } tableList.add(new EamMaintenanceStandardDetail(maintenanceStandardImport)); } standardRequest.setTableDetailList(tableList); log.info("转æ¢åçæç»æ°é: {}", tableList.size()); String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE); standardRequest.setStandardCode(codeSeq); boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest); @@ -334,10 +355,8 @@ log.error("ä¿åå¤±è´¥ï¼ {}", standardRequest.getEquipmentCode()); } } catch (Exception e) { //update-begin-author:taoyan date:20211124 for: å¯¼å ¥æ°æ®éå¤å¢å æç¤º String msg = e.getMessage(); log.error("æä»¶ {} å¤çå¼å¸¸ï¼ {}", file.getOriginalFilename(), msg, e); //update-end-author:taoyan date:20211124 for: å¯¼å ¥æ°æ®éå¤å¢å æç¤º } finally { try { file.getInputStream().close(); @@ -350,8 +369,10 @@ } /** * éè¿excelå¯¼å ¥æ°æ® * å£ä¿éè¿excelå¯¼å ¥æ°æ® * * @param request * @param response @@ -368,6 +389,7 @@ params.setTitleRows(2); params.setHeadRows(1); params.setSheetNum(1); params.setLastOfInvalidRow(23); params.setNeedSave(true); EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { @@ -379,6 +401,7 @@ continue; } standardRequest.setStandardName(standardRequest.getEquipmentName() + "ä¿å »æ å"); standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.QUARTERLY_MAINTENANCE.name()); standardRequest.setEquipmentId(equipment.getId()); //读åä¿å »æç»å 容 @@ -408,6 +431,68 @@ return Result.ok("æä»¶å¯¼å ¥å®æï¼"); } /** * å¹´ä¿éè¿excelå¯¼å ¥æ°æ® * * @param request * @param response * @return */ @RequestMapping(value = "/annualMaintenanceImportExcel", method = RequestMethod.POST) public Result<?> annualMaintenanceImportExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { // è·åä¸ä¼ æä»¶å¯¹è±¡ MultipartFile file = entity.getValue(); ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(1); params.setSheetNum(1); params.setLastOfInvalidRow(23); params.setNeedSave(true); EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { //读å设å¤ç¼å·ï¼å¾çç readWeekExcel(file, standardRequest); EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode()); if(equipment == null) { log.error("设å¤ä¸åå¨ï¼{}", standardRequest.getEquipmentCode()); continue; } standardRequest.setStandardName(standardRequest.getEquipmentName() + "ä¿å »æ å"); standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.ANNUAL_MAINTENANCE.name()); standardRequest.setEquipmentId(equipment.getId()); //读åä¿å »æç»å 容 List<WeekMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), WeekMaintenanceStandardImport.class, params); //æç»é¡¹ List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList()); standardRequest.setTableDetailList(tableList); String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE); standardRequest.setStandardCode(codeSeq); boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest); if (!b) { log.error("ä¿åå¤±è´¥ï¼ {}", standardRequest.getEquipmentCode()); } } catch (Exception e) { //update-begin-author:taoyan date:20211124 for: å¯¼å ¥æ°æ®éå¤å¢å æç¤º String msg = e.getMessage(); log.error("æä»¶ {} å¤çå¼å¸¸ï¼ {}", file.getOriginalFilename(), msg, e); //update-end-author:taoyan date:20211124 for: å¯¼å ¥æ°æ®éå¤å¢å æç¤º } finally { try { file.getInputStream().close(); } catch (IOException e) { log.error(e.getMessage(), e); } } } return Result.ok("æä»¶å¯¼å ¥å®æï¼"); } /** * 读åExcel 第ä¸è¡ï¼ 第äºè¡çä¿¡æ¯ï¼å æ¬å¾çä¿¡æ¯ * @param file @@ -426,7 +511,7 @@ //第äºè¡è¯»å Row row = sheet.getRow(1); //设å¤ç¼ç Cell equipmentCode = row.getCell(5); Cell equipmentCode = row.getCell(8); Cell targetCell = row.getCell(0); //æä»¶ç¼ç String fileCodeValue = getCellValue(targetCell); @@ -434,11 +519,16 @@ throw new JeecgBootException("Excelã" + file.getOriginalFilename() + "ã第äºè¡ç¬¬ä¸åè·åå°ç设å¤ç¼å·ä¸ºç©ºï¼"); } request.setFileCode(fileCodeValue.trim()); if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); }else if(CellType.STRING.equals(equipmentCode.getCellType())) { request.setEquipmentCode(equipmentCode.getStringCellValue()); // if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { // request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); // }else if(CellType.STRING.equals(equipmentCode.getCellType())) { // request.setEquipmentCode(equipmentCode.getStringCellValue()); // } String equipmentCodeStr = extractEquipmentCode(equipmentCode); if (StringUtils.isBlank(equipmentCodeStr)) { throw new JeecgBootException("Excelã " + file.getOriginalFilename() + "ãæ²¡æè¯»åå°ææç设å¤ç¼å·ï¼å¯¼å ¥å¤±è´¥ï¼"); } request.setEquipmentCode(equipmentCodeStr); if (StringUtils.isBlank(request.getEquipmentCode())) { throw new JeecgBootException("Excelã " + file.getOriginalFilename() + "ãæ²¡æè¯»åå°è®¾å¤ç¼å·ï¼å¯¼å ¥å¤±è´¥ï¼"); } @@ -502,10 +592,16 @@ } Sheet sheet = book.getSheetAt(0); //第ä¸è¡è¯»å Row row = sheet.getRow(0); //第äºè¡è¯»å Row row = sheet.getRow(1); //设å¤ç¼ç Cell equipmentCode = row.getCell(10); Cell equipmentCode = row.getCell(13); Cell targetCell = row.getCell(0); String fileCodeValue = getCellValue(targetCell); if (fileCodeValue == null || fileCodeValue.trim().isEmpty()) { throw new JeecgBootException("Excelã" + file.getOriginalFilename() + "ã第äºè¡ç¬¬ä¸åè·åå°ç设å¤ç¼å·ä¸ºç©ºï¼"); } request.setFileCode(fileCodeValue.trim()); if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); }else if(CellType.STRING.equals(equipmentCode.getCellType())) { @@ -515,20 +611,20 @@ throw new JeecgBootException("Excelã " + file.getOriginalFilename() + "ãæ²¡æè¯»åå°è®¾å¤ç¼å·ï¼å¯¼å ¥å¤±è´¥ï¼"); } //åå§æ¥æ Cell initialDate = row.getCell(6); Cell initialDate = row.getCell(11); if (DateUtil.isCellDateFormatted(initialDate)) { request.setInitialDate(initialDate.getDateCellValue()); } else { request.setInitialDate(new Date()); } //设å¤åç§° Cell equipmentName = row.getCell(8); request.setEquipmentName(equipmentName.getStringCellValue()); // Cell equipmentName = row.getCell(8); // request.setEquipmentName(equipmentName.getStringCellValue()); //第äºè¡è¯»å row = sheet.getRow(1); row = sheet.getRow(4); //ä¿å »å¨æ Cell period = row.getCell(6); Cell period = row.getCell(7); if (CellType.NUMERIC.equals(period.getCellType())) { request.setMaintenancePeriod((int) period.getNumericCellValue()); } else { @@ -541,4 +637,72 @@ log.error("读åExcelä¿¡æ¯å¤±è´¥ï¼{}", e.getMessage(), e); } } private int findDataEndRow(InputStream inputStream) throws IOException { Workbook workbook = null; try { workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); int lastRowNum = sheet.getLastRowNum(); log.info("Excelæä»¶æ»è¡æ°: {}", lastRowNum); // æ¾å°"宿½è¦é¢"è¡ï¼ä½ä¸ºæ°æ®ç»æçæ å¿ for (int i = 0; i <= lastRowNum; i++) { Row row = sheet.getRow(i); if (row == null) continue; // æ£æ¥ç¬¬A忝å¦å å«"宿½è¦é¢" Cell cell = row.getCell(0); if (cell != null && cell.getCellType() == CellType.STRING) { String value = getCellValue(cell).replaceAll("\\s+", ""); if ("宿½è¦é¢".equals(value)) { log.info("æ¾å°'宿½è¦é¢'å¨ç¬¬{}è¡", i); return i - 1; // è¿å"宿½è¦é¢"è¡ä¹åçè¡å· } } } // å¦ææ²¡ææ¾å°"宿½è¦é¢"ï¼è¿åæåä¸è¡ log.info("æªæ¾å°'宿½è¦é¢'ï¼è¿åæåä¸è¡: {}", lastRowNum); return lastRowNum; } finally { if (workbook != null) { workbook.close(); } } } /** * ä»åå æ ¼ä¸æå设å¤ç¼å·ï¼å»é¤åç¼å¦"设å¤ç¼å·:" * @param cell åå æ ¼å¯¹è±¡ * @return 纯设å¤ç¼å·å符串 */ private String extractEquipmentCode(Cell cell) { if (cell == null) { return null; } String cellValue = getCellValue(cell); if (StringUtils.isBlank(cellValue)) { return null; } // å»é¤ååç©ºæ ¼ cellValue = cellValue.trim(); // ä½¿ç¨æ£åè¡¨è¾¾å¼æåæ°åé¨å Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(cellValue); if (matcher.find()) { return matcher.group(); } // å¦ææ²¡ææ¾å°æ°åï¼è¿ååå¼ï¼å¯è½æå ¶ä»æ ¼å¼ï¼ return cellValue; } } src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java
@@ -8,18 +8,46 @@ @Data public class MaintenanceStandardImport implements Serializable { @Excel(name = "NO", width = 15) // @Excel(name = "NO", width = 15) // private String itemCode; // // @Excel(name = "ç¹æ£å 容", width = 15) // private String itemName; // // @Excel(name = "ç¹æ£æ¹æ³", width = 15) // private String subItemName; // // @Excel(name = "é¨ä½åç§°", width = 15) // private String itemPart; // // @Excel(name = "åºå", width = 15) // private String itemDemand; @Excel(name = "NO") private String itemCode; @Excel(name = "ç¹æ£å 容", width = 15) private String itemName; @Excel(name = "ç¹æ£æ¡ä»¶") private String condition; @Excel(name = "ç¹æ£æ¹æ³", width = 15) private String subItemName; @Excel(name = "é¨ä½åç§°", width = 15) @Excel(name = "é¨ä½åç§°") private String itemPart; @Excel(name = "åºå", width = 15) @Excel(name = "ç¹æ£å 容") private String itemName; @Excel(name = "ç¹æ£æ¹æ³") private String subItemName; @Excel(name = "åºå") private String itemDemand; @Excel(name = "å¼å¸¸å¤çåºå") private String abnormal; @Excel(name = "卿") private String period; } src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
@@ -83,9 +83,9 @@ /** * 使ç¨é¨é¨ */ @Excel(name = "使ç¨è½¦é´", width = 25, dictTable = "mdc_production", dicText = "production_name", dicCode = "id", orderNum = "9") @Excel(name = "使ç¨è½¦é´", width = 25, dictTable = "base_factory", dicText = "factory_name", dicCode = "id", orderNum = "9") @ApiModelProperty(value = "使ç¨é¨é¨") @Dict(dicCode = "mdc_production, production_name, id") @Dict(dicCode = "base_factory, factory_name, id") private String orgId; /** * 设å¤ç®¡çå src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
@@ -115,12 +115,6 @@ */ @ApiModelProperty(value = "åèæä»¶") private String referenceFile; /** * ææ°çæå·¥åæ¶é´ * ä¸ä¸æ¬¡çææ¶é´ä¸ºæ¤æ¶é´ + ä¿å »å¨æ */ @ApiModelProperty(value = "ææ°çæå·¥åæ¶é´") private Date lastGenerateTime; //å表å±ç¤º @TableField(exist = false) src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java
@@ -75,6 +75,7 @@ public EamMaintenanceStandardDetail(MaintenanceStandardImport dto) { this.itemCode = Integer.valueOf(dto.getItemCode()); this.itemPart = dto.getItemPart(); this.checkMethod=dto.getCondition(); this.itemName = dto.getItemName(); this.itemDemand = dto.getItemDemand(); } src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -103,14 +103,14 @@ if (sysUser == null) { return page; } if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { //éæ©äºè®¾å¤ï¼æ ¹æ®è®¾å¤idè¿æ»¤è®¾å¤ List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); queryWrapper.in("e.equipment_code", equipArr); } else { //没æéæ©è®¾å¤ï¼æ ¹æ®è½¦é´è¿æ»¤è®¾å¤ queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id", sysUser.getId()); } // if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { // //éæ©äºè®¾å¤ï¼æ ¹æ®è®¾å¤idè¿æ»¤è®¾å¤ // List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); // queryWrapper.in("e.equipment_code", equipArr); // } else { // //没æéæ©è®¾å¤ï¼æ ¹æ®è½¦é´è¿æ»¤è®¾å¤ // queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id", sysUser.getId()); // } //æ¥è¯¢æ¡ä»¶è¿æ»¤ if (eamEquipment != null) { if (StringUtils.isNotBlank(eamEquipment.getEquipmentCode())) { src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -55,14 +55,14 @@ if (sysUser == null) { return page; } if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { //éæ©äºè®¾å¤ï¼æ ¹æ®è®¾å¤idè¿æ»¤è®¾å¤ List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); queryWrapper.in("e.equipment_code", equipArr); } else { //没æéæ©è®¾å¤ï¼æ ¹æ®è½¦é´è¿æ»¤è®¾å¤ queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId()); } // if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { // //éæ©äºè®¾å¤ï¼æ ¹æ®è®¾å¤idè¿æ»¤è®¾å¤ // List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); // queryWrapper.in("e.equipment_code", equipArr); // } else { // //没æéæ©è®¾å¤ï¼æ ¹æ®è½¦é´è¿æ»¤è®¾å¤ // queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId()); // } if(eamMaintenanceStandard != null) { //ç¼ç æ¨¡ç³æ¥è¯¢ if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardCode())) { src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java
@@ -18,7 +18,8 @@ public interface LswMaterialInventoryMapper extends BaseMapper<LswMaterialInventory> { List<LswMaterialInventoryVo> selectLineSideMaterialInventoryByMaterialNumber(@Param("materialNumberList") List<String> bomMaterialNumberList, @Param("factoryId") String factoryId); @Param("factoryId") String factoryId, @Param("heatFlag") String heatFlag); /** * åºåç»è®¡ src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml
@@ -13,7 +13,11 @@ <foreach collection="materialNumberList" item="item" separator="," open="(" close=")"> #{item} </foreach> <if test="heatFlag != null and heatFlag != ''"> AND t2.heat_treatment_flag = #{heatFlag} </if> AND t2.warehouse_id = #{factoryId} AND t2.inventory_status = 'NORMAL' AND t1.del_flag = 0 GROUP BY t1.material_number, src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java
@@ -16,7 +16,7 @@ */ public interface ILswMaterialInventoryService extends IService<LswMaterialInventory> { /** éè¿ç©æç¼ç å线边åºidæ¥è¯¢ç©æåºå */ List<LswMaterialInventoryVo> selectLineSideMaterialInventoryByMaterialNumber(List<String> bomMaterialNumberList, String factoryId); List<LswMaterialInventoryVo> selectLineSideMaterialInventoryByMaterialNumber(List<String> bomMaterialNumberList, String factoryId, String heatFlag); /** * åºåç»è®¡ src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java
@@ -43,8 +43,8 @@ private IFactoryService factoryService; @Override public List<LswMaterialInventoryVo> selectLineSideMaterialInventoryByMaterialNumber(List<String> bomMaterialNumberList, String factoryId) { return lswMaterialInventoryMapper.selectLineSideMaterialInventoryByMaterialNumber(bomMaterialNumberList, factoryId); public List<LswMaterialInventoryVo> selectLineSideMaterialInventoryByMaterialNumber(List<String> bomMaterialNumberList, String factoryId, String heatFlag) { return lswMaterialInventoryMapper.selectLineSideMaterialInventoryByMaterialNumber(bomMaterialNumberList, factoryId, heatFlag); } @Override src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
@@ -13,18 +13,31 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.base.entity.Factory; import org.jeecg.modules.base.enums.ProductionTypeEnum; import org.jeecg.modules.base.service.IFactoryService; import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamInspectionOrder; import org.jeecg.modules.eam.entity.EamInspectionOrderDetail; import org.jeecg.modules.eam.entity.EamProcessCheck; import org.jeecg.modules.eam.service.*; import org.jeecg.modules.mes.dto.MesProductionWorkOrderRepublishRequest; import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest; import org.jeecg.modules.mes.entity.MesKittingCompletenessCheck; import org.jeecg.modules.mes.entity.MesProductionWorkOrder; import org.jeecg.modules.mes.enums.ProductionWorkOrderStatus; import org.jeecg.modules.mes.service.IMesKittingCompletenessCheckService; import org.jeecg.modules.mes.service.IMesProductionWorkOrderService; import org.jeecg.modules.mes.utils.CommonUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; @@ -44,6 +57,20 @@ public class MesProductionWorkOrderController extends JeecgController<MesProductionWorkOrder, IMesProductionWorkOrderService> { @Autowired private IMesProductionWorkOrderService mesProductionWorkOrderService; @Autowired private IMesKittingCompletenessCheckService mesKittingCompletenessCheckService; @Autowired private IEamInspectionOrderService eamInspectionOrderService; @Autowired private IEamInspectionOrderDetailService eamInspectionOrderDetailService; @Autowired private IEamProcessCheckService eamProcessCheckService; @Autowired private IEamProcessCheckDetailService eamProcessCheckDetailService; @Autowired private IEamEquipmentService eamEquipmentService; @Autowired private IFactoryService factoryService; /** * å页å表æ¥è¯¢ @@ -148,8 +175,8 @@ public Result<String> publish(@RequestParam("ids") String ids) { List<String> idList = Arrays.asList(ids.split(",")); List<MesProductionWorkOrder> list = mesProductionWorkOrderService.list(new LambdaQueryWrapper<MesProductionWorkOrder>() .in(MesProductionWorkOrder::getId, idList) .eq(MesProductionWorkOrder::getDelFlag, CommonConstant.DEL_FLAG_0)).stream() .in(MesProductionWorkOrder::getId, idList) .eq(MesProductionWorkOrder::getDelFlag, CommonConstant.DEL_FLAG_0)).stream() .filter(i -> !ProductionWorkOrderStatus.NEW.name().equals(i.getWorkOrderStatus())) .collect(Collectors.toList()); if (!list.isEmpty()) { @@ -169,7 +196,7 @@ } @AutoLog(value = "æäº§å·¥å-éåå¸æäº§è®¡å") @ApiOperation(value="æäº§å·¥å-éåå¸æäº§è®¡å", notes="éåå¸æäº§è®¡å") @ApiOperation(value = "æäº§å·¥å-éåå¸æäº§è®¡å", notes = "éåå¸æäº§è®¡å") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:republish") @PostMapping(value = "/republish") public Result<String> republish(@RequestBody MesProductionWorkOrderRepublishRequest request) { @@ -189,7 +216,7 @@ } @AutoLog(value = "æäº§å·¥å-é½å¥æ§æ£æ¥") @ApiOperation(value="æäº§å·¥å-é½å¥æ§æ£æ¥", notes="é½å¥æ§æ£æ¥") @ApiOperation(value = "æäº§å·¥å-é½å¥æ§æ£æ¥", notes = "é½å¥æ§æ£æ¥") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:workOrderCompletenessCheck") @GetMapping(value = "/workOrderCompletenessCheck") public Result<List<MesKittingCompletenessCheck>> workOrderCompletenessCheck(@RequestParam("id") String id) { @@ -200,6 +227,14 @@ if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) { return Result.error("å½åå·¥åç¶æä¸è½è¿è¡é½å¥æ§æ£æ¥ï¼"); } Factory factory = factoryService.getById(workOrder.getFactoryId()); String productionType = factory.getProductionType(); if (ProductionTypeEnum.HEATTREATMENT.name().equals(productionType)) { //çå¤ç产线 List<MesKittingCompletenessCheck> list = mesProductionWorkOrderService.workOrderCompletenessCheckOnHeatTreatment(workOrder); return Result.ok(list); } //å ¶ä½äº§çº¿ List<MesKittingCompletenessCheck> list = mesProductionWorkOrderService.workOrderCompletenessCheck(workOrder); return Result.ok(list); } @@ -210,17 +245,116 @@ @GetMapping(value = "/execute") public Result<?> execute(@RequestParam("id") String id) { MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id); if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus()) && !CommonConstant.DEFAULT_1.equals(workOrder.getCompletenessCheckFlag()) && !CommonConstant.DEFAULT_1.equals(workOrder.getEquipmentInspectionFlag()) && !CommonConstant.DEFAULT_1.equals(workOrder.getProcessInspectionFlag())) { if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) { return Result.error("å½åå·¥åç¶æä¸è½æ§è¡ï¼"); } //æ£æ¥æ¯å¦åè¿é½å¥æ§æ£æ¥ãå·¥èºç¹æ£ã设å¤ç¹æ£ if (!completeCheck(workOrder)) { return Result.error("请å 宿é½å¥æ§æ£æ¥ãå·¥èºç¹æ£ã设å¤ç¹æ£ï¼"); } MesProductionWorkOrder executeOrder = new MesProductionWorkOrder() .setId(id) .setWorkOrderStatus(ProductionWorkOrderStatus.EXECUTING.name()); mesProductionWorkOrderService.updateById(executeOrder); return Result.ok("æ§è¡æåï¼"); } private boolean completeCheck(MesProductionWorkOrder workOrder) { List<MesKittingCompletenessCheck> completenessCheckList = mesKittingCompletenessCheckService.list(new LambdaQueryWrapper<MesKittingCompletenessCheck>() .eq(MesKittingCompletenessCheck::getWorkOrderId, workOrder.getId())); if (completenessCheckList.isEmpty()) { return false; } List<EamInspectionOrder> inspectionOrderList = eamInspectionOrderService.list(new LambdaQueryWrapper<EamInspectionOrder>() .eq(EamInspectionOrder::getWorkOrderId, workOrder.getId())); if (inspectionOrderList.isEmpty()) { return false; } List<EamProcessCheck> processCheckList = eamProcessCheckService.list(new LambdaQueryWrapper<EamProcessCheck>() .eq(EamProcessCheck::getWorkOrderId, workOrder.getId())); if (processCheckList.isEmpty()) { return false; } return true; } @AutoLog(value = "æäº§å·¥å-工忧è¡åæ£æ¥") @ApiOperation(value = "æäº§å·¥å-工忧è¡åæ£æ¥", notes = "æäº§å·¥å-工忧è¡åæ£æ¥") //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:execute") @GetMapping(value = "/checkBeforeExecute") public Result<?> checkBeforeExecute(@RequestParam("id") String id) { MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id); if (workOrder == null) { throw new JeecgBootException("å·¥åä¸åå¨ï¼"); } Map<String, Object> resMap = new HashMap<>(); //é½å¥æ§æ£æ¥ List<MesKittingCompletenessCheck> completenessCheckList = mesKittingCompletenessCheckService.list(new LambdaQueryWrapper<MesKittingCompletenessCheck>() .eq(MesKittingCompletenessCheck::getWorkOrderId, id)); if (completenessCheckList.isEmpty()) { //æªæ§è¡è¿é½å¥æ§æ£æ¥ resMap.put("completenessCheckFlag", false); } else { List<MesKittingCompletenessCheck> unCompletenessList = completenessCheckList.stream().filter(i -> !CommonConstant.DEFAULT_1.equals(i.getCheckFlag())) .collect(Collectors.toList()); if (unCompletenessList.isEmpty()) { //é½å¥æ§æ£æ¥å ¨é¨éè¿ resMap.put("completenessCheckFlag", true); } else { List<String> unCompletenessListMaterial = unCompletenessList.stream() .map(i -> i.getMaterialNumber() + "[" + i.getMaterialName() + "]").collect(Collectors.toList()); //å卿ªéè¿ resMap.put("completenessCheckFlag", false); resMap.put("unCompletenessCheckList", unCompletenessListMaterial); } } //设å¤ç¹æ£ List<EamInspectionOrder> inspectionOrderList = eamInspectionOrderService.list(new LambdaQueryWrapper<EamInspectionOrder>() .eq(EamInspectionOrder::getWorkOrderId, workOrder.getId())); if (inspectionOrderList.isEmpty()) { //æªæ§è¡è¿è®¾å¤ç¹æ£ resMap.put("inspectionFlag", false); } else { List<String> unInspectEquipmentList = eamEquipmentService.list(new LambdaQueryWrapper<EamEquipment>() .eq(EamEquipment::getOrgId, workOrder.getFactoryId()) .eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0) .apply("NOT EXISTS (SELECT 1 FROM eam_inspection_order t WHERE t.equipment_id = eam_equipment.id AND t.work_order_id = {0})", workOrder.getId()) .apply("EXISTS (SELECT 1 FROM eam_maintenance_standard t WHERE t.equipment_id = eam_equipment.id AND t.del_flag = {0} " + "AND t.standard_status = {1} AND t.maintenance_category = {2})", CommonConstant.DEL_FLAG_0, MaintenanceStandardStatusEnum.NORMAL.name(), MaintenanceCategoryEnum.POINT_INSPECTION.name())) .stream().map(e -> e.getEquipmentCode() + "[" + e.getEquipmentName() + "]").collect(Collectors.toList()); if (unInspectEquipmentList.isEmpty()) { //å ¨é¨è®¾å¤é½å·²ç¹æ£ resMap.put("equipmentInspectFlag", true); } else { //å卿ªç¹æ£çè®¾å¤ resMap.put("equipmentInspectFlag", false); resMap.put("unInspectEquipmentList", unInspectEquipmentList); } } //å·¥èºç¹æ£ List<EamProcessCheck> processCheckList = eamProcessCheckService.list(new LambdaQueryWrapper<EamProcessCheck>() .eq(EamProcessCheck::getWorkOrderId, workOrder.getId())); if (processCheckList.isEmpty()) { //æªæ§è¡è¿å·¥èºç¹æ£ resMap.put("processCheckFlag", false); } else { List<String> unCheckEquipmentList = eamEquipmentService.list(new LambdaQueryWrapper<EamEquipment>() .eq(EamEquipment::getOrgId, workOrder.getFactoryId()) .eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0) .apply("EXISTS (SELECT 1 FROM eam_equipment_process_parameters t WHERE t.equipment_id = eam_equipment.id)") .apply("NOT EXISTS (SELECT 1 FROM eam_process_check t WHERE t.equipment_id = eam_equipment.id AND t.work_order_id = {0})", workOrder.getId())) .stream().map(e -> e.getEquipmentCode() + "[" + e.getEquipmentName() + "]").collect(Collectors.toList()); if (unCheckEquipmentList.isEmpty()) { //å ¨é¨è®¾å¤é½å·²ç¹æ£ resMap.put("processCheckFlag", true); } else { //å卿ªç¹æ£çè®¾å¤ resMap.put("processCheckFlag", false); resMap.put("unCheckEquipmentList", unCheckEquipmentList); } } return Result.ok(resMap); } /** @@ -310,4 +444,20 @@ return super.importExcel(request, response, MesProductionWorkOrder.class); } /** * ç©ææå¨éæ©æäº§å·¥åå表æ¥è¯¢ * * @param pageNo * @param pageSize * @return */ @ApiOperation(value = "æäº§å·¥å-ç©ææå¨å·¥åå表", notes = "æäº§å·¥å-ç©ææå¨å·¥åå表") @GetMapping(value = "/queryWorkOrderByTransfer") public Result<IPage<MesProductionWorkOrder>> queryWorkOrderByTransfer(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Page<MesProductionWorkOrder> page = new Page<>(pageNo, pageSize); IPage<MesProductionWorkOrder> pageList = mesProductionWorkOrderService.queryWorkOrderByTransfer(page); return Result.OK(pageList); } } src/main/java/org/jeecg/modules/mes/mapper/MesProductionWorkOrderMapper.java
@@ -1,15 +1,12 @@ package org.jeecg.modules.mes.mapper; import java.util.List; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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.mes.entity.MesProductionWorkOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @Description: æäº§å·¥å @@ -21,4 +18,11 @@ IPage<MesProductionWorkOrder> queryPageList(Page<MesProductionWorkOrder> page, @Param(Constants.WRAPPER) Wrapper<MesProductionWorkOrder> queryWrapper); /** * ç©ææå¨å·¥åæ¥è¯¢ * @param page * @return */ IPage<MesProductionWorkOrder> queryWorkOrderByTransfer(Page<MesProductionWorkOrder> page); } src/main/java/org/jeecg/modules/mes/mapper/xml/MesProductionWorkOrderMapper.xml
@@ -15,4 +15,14 @@ LEFT JOIN base_shift t3 ON t1.shift_id = t3.id ${ew.customSqlSegment} </select> <select id="queryWorkOrderByTransfer" resultType="org.jeecg.modules.mes.entity.MesProductionWorkOrder"> SELECT t1.* FROM mes_production_work_order t1 LEFT JOIN base_factory t2 ON t1.factory_id = t2.id where t1.work_order_status = 'PUBLISHED' and t2.production_type in ('ASSEMBLE', 'HEATTREATMENT') and t1.plan_quantity > 0 order by t1.create_time desc </select> </mapper> src/main/java/org/jeecg/modules/mes/service/IMesProductionWorkOrderService.java
@@ -23,4 +23,13 @@ IPage<MesProductionWorkOrder> queryPageList(Page<MesProductionWorkOrder> page, Map<String, String[]> parameterMap); List<MesKittingCompletenessCheck> workOrderCompletenessCheck(MesProductionWorkOrder workOrder); List<MesKittingCompletenessCheck> workOrderCompletenessCheckOnHeatTreatment(MesProductionWorkOrder workOrder); /** * ç©ææå¨å·¥åæ¥è¯¢ * @param page * @return */ IPage<MesProductionWorkOrder> queryWorkOrderByTransfer(Page<MesProductionWorkOrder> page); } src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
@@ -234,7 +234,7 @@ List<String> bomMaterialNumberList = processBillMaterialsDetails.stream() .map(PmsProcessBillMaterialsDetail::getMaterialNumber).collect(Collectors.toList()); Map<String, LswMaterialInventoryVo> lswMaterialInventoryMap = lswMaterialInventoryService .selectLineSideMaterialInventoryByMaterialNumber(bomMaterialNumberList, lineSideWarehouse.getId()).stream() .selectLineSideMaterialInventoryByMaterialNumber(bomMaterialNumberList, lineSideWarehouse.getId(), null).stream() .collect(Collectors.toMap(LswMaterialInventoryVo::getMaterialNumber, v1 -> v1, (v1, v2) -> v1)); List<MesKittingCompletenessCheck> completenessCheckResultList = CollectionUtil.newArrayList(); //æ ¹æ®è®¢åBOMæç»ååºé½å¥æ£æ¥ç»æ @@ -260,4 +260,37 @@ }); return completenessCheckResultList; } @Override public List<MesKittingCompletenessCheck> workOrderCompletenessCheckOnHeatTreatment(MesProductionWorkOrder workOrder) { //æ¥è¯¢å·¥åæå±äº§çº¿å¯¹åºççº¿è¾¹ä» LineSideWarehouse lineSideWarehouse = lineSideWarehouseService.list(new LambdaQueryWrapper<LineSideWarehouse>() .eq(LineSideWarehouse::getFactoryId, workOrder.getFactoryId()) .eq(LineSideWarehouse::getDelFlag, CommonConstant.DEL_FLAG_0) .eq(LineSideWarehouse::getWarehouseStatus, CommonConstant.DEFAULT_1)) .stream().findFirst().orElse(null); if (lineSideWarehouse == null) { throw new JeecgBootException("该产线æªé 置线边ä»ï¼"); } //æ¥è¯¢å·¥åçå¤çç©æå¯¹åºæ¯å¯å¨çº¿è¾¹ä»çåºå LswMaterialInventoryVo materialInventoryVo = lswMaterialInventoryService.selectLineSideMaterialInventoryByMaterialNumber(Collections .singletonList(workOrder.getMaterialNumber()), lineSideWarehouse.getId(), CommonConstant.DEFAULT_0) .stream().findFirst().orElse(null); if (materialInventoryVo == null) { throw new JeecgBootException("线边åºç©æä¸åå¨ï¼"); } MesKittingCompletenessCheck completenessCheck = new MesKittingCompletenessCheck() .setMaterialNumber(materialInventoryVo.getMaterialNumber()) .setMaterialName(materialInventoryVo.getMaterialName()) .setRequiredQuantity(workOrder.getPlanQuantity()) .setActualQuantity(materialInventoryVo.getStockQuantity()) .setProductionUnit("PC") .setCheckFlag(materialInventoryVo.getStockQuantity().compareTo(workOrder.getPlanQuantity()) > 0 ? CommonConstant.DEFAULT_1 : CommonConstant.DEFAULT_0); return Collections.singletonList(completenessCheck); } @Override public IPage<MesProductionWorkOrder> queryWorkOrderByTransfer(Page<MesProductionWorkOrder> page) { return this.getBaseMapper().queryWorkOrderByTransfer(page); } } src/main/java/org/jeecg/modules/pms/mapper/PmsProcessBillMaterialsDetailMapper.java
@@ -24,4 +24,12 @@ * @return */ List<PmsProcessBillMaterialsDetail> queryByMaterialNumber(String materialNumber); /** * ç©ææå¨éæ©ç©æä½¿ç¨ * æ ¹æ®çå¤çæ¯å¯ç©ææ¥è¯¢ * @param materialNumber çå¤çç©æç¼ç * @return */ List<PmsProcessBillMaterialsDetail> queryByMaterialNumberOnly(String materialNumber); } src/main/java/org/jeecg/modules/pms/mapper/xml/PmsProcessBillMaterialsDetailMapper.xml
@@ -23,4 +23,9 @@ and t1.material_id = t2.id) </select> <select id="queryByMaterialNumberOnly" resultType="org.jeecg.modules.pms.entity.PmsProcessBillMaterialsDetail"> select DISTINCT t1.material_number, t1.material_name, t1.production_unit from pms_process_bill_materials_detail t1 where t1.material_number = #{materialNumber} </select> </mapper> src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsDetailServiceImpl.java
@@ -54,6 +54,11 @@ if (StringUtils.isBlank(materialNumber)) { return Collections.emptyList(); } return this.getBaseMapper().queryByMaterialNumber(materialNumber); List<PmsProcessBillMaterialsDetail> list = this.getBaseMapper().queryByMaterialNumber(materialNumber); if (CollectionUtil.isEmpty(list)) { //妿æ¯çå¤çï¼åä»£è¡¨éæ©æäº§å·¥åçäº§çæ¯å¯ return this.getBaseMapper().queryByMaterialNumberOnly(materialNumber); } return list; } }