src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
@@ -1,7 +1,7 @@ package com.ruoyi.basic.dto; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.bean.dto.ProductStructureDto; import lombok.Data; import java.util.List; src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -3,10 +3,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.ruoyi.account.mapper.AccountExpenseMapper; import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.home.mapper.HomeMapper; import com.ruoyi.account.mapper.AccountExpenseMapper; import com.ruoyi.approve.mapper.ApproveProcessMapper; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.basic.mapper.CustomerMapper; @@ -25,12 +24,10 @@ import com.ruoyi.dto.MapDto; import com.ruoyi.framework.security.LoginUser; import com.ruoyi.home.dto.*; import com.ruoyi.home.mapper.HomeMapper; import com.ruoyi.home.service.HomeService; import com.ruoyi.production.mapper.ProductionOperationTaskMapper; import com.ruoyi.production.mapper.ProductionAccountMapper; import com.ruoyi.production.mapper.ProductionOrderMapper; import com.ruoyi.production.mapper.ProductionProductInputMapper; import com.ruoyi.production.mapper.ProductionProductOutputMapper; import com.ruoyi.production.bean.dto.ProductionProductOutputDto; import com.ruoyi.production.mapper.*; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.mapper.SysDeptMapper; import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; @@ -1655,7 +1652,7 @@ List<ProductionTaskStatisticsDto> startList = productionOperationTaskMapper.selectTaskStartStats(startStr, endStr); List<com.ruoyi.production.dto.ProductionProductOutputDto> outputList = productionProductOutputMapper List<ProductionProductOutputDto> outputList = productionProductOutputMapper .selectOutputStats(startStr, endStr); Map<String, WorkOrderEfficiencyDto> dateMap = new HashMap<>(); @@ -1675,7 +1672,7 @@ // å®å·¥æ°éåè¯åç if (!CollectionUtils.isEmpty(outputList)) { for (com.ruoyi.production.dto.ProductionProductOutputDto item : outputList) { for (ProductionProductOutputDto item : outputList) { if (item.getCreateTime() != null) { String date = item.getCreateTime().toLocalDate().toString(); WorkOrderEfficiencyDto dto = dateMap.getOrDefault(date, new WorkOrderEfficiencyDto()); src/main/java/com/ruoyi/production/bean/dto/BomImportDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/BomImportDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/ProductStructureDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/ProductStructureDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -58,4 +58,11 @@ @ApiModelProperty("å ³èç©æä¿¡æ¯è¡¨ID") private Long productMaterialId; /** * 强度 */ @ApiModelProperty("强度") @Excel(name = "强度") private String strength; } src/main/java/com/ruoyi/production/bean/dto/ProductionProductInputDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/ProductionProductOutputDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/SalesLedgerProductionAccountingDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/UserAccountDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/UserAccountDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/bean/dto/UserProductionAccountingDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/production/dto/UserProductionAccountingDto.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.production.dto; package com.ruoyi.production.bean.dto; import lombok.Data; src/main/java/com/ruoyi/production/controller/ProductionPlanController.java
@@ -12,11 +12,11 @@ import com.ruoyi.production.service.ProductionPlanService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; @@ -34,78 +34,78 @@ @Api(tags = "主ç产计å") public class ProductionPlanController { // private final ProductionPlanService productionPlanService; // // @GetMapping("/listPage") // @ApiOperation("è·åç产计åå表") // public R<IPage<ProductionPlanVo>> productionPlanListPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) { // return R.ok(productionPlanService.listPage(page, productionPlanDto)); // } // // @GetMapping("/loadProdData") // @ApiOperation("æåéå®ç产计å") // @Log(title = "æåéå®ç产计å", businessType = BusinessType.INSERT) // public R loadProdData() { // productionPlanService.loadProdData(); // return R.ok(); // } // // @PostMapping("/combine") // @Log(title = "åå¹¶ç产计å", businessType = BusinessType.INSERT) // @ApiOperation("åå¹¶ç产计å") // public R combine(@RequestBody ProductionPlanDto productionPlanDto) { // if (productionPlanDto.getIds() == null || productionPlanDto.getIds().isEmpty()) { // return R.fail("è¯·éæ©è¦ä¸åçç产计å"); // } // // if (productionPlanDto.getTotalAssignedQuantity() == null || productionPlanDto.getTotalAssignedQuantity().compareTo(BigDecimal.ZERO) <= 0) { // return R.fail("请è¾å ¥ä¸åæ°é"); // } // return R.ok(productionPlanService.combine(productionPlanDto)); // } // // @PostMapping("") // @Log(title = "å建ç产计å", businessType = BusinessType.INSERT) // @ApiOperation("å建ç产计å") // public R add(@RequestBody ProductionPlanDto productionPlanDto) { // return R.ok(productionPlanService.add(productionPlanDto)); // } // // @PutMapping("") // @Log(title = "æ´æ°ç产计å", businessType = BusinessType.UPDATE) // @ApiOperation("æ´æ°ç产计å") // public R update(@RequestBody ProductionPlanDto productionPlanDto) { // return R.ok(productionPlanService.update(productionPlanDto)); // } // // @DeleteMapping("") // @Log(title = "å é¤ç产计å", businessType = BusinessType.DELETE) // @ApiOperation("å é¤ç产计å") // public R delete(@RequestBody List<Long> ids) { // return R.ok(productionPlanService.removeByIds(ids)); // } // // @PostMapping("/downloadTemplate") // @Log(title = "ä¸è½½ä¸»ç产计åå¯¼å ¥æ¨¡æ¿", businessType = BusinessType.EXPORT) // @ApiOperation("ä¸è½½ä¸»ç产计åå¯¼å ¥æ¨¡æ¿") // public void importTemplate(HttpServletResponse response) { // ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class); // excelUtil.importTemplateExcel(response, "主ç产计åå¯¼å ¥æ¨¡æ¿"); // } // // @PostMapping("/import") // @ApiOperation("主çäº§è®¡åæ°æ®å¯¼å ¥") // @Log(title = "主çäº§è®¡åæ°æ®å¯¼å ¥", businessType = BusinessType.IMPORT) // public R importProdData(@RequestParam("file") MultipartFile file) { // productionPlanService.importProdData(file); // return R.ok("å¯¼å ¥æå"); // } // // @PostMapping("/export") // @ApiOperation("主çäº§è®¡åæ°æ®å¯¼åº") // @Log(title = "主çäº§è®¡åæ°æ®å¯¼åº", businessType = BusinessType.EXPORT) // public void exportProdData(HttpServletResponse response, @RequestBody(required = false) List<Long> ids) { // productionPlanService.exportProdData(response, ids); // } private final ProductionPlanService productionPlanService; @GetMapping("/listPage") @ApiOperation("è·åç产计åå表") public R<IPage<ProductionPlanVo>> productionPlanListPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) { return R.ok(productionPlanService.listPage(page, productionPlanDto)); } @GetMapping("/loadProdData") @ApiOperation("æåéå®ç产计å") @Log(title = "æåéå®ç产计å", businessType = BusinessType.INSERT) public R loadProdData() { productionPlanService.loadProdData(); return R.ok(); } @PostMapping("/combine") @Log(title = "åå¹¶ç产计å", businessType = BusinessType.INSERT) @ApiOperation("åå¹¶ç产计å") public R combine(@RequestBody ProductionPlanDto productionPlanDto) { if (productionPlanDto.getIds() == null || productionPlanDto.getIds().isEmpty()) { return R.fail("è¯·éæ©è¦ä¸åçç产计å"); } if (productionPlanDto.getTotalAssignedQuantity() == null || productionPlanDto.getTotalAssignedQuantity().compareTo(BigDecimal.ZERO) <= 0) { return R.fail("请è¾å ¥ä¸åæ°é"); } return R.ok(productionPlanService.combine(productionPlanDto)); } @PostMapping("") @Log(title = "å建ç产计å", businessType = BusinessType.INSERT) @ApiOperation("å建ç产计å") public R add(@RequestBody ProductionPlanDto productionPlanDto) { return R.ok(productionPlanService.add(productionPlanDto)); } @PutMapping("") @Log(title = "æ´æ°ç产计å", businessType = BusinessType.UPDATE) @ApiOperation("æ´æ°ç产计å") public R update(@RequestBody ProductionPlanDto productionPlanDto) { return R.ok(productionPlanService.update(productionPlanDto)); } @DeleteMapping("") @Log(title = "å é¤ç产计å", businessType = BusinessType.DELETE) @ApiOperation("å é¤ç产计å") public R delete(@RequestBody List<Long> ids) { return R.ok(productionPlanService.removeByIds(ids)); } @PostMapping("/downloadTemplate") @Log(title = "ä¸è½½ä¸»ç产计åå¯¼å ¥æ¨¡æ¿", businessType = BusinessType.EXPORT) @ApiOperation("ä¸è½½ä¸»ç产计åå¯¼å ¥æ¨¡æ¿") public void importTemplate(HttpServletResponse response) { ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class); excelUtil.importTemplateExcel(response, "主ç产计åå¯¼å ¥æ¨¡æ¿"); } @PostMapping("/import") @ApiOperation("主çäº§è®¡åæ°æ®å¯¼å ¥") @Log(title = "主çäº§è®¡åæ°æ®å¯¼å ¥", businessType = BusinessType.IMPORT) public R importProdData(@RequestParam("file") MultipartFile file) { productionPlanService.importProdData(file); return R.ok("å¯¼å ¥æå"); } @PostMapping("/export") @ApiOperation("主çäº§è®¡åæ°æ®å¯¼åº") @Log(title = "主çäº§è®¡åæ°æ®å¯¼åº", businessType = BusinessType.EXPORT) public void exportProdData(HttpServletResponse response, @RequestBody(required = false) List<Long> ids) { productionPlanService.exportProdData(response, ids); } } src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
@@ -2,7 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.bean.dto.ProductionProductInputDto; import com.ruoyi.production.service.ProductionProductInputService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.bean.dto.ProductionProductMainDto; import com.ruoyi.production.service.ProductionProductMainService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
@@ -2,7 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.bean.dto.ProductionProductOutputDto; import com.ruoyi.production.service.ProductionProductOutputService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/ruoyi/production/enums/ProductOrderStatusEnum.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.ruoyi.production.enums; import lombok.Getter; /** * <br> * ç产订åç¶ææä¸¾ç±» * </br> * * @author deslrey * @version 1.0 * @since 2026/03/18 14:18 */ @Getter public enum ProductOrderStatusEnum { WAIT(1, "å¾ å¼å§"), RUNNING(2, "è¿è¡ä¸"), FINISHED(3, "已宿"), CANCEL(4, "已忶"); private final Integer code; private final String desc; ProductOrderStatusEnum(Integer code, String desc) { this.code = code; this.desc = desc; } /** * æ ¹æ®codeè·åæä¸¾ */ public static ProductOrderStatusEnum getByCode(Integer code) { if (code == null) { return null; } for (ProductOrderStatusEnum item : values()) { if (item.getCode().equals(code)) { return item; } } return null; } /** * 夿æ¯å¦å 许å é¤ï¼4ï¼ */ public static boolean canDelete(Integer code) { return WAIT.getCode().equals(code) || CANCEL.getCode().equals(code); } /** * 夿æ¯å¦å 许æ¤åï¼1ï¼ */ public static boolean canRevoke(Integer code) { return WAIT.getCode().equals(code); } /** * 夿æ¯å¦å·²å¼å§ç产ï¼2ã3ï¼ */ public static boolean isStarted(Integer code) { return RUNNING.getCode().equals(code) || FINISHED.getCode().equals(code); } } src/main/java/com/ruoyi/production/mapper/ProductionAccountMapper.java
@@ -1,7 +1,7 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.production.dto.UserAccountDto; import com.ruoyi.production.bean.dto.UserAccountDto; import com.ruoyi.production.pojo.ProductionAccount; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; src/main/java/com/ruoyi/production/mapper/ProductionPlanMapper.java
@@ -1,8 +1,14 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.bean.dto.ProductionPlanDto; import com.ruoyi.production.pojo.ProductionPlan; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -15,4 +21,10 @@ @Mapper public interface ProductionPlanMapper extends BaseMapper<ProductionPlan> { IPage<ProductionPlanDto> listPage(Page page, @Param("c") ProductionPlanDto productionPlanDto); List<ProductionPlanDto> selectWithMaterialByIds(@Param("ids") List<Long> ids); ProductionPlanDto selectProductionPlanDtoById(@Param("productionPlanId") Long productionPlanId); } src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.bean.dto.ProductionProductInputDto; import com.ruoyi.production.pojo.ProductionProductInput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -3,8 +3,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto; import com.ruoyi.production.bean.dto.ProductionProductMainDto; import com.ruoyi.production.bean.dto.SalesLedgerProductionAccountingDto; import com.ruoyi.production.pojo.ProductionOrder; import com.ruoyi.production.pojo.ProductionProductMain; import org.apache.ibatis.annotations.Mapper; src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.bean.dto.ProductionProductOutputDto; import com.ruoyi.production.pojo.ProductionProductOutput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
@@ -1,13 +1,16 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -74,4 +77,15 @@ @ApiModelProperty("é¨é¨ID") @TableField(fill = FieldFill.INSERT) private Long deptId; @ApiModelProperty(value = "计å宿æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planCompleteTime; @ApiModelProperty(value = "ç¶æï¼1.å¾ å¼å§ã2.è¿è¡ä¸ã3.已宿ã4.已忶ï¼") private Integer status; @ApiModelProperty("强度") private String strength; } src/main/java/com/ruoyi/production/pojo/ProductionPlan.java
@@ -6,6 +6,7 @@ import lombok.Getter; import lombok.Setter; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -24,6 +25,7 @@ @ApiModel(value = "ProductionPlan对象", description = "ç产计å表") public class ProductionPlan implements Serializable { @Serial private static final long serialVersionUID = 1L; @ApiModelProperty("id") src/main/java/com/ruoyi/production/service/ProductionPlanService.java
@@ -6,10 +6,9 @@ import com.ruoyi.production.bean.dto.ProductionPlanDto; import com.ruoyi.production.bean.vo.ProductionPlanVo; import com.ruoyi.production.pojo.ProductionPlan; import org.springframework.stereotype.Service; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.util.List; /** @@ -22,7 +21,7 @@ */ public interface ProductionPlanService extends IService<ProductionPlan> { IPage<ProductionPlanVo> listPage(Page page, ProductionPlanDto productionPlanDto); IPage<ProductionPlanVo> listPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto); /** * æå¨åæ¥ src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.bean.dto.ProductionProductInputDto; import com.ruoyi.production.pojo.ProductionProductInput; public interface ProductionProductInputService extends IService<ProductionProductInput> { src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.bean.dto.ProductionProductMainDto; import com.ruoyi.production.pojo.ProductionProductMain; import java.util.ArrayList; src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.bean.dto.ProductionProductOutputDto; import com.ruoyi.production.pojo.ProductionProductOutput; public interface ProductionProductOutputService extends IService<ProductionProductOutput> { src/main/java/com/ruoyi/production/service/SalesLedgerProductionAccountingService.java
@@ -1,7 +1,7 @@ package com.ruoyi.production.service; import com.ruoyi.production.dto.UserAccountDto; import com.ruoyi.production.dto.UserProductionAccountingDto; import com.ruoyi.production.bean.dto.UserAccountDto; import com.ruoyi.production.bean.dto.UserProductionAccountingDto; public interface SalesLedgerProductionAccountingService { UserAccountDto getByUserId(UserProductionAccountingDto dto); src/main/java/com/ruoyi/production/service/impl/ProductionPlanServiceImpl.java
@@ -1,558 +1,65 @@ //package com.ruoyi.production.service.impl; // //import com.alibaba.fastjson2.JSONArray; //import com.alibaba.fastjson2.JSONObject; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.metadata.IPage; //import com.baomidou.mybatisplus.core.toolkit.Wrappers; //import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; //import com.ruoyi.common.exception.ServiceException; //import com.ruoyi.common.exception.base.BaseException; //import com.ruoyi.common.utils.StringUtils; //import com.ruoyi.common.utils.bean.BeanUtils; //import com.ruoyi.common.utils.poi.ExcelUtil; //import com.ruoyi.production.bean.dto.ProductionPlanDto; //import com.ruoyi.production.bean.dto.ProductionPlanImportDto; //import com.ruoyi.production.bean.vo.ProductionPlanVo; //import com.ruoyi.production.mapper.ProductionPlanMapper; //import com.ruoyi.production.pojo.ProductionPlan; //import com.ruoyi.production.service.ProductionPlanService; //import lombok.RequiredArgsConstructor; //import org.springframework.stereotype.Service; //import org.springframework.transaction.annotation.Transactional; //import org.springframework.web.multipart.MultipartFile; // //import jakarta.servlet.http.HttpServletResponse; //import java.math.BigDecimal; //import java.time.Instant; //import java.time.LocalDateTime; //import java.time.ZoneId; //import java.util.*; //import java.util.concurrent.locks.ReentrantLock; //import java.util.stream.Collectors; // ///** // * <p> // * ç产计å表 æå¡å®ç°ç±» // * </p> // * // * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ // * @since 2026-04-21 02:11:10 // */ //@Service //@RequiredArgsConstructor //public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper, ProductionPlan> implements ProductionPlanService { // // private ProductionPlanMapper productionPlanMapper; // // // /** // * 忥éï¼ç¡®ä¿æå¨å宿¶ä»»å¡ä¸åæ¶æ§è¡ // */ // private final ReentrantLock syncLock = new ReentrantLock(); // // @Override // public IPage<ProductionPlanVo> listPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) { // // return productionPlanMapper.selectPage(page, null); // } // // /** // * 页颿å¨åæ¥ // */ // @Override // public void loadProdData() { // syncProdData(1); // } // // /** // * 宿¶ä»»å¡åæ¥ // */ // @Override // public void syncProdDataJob() { // syncProdData(2); // } // // /** // * åå¹¶ç产计å // */ // @Override // @Transactional(rollbackFor = Exception.class) // public boolean combine(ProductionPlanDto productionPlanDto) { // if (productionPlanDto.getIds() == null || productionPlanDto.getIds().isEmpty()) { // return false; // } // // // æ¥è¯¢ä¸»ç产计å // List<ProductionPlanDto> plans = productionPlanMapper.selectWithMaterialByIds(productionPlanDto.getIds()); // // if (plans == null || plans.isEmpty()) { // throw new ServiceException("ä¸å失败,ç产计åä¸åå¨"); // } // // // æ ¡éªæ¯å¦åå¨ä¸åç产ååç§° // String firstProductName = plans.get(0).getProductName(); // if (plans.stream().anyMatch(p -> p.getProductName() == null || !p.getProductName().equals(firstProductName))) { // throw new BaseException("å并失败ï¼åå¨ä¸åç产ååç§°"); // } // // // æ ¡éªæ¯å¦åå¨ä¸åç产åè§æ ¼ // String firstProductSpec = plans.get(0).getModel(); // if (plans.stream().anyMatch(p -> p.getModel() == null || !p.getModel().equals(firstProductSpec))) { // throw new BaseException("å并失败ï¼åå¨ä¸åç产åè§æ ¼"); // } // // // å å å©ä½æ¹æ° // BigDecimal totalRemainingVolume = plans.stream() // .map(ProductionPlan::getRemainingVolume) // .filter(Objects::nonNull) // .reduce(BigDecimal.ZERO, BigDecimal::add); // // 夿ä¸åæ°éæ¯å¦å¤§äºçäºå©ä½æ¹æ° // if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalRemainingVolume) > 0) { // throw new BaseException("æä½å¤±è´¥ï¼ä¸åæ°éä¸è½å¤§äºå©ä½æ¹æ°"); // } // // // å建ç产订å // ProductOrder productOrder = new ProductOrder(); // productOrder.setQuantity(productionPlanDto.getTotalAssignedQuantity()); // productOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime()); // productOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode()); // productOrder.setStrength(productionPlanDto.getStrength()); // productOrder.setProductMaterialSkuId(plans.get(0).getProductMaterialSkuId()); // // Long orderId = productOrderService.insertProductOrder(productOrder); // // // å½ä¸åç产å为ç åææ¿æï¼å°±æåBOMåéä¸å·¥èºè·¯çº¿åéæ°æ®åå ¥å°éè¡¨ä¸ // if ("ç å".equals(productionPlanDto.getProductName())) { // productOrder.setRouteId(productionOrderAppendixService.populateBlocks(orderId, productionPlanDto)); // } // if ("æ¿æ".equals(productionPlanDto.getProductName())) { // productOrder.setRouteId(productionOrderAppendixService.populatePlates(orderId, productionPlanDto)); // } // // æ´æ°ç»å®çå·¥èºè·¯çº¿ // productOrderService.updateById(productOrder); // // // æ ¹æ®ä¸åæ°éï¼ä»ç¬¬ä¸ä¸ªç产计åå¼å§åé æ¹æ° // BigDecimal assignedVolume = BigDecimal.ZERO; // for (ProductionPlan plan : plans) { // BigDecimal volume = plan.getVolume(); // if (volume == null) { // continue; // } // // 计ç®å©ä½æ¹æ° // BigDecimal remainingVolume = plan.getRemainingVolume(); // if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) { // continue; // } // // ProductOrderPlan productOrderPlan = new ProductOrderPlan(); // productOrderPlan.setProductOrderId(productOrder.getId()); // productOrderPlan.setProductionPlanId(plan.getId()); // // if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) { // // æåä¸ä¸ªè®¡åï¼åé å©ä½æ¹æ° // BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume); // BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO).add(lastRemainingVolume); // plan.setAssignedQuantity(assignedQuantity); // plan.setStatus(assignedQuantity.compareTo(plan.getVolume()) >= 0 ? 2 : 1); // productOrderPlan.setAssignedQuantity(lastRemainingVolume); // productionPlanMapper.updateById(plan); // productOrderPlanMapper.insert(productOrderPlan); // break; // } // // // åé å½åè®¡åæ¹æ° // BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO).add(remainingVolume); // plan.setAssignedQuantity(assignedQuantity); // plan.setStatus(assignedQuantity.compareTo(plan.getVolume()) >= 0 ? 2 : 1); // productOrderPlan.setAssignedQuantity(remainingVolume); // // æ´æ°ç产计å // productionPlanMapper.updateById(plan); // // åå»ºå ³èå ³ç³» // productOrderPlanMapper.insert(productOrderPlan); // assignedVolume = assignedVolume.add(remainingVolume); // } // // for (ProductionPlan plan : plans) { // BigDecimal assignedQuantity = Optional.ofNullable(plan.getAssignedQuantity()).orElse(BigDecimal.ZERO); // BigDecimal volume = Optional.ofNullable(plan.getVolume()).orElse(BigDecimal.ZERO); // if (assignedQuantity.compareTo(BigDecimal.ZERO) <= 0) { // plan.setStatus(0); // } else if (assignedQuantity.compareTo(volume) >= 0) { // plan.setStatus(2); // } else { // plan.setStatus(1); // } // productionPlanMapper.updateById(plan); // } // return true; // } // // @Override // @Transactional(rollbackFor = Exception.class) // public boolean add(ProductionPlanDto productionPlanDto) { // if (StringUtils.isEmpty(productionPlanDto.getApplyNo())) { // throw new ServiceException("æ°å¢å¤±è´¥ï¼ç³è¯·åç¼å·ä¸è½ä¸ºç©º"); // } // Long count = productionPlanMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery() // .eq(ProductionPlan::getApplyNo, productionPlanDto.getApplyNo())); // if (count > 0) { // throw new ServiceException("æ°å¢å¤±è´¥ï¼ç³è¯·åç¼å· " + productionPlanDto.getApplyNo() + " å·²åå¨"); // } // productionPlanDto.setDataSourceType(DataSourceTypeEnum.MANUAL.getCode()); // productionPlanDto.setStatus(0); // productionPlanMapper.insert(productionPlanDto); // return true; // } // // @Override // @Transactional(rollbackFor = Exception.class) // public boolean update(ProductionPlanDto productionPlanDto) { // if (productionPlanDto == null || productionPlanDto.getId() == null) { // throw new ServiceException("ç¼è¾å¤±è´¥,æ°æ®ä¸è½ä¸ºç©º"); // } // ProductionPlan productionPlan = getById(productionPlanDto.getId()); // if (productionPlan == null) { // throw new ServiceException("ç¼è¾å¤±è´¥,主ç产计åä¸åå¨"); // } // // if (StringUtils.isNotEmpty(productionPlanDto.getApplyNo()) // && !productionPlanDto.getApplyNo().equals(productionPlan.getApplyNo())) { // // Long count = productionPlanMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery() // .eq(ProductionPlan::getApplyNo, productionPlanDto.getApplyNo()) // .ne(ProductionPlan::getId, productionPlanDto.getId())); // æé¤èªèº« // // if (count > 0) { // throw new ServiceException("ç¼è¾å¤±è´¥ï¼ç³è¯·åç¼å· " + productionPlanDto.getApplyNo() + " 已被å ç¨"); // } // } // // å·²ä¸åç¶æï¼ä¸è½ç¼è¾ // if (productionPlan.getStatus() != 0) { // throw new BaseException("ç¼è¾å¤±è´¥,该ç产计åå·²ä¸åæé¨åä¸åç¶æ,ç¦æ¢ç¼è¾"); // } // // // æ¥è¯¢æ¯å¦æå ³è订å // boolean hasProductOrderPlan = productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery() // .eq(ProductOrderPlan::getProductionPlanId, productionPlanDto.getId())) // .stream().anyMatch(p -> p.getProductOrderId() != null); // // if (hasProductOrderPlan) { // if (productionPlanDto.getVolume().compareTo(productionPlan.getVolume()) < 0) { // throw new BaseException("æ¹æ°ä¸è½éå"); // } // } // // return productionPlanMapper.updateById(productionPlanDto) > 0; // } // // @Override // @Transactional(rollbackFor = Exception.class) // public boolean delete(List<Long> ids) { // // 妿åå¨å·²ä¸åç计åï¼åä¸è½å é¤ // if (productionPlanMapper.selectList(Wrappers.<ProductionPlan>lambdaQuery().in(ProductionPlan::getId, ids)).stream().anyMatch(p -> p.getStatus() == 1 || p.getStatus() == 2)) { // throw new BaseException("å é¤å¤±è´¥ï¼åå¨å·²ä¸åæé¨åä¸åç计å"); // } // // 妿æå ³è订åï¼åä¸è½å é¤ // if (productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery().in(ProductOrderPlan::getProductionPlanId, ids)).stream().anyMatch(p -> p.getProductOrderId() != null)) { // throw new BaseException("å é¤å¤±è´¥ï¼åå¨å ³è订å"); // } // // return productionPlanMapper.deleteBatchIds(ids) > 0; // } // // /** // * åæ¥æ°æ® // */ // @Transactional(rollbackFor = Exception.class) // public void syncProdData(Integer dataSyncType) { // if (!syncLock.tryLock()) { // log.warn("忥æ£å¨è¿è¡ä¸ï¼æ¬æ¬¡ {} åæ¥è¯·æ±è¢«è·³è¿", dataSyncType == 1 ? "æå¨åæ¥" : "宿¶ä»»å¡åæ¥"); // return; // } // // try { // JSONArray searchConditions = new JSONArray(); // JSONObject condition = new JSONObject(); // condition.put("key", "processApprovedResult"); // JSONArray valueArray = new JSONArray(); // valueArray.add("agree"); // // condition.put("value", valueArray); // condition.put("type", "ARRAY"); // condition.put("operator", "in"); // condition.put("componentName", "SelectField"); // searchConditions.add(condition); // // String searchFieldJson = searchConditions.toJSONString(); // // JSONArray dataArr = AliDingUtils.getFormDataList(aliDingConfig, aliDingConfig.getProducePlanFormUuid(), searchFieldJson, this, ProductionPlan::getFormModifiedTime); // // if (dataArr.isEmpty()) { // log.info("æ²¡ææ´å¤æ°æ°æ®éè¦åæ¥"); // return; // } // // // è§£æå¹¶ä¿åæ°æ® // List<ProductionPlan> list = parseProductionPlans(dataArr, dataSyncType, dataArr.size()); // if (!list.isEmpty()) { // // å¤çæ´æ°ææ°å¢ // int affected = processSaveOrUpdate(list); // log.info("æ°æ®åæ¥å®æï¼å ±åæ¥ {} æ¡æ°æ®", affected); // } // // } catch (Exception e) { // log.error("忥ç产计åå¼å¸¸", e); // } finally { // // éæ¾é // syncLock.unlock(); // } // } // // private List<ProductionPlan> parseProductionPlans(JSONArray dataArr, Integer dataSyncType, Integer totalCount) { // List<ProductionPlan> list = new ArrayList<>(); // LocalDateTime now = LocalDateTime.now(); // // for (int i = 0; i < dataArr.size(); i++) { // JSONObject item = dataArr.getJSONObject(i); // String formInstanceId = item.getString("formInstanceId"); // String serialNo = item.getString("serialNo"); // // JSONObject originator = item.getJSONObject("originator"); // String originatorName = originator != null && originator.containsKey("userName") // ? originator.getJSONObject("userName").getString("nameInChinese") : "æªç¥"; // // JSONObject formData = item.getJSONObject("formData"); // JSONArray tableArr = formData.getJSONArray("tableField_l7fytfcn"); // if (tableArr == null || tableArr.isEmpty()) { // continue; // } // // for (int j = 0; j < tableArr.size(); j++) { // JSONObject row = tableArr.getJSONObject(j); // ProductionPlan plan = new ProductionPlan(); // // plan.setFormInstanceId(formInstanceId); // plan.setSerialNo(serialNo); // plan.setApplyNo(formData.getString("textField_l7fytfco")); // plan.setCustomerName(formData.getString("textField_lbkozohg")); // // String materialCode = row.getString("textField_l9xo62q5"); // // æ ¹æ®ç©æç¼ç æ¥è¯¢ç©æä¿¡æ¯è¡¨ï¼å ³èç©æID // if (StringUtils.isNotEmpty(materialCode)) { // LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>(); // skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode); // ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper); // if (sku != null) { // plan.setProductMaterialSkuId(sku.getId()); // } // } // // plan.setLength(row.getInteger("numberField_lb7lgatg_value")); // plan.setWidth(row.getInteger("numberField_lb7lgath_value")); // plan.setHeight(row.getInteger("numberField_lb7lgati_value")); // plan.setQuantity(row.getInteger("numberField_lb7lgatj_value")); // plan.setVolume(row.getBigDecimal("numberField_l7fytfd3_value")); // plan.setStrength(row.getString("radioField_m9urarr2_id")); // // JSONArray dateArr = row.getJSONArray("cascadeDateField_lfxqqluw"); // if (dateArr != null && dateArr.size() == 2) { // try { // long start = Long.parseLong(dateArr.getString(0)); // long end = Long.parseLong(dateArr.getString(1)); // // Date startDate = Date.from(Instant.ofEpochMilli(start) // .atZone(ZoneId.systemDefault()) // .toLocalDate() // .atStartOfDay(ZoneId.systemDefault()) // .toInstant()); // Date endDate = Date.from(Instant.ofEpochMilli(end) // .atZone(ZoneId.systemDefault()) // .toLocalDate() // .atStartOfDay(ZoneId.systemDefault()) // .toInstant()); // // plan.setStartDate(startDate); // plan.setEndDate(endDate); // } catch (Exception e) { // log.warn("è§£ææ¥æå¤±è´¥: {}", dateArr); // } // } // // plan.setSubmitter(originatorName); // plan.setSubmitOrg("å®å¤ä¸å绿è½å®ä¸é墿éå ¬å¸"); // plan.setRemarkOne(formData.getString("textareaField_l7fytfcy")); // plan.setRemarkTwo(formData.getString("textField_l7fytfcx")); // plan.setCreatorName(originatorName); // // JSONObject modifyUser = item.getJSONObject("modifyUser"); // if (modifyUser != null && modifyUser.containsKey("userName")) { // plan.setModifierName(modifyUser.getJSONObject("userName").getString("nameInChinese")); // } // // plan.setFormCreatedTime(AliDingUtils.parseUtcTime(item.getString("createdTimeGMT"))); // plan.setFormModifiedTime(AliDingUtils.parseUtcTime(item.getString("modifiedTimeGMT"))); // plan.setDataSourceType(DataSourceTypeEnum.DING_TALK.getCode()); // plan.setCreateTime(now); // plan.setUpdateTime(now); // plan.setTotalCount(totalCount); // // list.add(plan); // } // } // return list; // } // // private int processSaveOrUpdate(List<ProductionPlan> list) { // if (list == null || list.isEmpty()) { // return 0; // } // int affected = 0; // // // å»é formInstanceId // Set<String> formIds = list.stream() // .map(ProductionPlan::getFormInstanceId) // .collect(Collectors.toSet()); // // // æ¥è¯¢æ°æ®åºå·²ææ°æ® // List<ProductionPlan> existList = this.list(new LambdaQueryWrapper<ProductionPlan>().in(ProductionPlan::getFormInstanceId, formIds)); // // // Map (formInstanceId + materialCode) // Map<String, ProductionPlan> existMap = new HashMap<>(); // for (ProductionPlan p : existList) { // String key = p.getFormInstanceId() + "_" + p.getProductMaterialSkuId(); // existMap.put(key, p); // } // // // éååæ¥æ°æ® // for (ProductionPlan plan : list) { // String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialSkuId(); // ProductionPlan exist = existMap.get(key); // if (exist == null) { // // æ°å¢ // this.save(plan); // affected++; // log.info("æ°å¢æ°æ® formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId()); // } else { // // 夿æ¯å¦éè¦æ´æ° // if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) { // plan.setId(exist.getId()); // plan.setCreateTime(exist.getCreateTime()); // this.updateById(plan); // affected++; // log.info("æ´æ°æ°æ® formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId()); // } // } // } // return affected; // } // // @Override // public List<ProductionPlanSummaryDto> summaryByProductType(ProductionPlanSummaryDto query) { // return baseMapper.selectSummaryByProductType(query); // } // // @Override // @Transactional(rollbackFor = Exception.class) // public void importProdData(MultipartFile file) { // if (file == null || file.isEmpty()) { // throw new ServiceException("å¯¼å ¥æ°æ®ä¸è½ä¸ºç©º"); // } // ExcelUtil<ProductionPlanImportDto> excelUtil = new ExcelUtil<>(ProductionPlanImportDto.class); // List<ProductionPlanImportDto> list; // try { // list = excelUtil.importExcel(file.getInputStream()); // } catch (Exception e) { // log.error("çäº§éæ±Excelå¯¼å ¥å¤±è´¥", e); // throw new ServiceException("Excelè§£æå¤±è´¥"); // } // // if (list == null || list.isEmpty()) { // throw new ServiceException("Excelæ²¡ææ°æ®"); // } // // Set<String> applyNos = new HashSet<>(); // Set<String> materialCodes = new HashSet<>(); // for (int i = 0; i < list.size(); i++) { // ProductionPlanImportDto dto = list.get(i); // String applyNo = dto.getApplyNo(); // String materialCode = dto.getMaterialCode(); // // if (StringUtils.isEmpty(applyNo)) { // throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼ç¬¬ " + (i + 2) + " è¡ç³è¯·åç¼å·ä¸è½ä¸ºç©º"); // } // if (!applyNos.add(applyNo)) { // throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼Excel ä¸åå¨éå¤çç³è¯·åç¼å·: " + applyNo); // } // if (StringUtils.isEmpty(materialCode)) { // throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼ç¬¬ " + (i + 2) + " è¡ç©æç¼ç ä¸è½ä¸ºç©º"); // } // // String strength = dto.getStrength(); // if (StringUtils.isNotEmpty(strength)) { // if (!"A3.5".equals(strength) && !"A5.0".equals(strength)) { // throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼ç¬¬ " + (i + 2) + " è¡å¼ºåº¦åªè½æ¯ A3.5 æ A5.0"); // } // } // // materialCodes.add(materialCode); // } // // // ç³è¯·åç¼å·æ¯å¦å·²åå¨ // Long existApplyNoCount = baseMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery() // .in(ProductionPlan::getApplyNo, applyNos)); // if (existApplyNoCount > 0) { // List<String> existApplyNos = baseMapper.selectList(Wrappers.<ProductionPlan>lambdaQuery() // .in(ProductionPlan::getApplyNo, applyNos)) // .stream().map(ProductionPlan::getApplyNo).collect(Collectors.toList()); // throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼ç³è¯·åç¼å·å·²åå¨: " + String.join(", ", existApplyNos)); // } // // Map<String, Long> skuMap = productMaterialSkuService.list(Wrappers.<ProductMaterialSku>lambdaQuery() // .in(ProductMaterialSku::getMaterialCode, materialCodes)) // .stream().collect(Collectors.toMap(ProductMaterialSku::getMaterialCode, ProductMaterialSku::getId, (k1, k2) -> k1)); // // List<String> missingCodes = materialCodes.stream() // .filter(code -> !skuMap.containsKey(code)) // .collect(Collectors.toList()); // if (!missingCodes.isEmpty()) { // throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼ä»¥ä¸ç©æç¼ç ä¸åå¨: " + String.join(", ", missingCodes)); // } // // LocalDateTime now = LocalDateTime.now(); // List<ProductionPlan> entityList = list.stream().map(dto -> { // ProductionPlan entity = new ProductionPlan(); // BeanUtils.copyProperties(dto, entity); // entity.setProductMaterialSkuId(skuMap.get(dto.getMaterialCode())); // entity.setAssignedQuantity(BigDecimal.ZERO); // entity.setDataSourceType(DataSourceTypeEnum.MANUAL.getCode()); // entity.setStatus(0); // entity.setCreateTime(now); // entity.setUpdateTime(now); // return entity; // }).collect(Collectors.toList()); // // this.saveBatch(entityList); // } // // @Override // public void exportProdData(HttpServletResponse response, List<Long> ids) { // List<ProductionPlan> list; // if (ids != null && !ids.isEmpty()) { // list = baseMapper.selectBatchIds(ids); // } else { // list = baseMapper.selectList(null); // } // // List<ProductionPlanImportDto> exportList = new ArrayList<>(); // for (ProductionPlan entity : list) { // ProductionPlanImportDto dto = new ProductionPlanImportDto(); // BeanUtils.copyProperties(entity, dto); // exportList.add(dto); // } // ExcelUtil<ProductionPlanImportDto> util = new ExcelUtil<>(ProductionPlanImportDto.class); // util.exportExcel(response, exportList, "éå®çäº§éæ±æ°æ®"); // } // //} package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.bean.dto.ProductionPlanDto; import com.ruoyi.production.bean.vo.ProductionPlanVo; import com.ruoyi.production.mapper.ProductionPlanMapper; import com.ruoyi.production.pojo.ProductionPlan; import com.ruoyi.production.service.ProductionPlanService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.List; @Service @RequiredArgsConstructor public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper, ProductionPlan> implements ProductionPlanService { @Override public IPage<ProductionPlanVo> listPage(Page<ProductionPlanDto> page, ProductionPlanDto productionPlanDto) { return null; } @Override public void loadProdData() { } @Override public void syncProdDataJob() { } @Override public boolean combine(ProductionPlanDto productionPlanDto) { return false; } @Override public boolean add(ProductionPlanDto productionPlanDto) { return false; } @Override public boolean update(ProductionPlanDto productionPlanDto) { return false; } @Override public boolean delete(List<Long> ids) { return false; } @Override public void importProdData(MultipartFile file) { } @Override public void exportProdData(HttpServletResponse response, List<Long> ids) { } } src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductionProductInputDto; import com.ruoyi.production.bean.dto.ProductionProductInputDto; import com.ruoyi.production.mapper.ProductionProductInputMapper; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.service.ProductionProductInputService; src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -17,35 +17,15 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.mapper.ProductionAccountMapper; import com.ruoyi.production.mapper.ProductionOperationTaskMapper; import com.ruoyi.production.mapper.ProductionOrderMapper; import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper; import com.ruoyi.production.mapper.ProductionProductInputMapper; import com.ruoyi.production.mapper.ProductionProductMainMapper; import com.ruoyi.production.mapper.ProductionProductOutputMapper; import com.ruoyi.production.pojo.ProductionAccount; import com.ruoyi.production.pojo.ProductionOperationTask; import com.ruoyi.production.pojo.ProductionOrder; import com.ruoyi.production.pojo.ProductionOrderRoutingOperation; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.pojo.ProductionProductMain; import com.ruoyi.production.pojo.ProductionProductOutput; import com.ruoyi.production.bean.dto.ProductStructureDto; import com.ruoyi.production.bean.dto.ProductionProductMainDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductionProductMainService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityInspectParamMapper; import com.ruoyi.quality.mapper.QualityTestStandardMapper; import com.ruoyi.quality.mapper.QualityTestStandardParamMapper; import com.ruoyi.quality.mapper.QualityUnqualifiedMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; import com.ruoyi.quality.pojo.QualityTestStandardParam; import com.ruoyi.quality.pojo.QualityUnqualified; import com.ruoyi.quality.mapper.*; import com.ruoyi.quality.pojo.*; import com.ruoyi.technology.mapper.TechnologyOperationMapper; import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper; import com.ruoyi.technology.pojo.TechnologyOperation; src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProductionProductOutputDto; import com.ruoyi.production.bean.dto.ProductionProductOutputDto; import com.ruoyi.production.mapper.ProductionProductOutputMapper; import com.ruoyi.production.pojo.ProductionProductOutput; import com.ruoyi.production.service.ProductionProductOutputService; src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
@@ -1,7 +1,7 @@ package com.ruoyi.production.service.impl; import com.ruoyi.production.dto.UserAccountDto; import com.ruoyi.production.dto.UserProductionAccountingDto; import com.ruoyi.production.bean.dto.UserAccountDto; import com.ruoyi.production.bean.dto.UserProductionAccountingDto; import com.ruoyi.production.mapper.ProductionAccountMapper; import com.ruoyi.production.service.SalesLedgerProductionAccountingService; import lombok.RequiredArgsConstructor; src/main/java/com/ruoyi/safe/controller/SafeCertificationFileController.java
@@ -7,10 +7,10 @@ import com.ruoyi.safe.service.SafeCertificationFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import jakarta.annotation.Resource; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import java.util.List; /** src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -3,7 +3,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.config.MyBaseMapper; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto; import com.ruoyi.sales.dto.LossProductModelDto; import com.ruoyi.sales.dto.SalesLedgerProductDto; src/main/java/com/ruoyi/staff/service/impl/SchemeApplicableStaffServiceImpl.java
@@ -2,10 +2,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.UserAccountDto; import com.ruoyi.production.dto.UserProductionAccountingDto; import com.ruoyi.production.bean.dto.UserAccountDto; import com.ruoyi.production.bean.dto.UserProductionAccountingDto; import com.ruoyi.production.service.SalesLedgerProductionAccountingService; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysUser; @@ -13,21 +14,22 @@ import com.ruoyi.project.system.mapper.SysUserDeptMapper; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.staff.controller.TaxCalculator; import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper; import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper; import com.ruoyi.staff.mapper.StaffOnJobMapper; import com.ruoyi.staff.pojo.SchemeApplicableStaff; import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper; import com.ruoyi.staff.pojo.SchemeInsuranceDetail; import com.ruoyi.staff.pojo.StaffOnJob; import com.ruoyi.staff.service.SchemeApplicableStaffService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import jakarta.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** src/main/java/com/ruoyi/technology/bean/dto/BomImportDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.ruoyi.technology.bean.dto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; import java.math.BigDecimal; @Data public class BomImportDto { @Excel(name = "ç¶é¡¹äº§åç¼å·") private String parentCode; @Excel(name = "ç¶é¡¹äº§ååç§°") private String parentName; @Excel(name = "ç¶é¡¹äº§åè§æ ¼") private String parentSpec; @Excel(name = "å项产åç¼å·") private String childCode; @Excel(name = "å项产ååç§°") private String childName; @Excel(name = "å项产åè§æ ¼") private String childSpec; @Excel(name = "åä½ç¨é") private BigDecimal unitQty; @Excel(name = "ææå·¥åº") private String process; @Excel(name = "夿³¨") private String remark; } src/main/java/com/ruoyi/technology/controller/TechnologyBomController.java
@@ -6,19 +6,19 @@ import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.BomImportDto; import com.ruoyi.technology.bean.dto.BomImportDto; import com.ruoyi.technology.bean.dto.TechnologyBomDto; import com.ruoyi.technology.bean.vo.TechnologyBomVo; import com.ruoyi.technology.pojo.TechnologyBom; import com.ruoyi.technology.service.TechnologyBomService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.util.List; @RestController @@ -53,7 +53,7 @@ @DeleteMapping("/batchDelete") @Log(title = "Delete technology BOM", businessType = BusinessType.DELETE) @ApiOperation("æ¹éå é¤BOM") public R batchDelete(@RequestBody List<Integer> ids) { public R batchDelete(@RequestBody List<Long> ids) { return R.ok(technologyBomService.batchDelete(ids)); } src/main/java/com/ruoyi/technology/service/TechnologyBomService.java
@@ -7,9 +7,9 @@ import com.ruoyi.technology.bean.dto.TechnologyBomDto; import com.ruoyi.technology.bean.vo.TechnologyBomVo; import com.ruoyi.technology.pojo.TechnologyBom; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.util.List; public interface TechnologyBomService extends IService<TechnologyBom> { @@ -22,7 +22,7 @@ R update(TechnologyBom technologyBom); boolean batchDelete(List<Integer> ids); boolean batchDelete(List<Long> ids); R uploadBom(MultipartFile file); src/main/java/com/ruoyi/technology/service/impl/TechnologyBomServiceImpl.java
@@ -13,8 +13,8 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.BomImportDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.bean.dto.BomImportDto; import com.ruoyi.production.bean.dto.ProductStructureDto; import com.ruoyi.technology.bean.dto.TechnologyBomDto; import com.ruoyi.technology.bean.vo.TechnologyBomVo; import com.ruoyi.technology.mapper.TechnologyBomMapper; @@ -24,12 +24,12 @@ import com.ruoyi.technology.pojo.TechnologyRouting; import com.ruoyi.technology.service.TechnologyBomService; import com.ruoyi.technology.service.TechnologyBomStructureService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import jakarta.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -126,7 +126,7 @@ */ @Override @Transactional(rollbackFor = Exception.class) public boolean batchDelete(List<Integer> ids) { public boolean batchDelete(List<Long> ids) { if (ids == null || ids.isEmpty()) { throw new ServiceException("Select at least one BOM"); } src/main/resources/mapper/production/ProductionAccountMapper.xml
@@ -21,7 +21,7 @@ <result column="dept_id" property="deptId" /> </resultMap> <select id="selectUserAccount" resultType="com.ruoyi.production.dto.UserAccountDto"> <select id="selectUserAccount" resultType="com.ruoyi.production.bean.dto.UserAccountDto"> select ifnull(sum(finished_num), 0) as accountBalance, ifnull(sum(work_hours), 0) as account from production_account src/main/resources/mapper/production/ProductionPlanMapper.xml
@@ -21,4 +21,72 @@ <result column="promised_delivery_date" property="promisedDeliveryDate" /> </resultMap> <select id="listPage" resultType="com.ruoyi.production.bean.dto.ProductionPlanDto"> SELECT pp.*, pms.material_code AS materialCode, pms.model, pms.product_id AS productMaterialId, pm.product_name AS productName, pm.unit FROM production_plan pp left join product_material_sku pms on pp.product_material_sku_id = pms.id left join product_material pm on pms.product_id = pm.id WHERE 1 = 1 <if test="c.customerName != null and c.customerName != '' "> AND pp.customer_name LIKE CONCAT('%',#{c.customerName},'%') </if> <if test="c.productName != null and c.productName != '' "> AND pm.product_name LIKE CONCAT('%',#{c.productName},'%') </if> <if test="c.materialCode != null and c.materialCode != '' "> AND pms.material_code LIKE CONCAT('%',#{c.materialCode},'%') </if> <if test="c.model != null and c.model != '' "> AND pms.model LIKE CONCAT('%',#{c.model},'%') </if> <if test="c.status != null"> AND pp.status =#{c.status} </if> <if test="c.applyNo != null and c.applyNo != '' "> AND pp.apply_no LIKE CONCAT('%',#{c.applyNo},'%') </if> <if test="c.startDate != null"> AND pp.start_date >= DATE_FORMAT(#{c.startDate},'%Y-%m-%d') </if> <if test="c.endDate != null"> AND pp.end_date <= DATE_FORMAT(#{c.endDate},'%Y-%m-%d') </if> ORDER BY COALESCE(pp.form_modified_time, pp.id) DESC </select> <select id="selectWithMaterialByIds" resultType="com.ruoyi.production.bean.dto.ProductionPlanDto"> SELECT pp.*, pms.material_code AS materialCode, pms.model, pm.product_name AS productName, pm.unit FROM production_plan pp LEFT JOIN product_material_sku pms ON pp.product_material_sku_id = pms.id LEFT JOIN product_material pm ON pms.product_id = pm.id WHERE pp.id IN <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> ORDER BY pp.id ASC </select> <select id="selectProductionPlanDtoById" resultType="com.ruoyi.production.bean.dto.ProductionPlanDto"> SELECT pp.*, pms.material_code AS materialCode, pms.model, pms.product_id AS productMaterialId, pm.product_name AS productName, pm.unit FROM production_plan pp left join product_material_sku pms on pp.product_material_sku_id = pms.id left join product_material pm on pms.product_id = pm.id WHERE pp.id = #{productionPlanId} </select> </mapper> src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -14,7 +14,7 @@ <result column="update_user" property="updateUser" /> </resultMap> <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto"> <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.bean.dto.ProductionProductInputDto"> select ppi.*, ppm.product_no as productNo, pm.model, src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -14,7 +14,7 @@ <result column="update_user" property="updateUser" /> </resultMap> <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto"> <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.bean.dto.ProductionProductMainDto"> select ppm.*, pot.work_order_no as workOrderNo, case pot.status @@ -78,7 +78,7 @@ select null </select> <select id="listProductionDetails" resultType="com.ruoyi.production.dto.ProductionProductMainDto"> <select id="listProductionDetails" resultType="com.ruoyi.production.bean.dto.ProductionProductMainDto"> select ppm.*, pot.work_order_no as workOrderNo, p.product_name as productName, src/main/resources/mapper/production/ProductionProductOutputMapper.xml
@@ -15,7 +15,7 @@ <result column="update_user" property="updateUser" /> </resultMap> <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.dto.ProductionProductOutputDto"> <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.bean.dto.ProductionProductOutputDto"> select ppo.*, ppm.product_no as productNo, pm.model @@ -35,7 +35,7 @@ order by ppo.create_time desc </select> <select id="selectOutputStats" resultType="com.ruoyi.production.dto.ProductionProductOutputDto"> <select id="selectOutputStats" resultType="com.ruoyi.production.bean.dto.ProductionProductOutputDto"> select id, production_product_main_id as productionProductMainId, product_model_id as productModelId,