src/main/java/com/ruoyi/procurementrecord/controller/ProcurementExceptionRecordController.java
@@ -1,23 +1,16 @@ package com.ruoyi.procurementrecord.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.dto.*; import com.ruoyi.procurementrecord.mapper.ProcurementExceptionRecordMapper; import com.ruoyi.procurementrecord.pojo.ProcurementExceptionRecord; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author :yys src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -1,11 +1,11 @@ package com.ruoyi.procurementrecord.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; @@ -24,7 +24,6 @@ import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.UUID; /** * @author :yys @@ -102,21 +101,6 @@ public AjaxResult updateManagement(@RequestBody ProcurementManagementUpdateDto procurementDto) { return AjaxResult.success(procurementRecordService.updateManagement(procurementDto)); } @GetMapping("/detailManagementByCustom") @ApiOperation(value = "自定义入库-详情") public AjaxResult detailManagementByCustom(ProcurementManagementUpdateDto procurementDto) { return AjaxResult.success(procurementRecordService.detailManagementByCustom(procurementDto)); } @ApiOperation(value = "采购入库-详情") @GetMapping("/detail") public AjaxResult detail(ProcurementUpdateDto procurementDto) { return AjaxResult.success(procurementRecordService.detail(procurementDto)); } src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
@@ -7,7 +7,6 @@ import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd; import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto; import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto; src/main/java/com/ruoyi/procurementrecord/dto/Details.java
@@ -10,23 +10,11 @@ */ @Data public class Details { private Integer id; // 产品id private Integer id; // 台账产品id private BigDecimal inboundQuantity; // 入库数量 private BigDecimal warnNum; // 预警数量(采购入库才有) //单价 private BigDecimal unitPrice; private BigDecimal totalPrice; /** * 每箱数量 */ private Integer boxNum; /** * 每箱规格 */ private String cartonSpecifications; /** * 美元每件 */ private BigDecimal dollarPrice; private Long productModelId; // 基础产品id } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
@@ -2,7 +2,6 @@ import lombok.Data; import java.math.BigDecimal; import java.util.List; /** @@ -25,5 +24,6 @@ private Integer purchaseLedgerId; private Long qualityInspectId; } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
@@ -1,11 +1,9 @@ package com.ruoyi.procurementrecord.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * @author :yys src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java
@@ -1,11 +1,8 @@ package com.ruoyi.procurementrecord.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * @author :yys src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -161,22 +161,6 @@ */ @Excel(name = "不含税总价") private BigDecimal taxExclusiveTotalPrice; /** * 每箱数量 */ @Excel(name = "每箱数量") private Integer boxNum; /** * 每箱规格 */ @Excel(name = "每箱规格") private String cartonSpecifications; /** * 美元每件 */ @Excel(name = "美元每件") private BigDecimal dollarPrice; /** * 报表日报 */ @@ -208,4 +192,6 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate endDate; private Long productModelId; } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -18,8 +18,6 @@ private Integer id; private String ids; private Long createUser; /** @@ -176,22 +174,6 @@ */ @Excel(name = "不含税总价") private BigDecimal taxExclusiveTotalPrice; /** * 每箱数量 */ @Excel(name = "每箱数量") private Integer boxNum; /** * 每箱规格 */ @Excel(name = "每箱规格") private String cartonSpecifications; /** * 美元每件 */ @Excel(name = "美元每件") private BigDecimal dollarPrice; /** * 报表日报 */ src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
@@ -17,7 +17,7 @@ private Integer userId; private Integer salesLedgerProductId; private Long salesLedgerProductId; /** * 出库类型 1-采购出库 2-销售出库 3-自定义 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -129,18 +129,4 @@ * 物品类型 */ private String itemType; /** * 箱数 */ private Integer boxNum; /** * 每箱规格 */ private String cartonSpecifications; /** * 美元每件 */ private BigDecimal dollarPrice; private String url; } src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageMapper.java
@@ -1,6 +1,5 @@ package com.ruoyi.procurementrecord.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -18,19 +18,11 @@ @Data public class CustomStorage { @TableField(exist = false) private String ids; private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 图片 */ @Excel(name = "图片", cellType = Excel.ColumnType.IMAGE, height = 114, width = 25) private String url; // 入库时间 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd") @@ -46,12 +38,7 @@ @TableField(exist = false) private String timeStr; /** * 待出库数量 */ @Excel(name = "待出库数量") @TableField(exist = false) private BigDecimal inboundNum0; /** * 出库数量 */ @@ -104,12 +91,7 @@ private BigDecimal inboundNum0 = BigDecimal.ZERO; /** * 出库数量 */ @Excel(name = "出库数量") @TableField(exist = false) private BigDecimal totalInboundNum = BigDecimal.ZERO; /** * 入库用户id */ src/main/java/com/ruoyi/procurementrecord/pojo/InboundManagement.java
@@ -7,7 +7,6 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -1,8 +1,6 @@ package com.ruoyi.procurementrecord.pojo; import com.baomidou.mybatisplus.annotation.*; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Data; @@ -24,9 +22,9 @@ private Integer id; /** * 产品信息表id(自定义入库时为0) * 产品信息表id(生产扣库存的时候使用) */ private Integer salesLedgerProductId; private Long salesLedgerProductId; /** * 入库id src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -101,16 +101,6 @@ */ private Long productModelId; /** * 每箱数量 */ private Integer boxNum; /** * 每箱规格 */ private String cartonSpecifications; /** * 美元每件 */ private BigDecimal dollarPrice; private Long qualityInspectId; } src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
@@ -8,7 +8,6 @@ import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import java.util.Date; /** * @author :yys src/main/java/com/ruoyi/procurementrecord/service/impl/GasTankWarningServiceImpl.java
@@ -4,9 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.mapper.GasTankWarningMapper; import com.ruoyi.procurementrecord.pojo.GasTankWarning; import com.ruoyi.procurementrecord.service.GasTankWarningService; src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPlanServiceImpl.java
@@ -6,7 +6,6 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.mapper.ProcurementPlanMapper; import com.ruoyi.procurementrecord.pojo.ProcurementPlan; import com.ruoyi.procurementrecord.pojo.ProcurementPriceManagement; import com.ruoyi.procurementrecord.service.ProcurementPlanService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java
@@ -3,9 +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.common.utils.excel.ExcelUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.mapper.ProcurementPriceManagementMapper; import com.ruoyi.procurementrecord.pojo.ProcurementPriceManagement; import com.ruoyi.procurementrecord.service.ProcurementPriceManagementService; src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.ProductModelMapper; @@ -291,7 +292,6 @@ LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, type); procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, type); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if(CollectionUtils.isEmpty( procurementRecords)){ ExcelUtil<CustomStorage> util = new ExcelUtil<CustomStorage>(CustomStorage.class); @@ -482,6 +482,7 @@ inventoryInformationDto.setInventoryChangeValue(inventoryChangeValue.subtract(totalInventoryValue)); return inventoryInformationDto; } @Override public IPage<ProcurementPageDto> listPageByProduction(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPageByProduction(page, procurementDto); @@ -612,7 +613,7 @@ List<ProcurementRecordOut> recordOutList = procurementRecordOutMapper.selectList(queryWrapper); // 2. 按SalesLedgerProductId分组,统计每个id对应的已出库数量总和-已出库数量 Map<Integer, BigDecimal> storageIdToTotalOutNumMap = recordOutList.stream() Map<Long, BigDecimal> storageIdToTotalOutNumMap = recordOutList.stream() .collect(Collectors.groupingBy( ProcurementRecordOut::getSalesLedgerProductId, Collectors.reducing( @@ -764,7 +765,10 @@ procurementRecordLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, detail.getId()) .eq(ProcurementRecordStorage::getType, procurementDto.getType()); Long aLong = procurementRecordMapper.selectCount(procurementRecordLambdaQueryWrapper); SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(detail.getId()); if (ObjectUtils.isNull(detail.getProductModelId())) { detail.setProductModelId(salesLedgerProduct.getProductModelId()); } ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder() .salesLedgerProductId(detail.getId()) .inboundBatches(aLong.equals(0L) ? "第1批次("+ procurementDto.getTypeName() +")" : "第"+ (aLong + 1) + "批次(" + procurementDto.getTypeName() + ")" ) @@ -776,12 +780,10 @@ .createTime(LocalDateTime.now()) .createUser(loginUser.getUserId()) .updateTime(LocalDateTime.now()) .boxNum(detail.getBoxNum()) .cartonSpecifications(detail.getCartonSpecifications()) .dollarPrice(detail.getDollarPrice()) .updateUser(loginUser.getUserId()) .createBy(procurementDto.getNickName()) .productModelId(detail.getProductModelId()); .productModelId(detail.getProductModelId()) .qualityInspectId(ObjectUtils.isNotNull(procurementDto.getQualityInspectId()) ? procurementDto.getQualityInspectId() : 0L); this.save(procurementRecordBuilder.build()); // 入库成功减掉采购数量 // LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -836,15 +838,6 @@ return procurementPageDtoIPage; } public List<Long> listCopyIds(String ids) { List<Long> idsSet = new ArrayList<>(); String[] split = ids.split(","); for (String s : split) { idsSet.add(Long.valueOf(s)); } return idsSet; } @Override public IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto); @@ -874,8 +867,9 @@ dto.setTotalInboundNum(BigDecimal.ZERO); continue; } // 计算已出库数量总和,并设置待出库数量 BigDecimal totalInboundNum = procurementRecords.stream() BigDecimal totalInboundNum = collect1.stream() .map(ProcurementRecordOut::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // 出库数量 = 总数量 - 待出库数量 @@ -889,6 +883,7 @@ } return procurementPageDtoCopyIPage; } @Override public IPage<ProductModel> listPageProductionStock(Page page) { ProductModel productModel = new ProductModel(); @@ -901,9 +896,46 @@ return iPage; } @Override public IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPageByProductProduction(page, procurementDto); List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords(); // 计算待入库数量 // 查询采购记录已入库数量 List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)) { return procurementPageDtoIPage; } LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect) .eq(ProcurementRecordOut::getType, 4); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if (CollectionUtils.isEmpty(procurementRecords)) { return procurementPageDtoIPage; } for (ProcurementPageDto dto : procurementPageDtos) { // 根据采购台账ID筛选对应的出库记录 List<ProcurementRecordOut> collect1 = procurementRecords.stream() .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) .collect(Collectors.toList()); // 如果没有相关的出库记录,跳过该条数据 if (CollectionUtils.isEmpty(collect1)) { dto.setInboundNum0(dto.getInboundNum()); continue; } // 计算已出库数量总和,并设置待出库数量 BigDecimal totalInboundNum = collect1.stream() .map(ProcurementRecordOut::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // 待出库数量 = 总数量 - 已出库数量 dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); } return procurementPageDtoIPage; } src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
@@ -1,12 +1,9 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.service.ProcessRouteItemService; import com.ruoyi.production.service.ProcessRouteService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,9 +19,6 @@ @Autowired private ProcessRouteService processRouteService; @Autowired private ProcessRouteItemService processRouteItemService; @GetMapping("page") @ApiOperation("分页查询") @@ -45,8 +39,6 @@ @ApiOperation("删除工艺路线") @DeleteMapping("/{ids}") public R delete(@PathVariable("ids") Long[] ids) { //删除工艺路线详情 processRouteItemService.remove(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId,Arrays.asList(ids))); return R.ok(processRouteService.removeBatchByIds(Arrays.asList(ids))); return R.ok(processRouteService.batchDelete(Arrays.asList(ids))); } } src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
@@ -1,24 +1,16 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.service.ProcessRouteItemService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; @RestController @RequestMapping("processRouteItem") src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -7,13 +7,12 @@ import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductBom; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.ProductProcessRoute; import com.ruoyi.production.service.ProcessRouteService; import com.ruoyi.production.service.ProductBomService; import com.ruoyi.production.service.ProductProcessService; import com.ruoyi.production.service.ProductProcessRouteService; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +38,9 @@ @Autowired private ProcessRouteService processRouteService; @Autowired private ProductProcessRouteService productProcessRouteService; @GetMapping("/listPage") @Log(title = "BOM-分页查询", businessType = BusinessType.OTHER) @@ -67,7 +69,8 @@ @Log(title = "删除", businessType = BusinessType.DELETE) public AjaxResult batchDelete(@RequestBody List<Integer> ids) { List<ProcessRoute> list = processRouteService.list(Wrappers.<ProcessRoute>lambdaQuery().in(ProcessRoute::getBomId, ids)); if (list.size()>0){ List<ProductProcessRoute> list2 = productProcessRouteService.list(Wrappers.<ProductProcessRoute>lambdaQuery().in(ProductProcessRoute::getBomId, ids)); if (list.size()>0 || list2.size()>0){ return AjaxResult.error("该BOM已经存在对应的工艺路线,无法进行删除"); } if(CollectionUtils.isEmpty(ids)){ src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -1,13 +1,11 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.utils.poi.ExcelUtil; 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.ProductOrderDto; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.service.ProductOrderService; import io.swagger.annotations.Api; src/main/java/com/ruoyi/production/controller/ProductProcessController.java
@@ -2,14 +2,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.device.pojo.DeviceRepair; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.oA.pojo.OaProject; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.service.impl.ProductProcessServiceImpl; @@ -17,7 +14,6 @@ import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -59,10 +55,7 @@ @DeleteMapping("/batchDelete") @Log(title = "删除", businessType = BusinessType.DELETE) public AjaxResult batchDelete(@RequestBody List<Integer> ids) { if(CollectionUtils.isEmpty(ids)){ return AjaxResult.error("请选择至少一条数据"); } return AjaxResult.success(productProcessService.removeBatchByIds(ids)); return AjaxResult.success(productProcessService.batchDelete(ids)); } @ApiOperation("查询所有工序") src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -1,34 +1,13 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.production.service.ProductProcessRouteService; import com.ruoyi.production.service.ProductWorkOrderService; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RequestMapping("/productProcessRoute") @RestController src/main/java/com/ruoyi/production/controller/ProductStructureController.java
@@ -1,22 +1,12 @@ package com.ruoyi.production.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProductStructure; import com.ruoyi.production.service.ProductStructureService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; @RequestMapping("productStructure") @RestController src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
@@ -34,4 +34,13 @@ return R.ok(productWorkOrderservice.updateProductWorkOrder(productWorkOrderDto)); } /** * pda根据二维码的工单id查询数据 */ @ApiOperation("pda根据二维码的工单id查询数据") @GetMapping("/getProductWorkOrderById") public R getProductWorkOrderById(Long id) { return R.ok(productWorkOrderservice.getById(id)); } } src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -1,8 +1,8 @@ package com.ruoyi.production.controller; 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.ProductProcessRouteItemDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.service.ProductionProductMainService; import io.swagger.annotations.Api; @@ -11,7 +11,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import javax.servlet.http.HttpServletResponse; import java.util.List; @RequestMapping("productionProductMain") @@ -49,4 +49,16 @@ public R delete(@RequestBody ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.removeProductMain(productionProductMainDto)); } /** * 导出 */ @PostMapping("/export") public void export(HttpServletResponse response, ProductionProductMainDto productionProductMainDto) { List<ProductionProductMainDto> list; list = productionProductMainService.listPageProductionProductMainDto(new Page<>(1, -1), productionProductMainDto).getRecords(); ExcelUtil<ProductionProductMainDto> util = new ExcelUtil<ProductionProductMainDto>(ProductionProductMainDto.class); util.exportExcel(response, list, "生产报工数据"); } } src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
@@ -2,9 +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.dto.ProductionProductOutputDto; import com.ruoyi.production.service.ProductionProductInputService; import com.ruoyi.production.service.ProductionProductOutputService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
@@ -2,12 +2,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto; import com.ruoyi.production.pojo.SalesLedgerProductionAccounting; import com.ruoyi.production.service.impl.SalesLedgerProductionAccountingServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * @author :yys @@ -41,12 +42,13 @@ /** * 导出 * @param response */ @PostMapping("/export") @ApiOperation("生产管理-生产核算-导出") public void export(HttpServletResponse response) { salesLedgerProductionAccountingService.export(response); public void export(HttpServletResponse response, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto) { List<SalesLedgerProductionAccountingDto> list; list = salesLedgerProductionAccountingService.listPage(new Page<>(1, -1), salesLedgerProductionAccountingDto).getRecords(); ExcelUtil<SalesLedgerProductionAccountingDto> util = new ExcelUtil<SalesLedgerProductionAccountingDto>(SalesLedgerProductionAccountingDto.class); util.exportExcel(response, list, "生产核算数据"); } } src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
@@ -8,7 +8,6 @@ import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.dto.ProcurementDto; import com.ruoyi.production.dto.ProcessSchedulingDto; import com.ruoyi.production.dto.ProductionDispatchAddDto; import com.ruoyi.production.dto.SalesLedgerSchedulingDto; @@ -38,6 +37,7 @@ @RestController @Api(tags = "生产订单") @RequestMapping("/salesLedger/scheduling") @Deprecated // 标记该类已弃用 public class SalesLedgerSchedulingController extends BaseController { @Autowired src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
@@ -7,12 +7,8 @@ import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProcessSchedulingDto; import com.ruoyi.production.dto.ProductionReportDto; import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto; import com.ruoyi.production.dto.SalesLedgerWorkDto; import com.ruoyi.production.pojo.SalesLedgerWork; import com.ruoyi.production.service.SalesLedgerWorkService; import com.ruoyi.production.service.impl.SalesLedgerWorkServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,6 +26,7 @@ @RestController @Api(tags = "生产报工(排产记录)") @RequestMapping("/salesLedger/work") @Deprecated // 标记该类已弃用 public class SalesLedgerWorkController extends BaseController { @@ -55,7 +52,7 @@ SalesLedgerWorkDto salesLedgerSchedulingDto = new SalesLedgerWorkDto(); IPage<SalesLedgerWorkDto> result = salesLedgerWorkService.listPage(page,salesLedgerSchedulingDto); result.getRecords().forEach(item -> { item.setDaiNum(item.getSchedulingNum().subtract(item.getFinishedNum())); item.setDaiNum(item.getFinishedNum().subtract(item.getSchedulingNum())); item.setStatusName(item.getStatus().toString()); }); ExcelUtil<SalesLedgerWorkDto> util = new ExcelUtil<>(SalesLedgerWorkDto.class); src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
@@ -4,8 +4,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class ProcessRouteItemDto extends ProcessRouteItem { src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
@@ -5,7 +5,6 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * @author :yys src/main/java/com/ruoyi/production/dto/ProductBomDto.java
@@ -3,8 +3,6 @@ import com.ruoyi.production.pojo.ProductBom; import lombok.Data; import java.util.List; //分页查询回显数据 @Data public class ProductBomDto extends ProductBom { src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
@@ -2,10 +2,7 @@ import com.ruoyi.production.pojo.ProductProcess; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
@@ -1,11 +1,8 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.pojo.ProductProcessRouteItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class ProductProcessRouteItemDto extends ProductProcessRouteItem { src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -1,6 +1,5 @@ package com.ruoyi.production.dto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.production.pojo.ProductWorkOrder; import io.swagger.annotations.ApiModelProperty; import lombok.Data; src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
@@ -11,4 +11,10 @@ @ApiModelProperty(value = "产品型号") private String model; @ApiModelProperty(value = "产品名称") private String productName; @ApiModelProperty(value = "单位") private String unit; } src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -1,29 +1,44 @@ package com.ruoyi.production.dto; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.production.pojo.ProductionProductMain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @ExcelIgnoreUnannotated public class ProductionProductMainDto extends ProductionProductMain { @ApiModelProperty(value = "工单编号") @Excel(name = "工单编号") private String workOrderNo; @ApiModelProperty(value = "工单状态") private String workOrderStatus; @ApiModelProperty(value = "报工人员昵称") @Excel(name = "报工人") private String nickName; @ApiModelProperty(value = "报工数量") @Excel(name = "报工数量") private BigDecimal quantity; @ApiModelProperty(value = "是否报工") private boolean reportWork; //产品名称 @Excel(name = "产品名称") private String productName; @ApiModelProperty(value = "报工id") private Long productMainId; //产品规格型号 @Excel(name = "产品规格型号") private String productModelName; //单位 @Excel(name = "单位") private String unit; //销售合同号 @Excel(name = "销售合同号") private String salesContractNo; } src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
@@ -1,6 +1,5 @@ package com.ruoyi.production.dto; import com.ruoyi.production.pojo.ProductionProductInput; import com.ruoyi.production.pojo.ProductionProductOutput; import io.swagger.annotations.ApiModelProperty; import lombok.Data; src/main/java/com/ruoyi/production/dto/SalesLedgerProductDto.java
@@ -1,13 +1,9 @@ package com.ruoyi.production.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * @author :yys src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
@@ -1,5 +1,6 @@ package com.ruoyi.production.dto; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -13,6 +14,7 @@ */ @Data @ApiModel @ExcelIgnoreUnannotated public class SalesLedgerProductionAccountingDto extends SalesLedgerProductDto{ /** @@ -25,7 +27,7 @@ * 排产人名称 */ @ApiModelProperty(value = "生产人名称") @Excel(name = "生产人名称") @Excel(name = "生产人") private String schedulingUserName; @@ -60,7 +62,7 @@ * 排产日期 */ @ApiModelProperty(value = "排产日期") @Excel(name = "排产日期") @Excel(name = "生产日期") private String schedulingDate; @ApiModelProperty(value = "开始时间") src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
@@ -1,7 +1,5 @@ package com.ruoyi.production.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; @@ -10,7 +8,6 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; import java.util.Date; /** src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
@@ -1,7 +1,5 @@ package com.ruoyi.production.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModel; src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
@@ -6,7 +6,6 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; /** * @author :yys src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java
@@ -1,8 +1,6 @@ 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.dto.ProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRouteItem; import org.apache.ibatis.annotations.Mapper; src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
@@ -1,11 +1,10 @@ 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.dto.ProductBomDto; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductBom; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -3,7 +3,6 @@ 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.ProductBomDto; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProcessRoute; src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
@@ -1,8 +1,8 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
@@ -1,8 +1,6 @@ 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.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProductStructure; import org.apache.ibatis.annotations.Mapper; @@ -15,5 +13,5 @@ List<ProductStructureDto> listBybomId(@Param("bomId") Long bomId); List<ProductStructureDto> listByproductModelId(@Param("productModelId") Long productModelId); List<ProductStructureDto> listBybomAndProcess(@Param("bomId") Long bomId, @Param("processId") Long processId); } src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
@@ -1,6 +1,5 @@ package com.ruoyi.production.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,21 +9,11 @@ import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @Mapper public interface ProductWorkOrderMapper extends BaseMapper<ProductWorkOrder> { IPage<ProductWorkOrderDto> pageProductWorkOrder(Page<ProductWorkOrderDto> page, @Param("c") ProductWorkOrderDto productWorkOrder); int updatePlanQuantity(Map<String, Object> params); /** * 回滚工单计划数量:从production_product_output取quantity加回plan_quantity * @param productMainId * @return */ int rollbackPlanQuantity(@Param("productMainId") Long productMainId); List<ProductWorkOrderDto> selectProductWorkOrderDtoList(); } src/main/java/com/ruoyi/production/pojo/ProductBom.java
@@ -1,13 +1,6 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -15,6 +8,9 @@ import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * BOM主表 src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -3,7 +3,6 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -34,7 +33,7 @@ private Long productModelId; /** * 工艺路线id * 模版的工艺路线id */ @ApiModelProperty(value = "工艺路线id") private Long routeId; src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
@@ -1,17 +1,14 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -1,8 +1,11 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -14,6 +17,7 @@ private Long id; @ApiModelProperty(value = "报工单号") @Excel(name = "报工单号") private String productNo; @ApiModelProperty(value = "报工人员id") @@ -33,10 +37,15 @@ @ApiModelProperty(value = "创建时间") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "创建时间") private LocalDateTime createTime; @ApiModelProperty(value = "更新时间") @TableField(fill = FieldFill.UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; @ApiModelProperty(value = "租户ID") src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
@@ -1,9 +1,6 @@ package com.ruoyi.production.service; 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.framework.web.domain.R; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.pojo.ProcessRouteItem; src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -5,11 +5,14 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProcessRoute; import io.swagger.models.auth.In; import java.util.List; public interface ProcessRouteService extends IService<ProcessRoute> { IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto); Integer saveProcessRoute(ProcessRoute processRoute); int batchDelete(List<Long> ids); } src/main/java/com/ruoyi/production/service/ProductBomService.java
@@ -2,11 +2,10 @@ 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.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductBom; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -3,7 +3,6 @@ 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.ProductBomDto; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProcessRoute; src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
@@ -1,8 +1,8 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> src/main/java/com/ruoyi/production/service/ProductProcessService.java
@@ -3,14 +3,11 @@ 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.device.pojo.DeviceRepair; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.*; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.SalesLedgerScheduling; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -23,4 +20,6 @@ AjaxResult add(ProductProcessDto productProcessDto); AjaxResult importData(MultipartFile file); String batchDelete(List<Integer> ids); } src/main/java/com/ruoyi/production/service/ProductStructureService.java
@@ -1,7 +1,6 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.basic.dto.ProductModelDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.pojo.ProductStructure; src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -3,12 +3,8 @@ 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.ProcessRouteItemDto; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.pojo.ProductionProductMain; import java.util.List; public interface ProductionProductMainService extends IService<ProductionProductMain> { IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto); src/main/java/com/ruoyi/production/service/SalesLedgerProductionAccountingService.java
@@ -6,8 +6,6 @@ import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto; import com.ruoyi.production.pojo.SalesLedgerProductionAccounting; import javax.servlet.http.HttpServletResponse; /** * @author :yys * @date : 2025/7/21 14:39 @@ -18,5 +16,4 @@ IPage<SalesLedgerProductionAccountingDto> listPage(Page page, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto); void export(HttpServletResponse response); } src/main/java/com/ruoyi/production/service/SalesLedgerWorkService.java
@@ -3,7 +3,6 @@ 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.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductionReportDto; import com.ruoyi.production.dto.SalesLedgerWorkDto; import com.ruoyi.production.pojo.SalesLedgerWork; src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
@@ -1,8 +1,6 @@ package com.ruoyi.production.service.impl; 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.production.dto.ProcessRouteItemDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -1,20 +1,25 @@ package com.ruoyi.production.service.impl; 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.production.dto.ProcessRouteDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.mapper.ProcessRouteMapper; import com.ruoyi.production.mapper.ProductOrderMapper; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.service.ProcessRouteService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; @Service @AllArgsConstructor @@ -23,6 +28,12 @@ @Autowired private ProcessRouteMapper processRouteMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductOrderMapper productOrderMapper; @Override public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) { @@ -40,4 +51,16 @@ processRoute.setProcessRouteCode(newProductCode); return processRouteMapper.updateById(processRoute); } @Override public int batchDelete(List<Long> ids) { //先判断是否已经引用了 List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids)); if (productOrders.size()>0){ throw new RuntimeException("该工艺路线生产已引用,不能删除"); } //删除工艺路线详情 processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids)); return processRouteMapper.deleteBatchIds(ids); } } src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -1,17 +1,13 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductBomDto; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.pojo.ProductBom; import com.ruoyi.production.mapper.ProductBomMapper; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.ProductBom; import com.ruoyi.production.service.ProductBomService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -4,12 +4,10 @@ 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.ProductBomDto; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProcessRouteService; import com.ruoyi.production.service.ProductOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -65,6 +63,7 @@ productProcessRouteItem.setProcessId(processRouteItem.getProcessId()); productProcessRouteItem.setProductOrderId(productOrder.getId()); productProcessRouteItem.setProductRouteId(productProcessRoute.getId()); productProcessRouteItem.setDragSort(processRouteItem.getDragSort()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // 查询今日已存在的最大工单号 @@ -90,7 +89,8 @@ ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(productOrder.getId()); productWorkOrder.setPlanQuantity(productOrder.getQuantity()); ProductOrder order = productOrderMapper.selectById(productOrder.getId()); productWorkOrder.setPlanQuantity(order.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -12,21 +12,13 @@ import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.AllArgsConstructor; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
@@ -1,10 +1,10 @@ package com.ruoyi.production.service.impl; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.pojo.ProductProcessRoute; import com.ruoyi.production.mapper.ProductProcessRouteMapper; import com.ruoyi.production.service.ProductProcessRouteService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.dto.ProcessRouteDto; import com.ruoyi.production.mapper.ProductProcessRouteMapper; import com.ruoyi.production.pojo.ProductProcessRoute; import com.ruoyi.production.service.ProductProcessRouteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -2,14 +2,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; 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.basic.pojo.Customer; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.mapper.ProductProcessMapper; import com.ruoyi.production.mapper.ProductProcessRouteItemMapper; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.service.ProductProcessService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +27,10 @@ public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService { @Autowired private ProductProcessMapper productProcessMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @Override public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) { @@ -34,7 +42,7 @@ ProductProcess productProcess = new ProductProcess(); BeanUtils.copyProperties(productProcessDto,productProcess); boolean save = productProcessMapper.insert(productProcess) > 0; if (save && ObjectUtils.isNotNull(productProcessDto.getNo())) { if (save && ObjectUtils.isNull(productProcessDto.getNo())) { // 根据id生成no字段:GX + 8位数字(不足8位前面补0) String no = "GX" + String.format("%08d", productProcess.getId()); productProcess.setNo(no); @@ -42,7 +50,7 @@ productProcessMapper.updateById(productProcess); return AjaxResult.success(); } return AjaxResult.error(); return AjaxResult.success(); } @Override @@ -60,4 +68,16 @@ return AjaxResult.error("导入失败"); } } @Override public String batchDelete(List<Integer> ids) { //查询是否生产中已经引用了这些工序 List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids)); List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids)); if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)){ throw new RuntimeException("该工序已经被使用,无法删除"); } productProcessMapper.deleteBatchIds(ids); return null; } } src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -1,26 +1,16 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.ProductModelDto; import com.ruoyi.basic.dto.ProductTreeDto; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.ProductBomMapper; import com.ruoyi.production.mapper.ProductStructureMapper; import com.ruoyi.production.pojo.ProductStructure; import com.ruoyi.production.service.ProductStructureService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -2,16 +2,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; 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.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; @@ -23,29 +22,27 @@ 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.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ruoyi.production.mapper.ProductionProductMainMapper; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService { private final ProcurementRecordOutMapper procurementRecordOutMapper; @@ -56,6 +53,7 @@ private ProductWorkOrderMapper productWorkOrderMapper; private ProductProcessRouteItemMapper productProcessRouteItemMapper; private SysUserMapper userMapper; private ProductionProductOutputMapper productionProductOutputMapper; @@ -66,8 +64,10 @@ private QualityInspectMapper qualityInspectMapper; private ProductProcessMapper productProcessMapper; private ProductProcessRouteMapper productProcessRouteMapper; private ProductMapper productMapper; private QualityTestStandardMapper qualityTestStandardMapper; @@ -90,40 +90,35 @@ } @Override @Transactional(rollbackFor = Exception.class) public Boolean addProductMain(ProductionProductMainDto dto) { if (dto == null) { throw new RuntimeException("参数不能为空"); } SysUser user = SecurityUtils.getLoginUser().getUser(); // 新增逻辑 SysUser user = userMapper.selectUserById(dto.getUserId()); ProductionProductMain productionProductMain = new ProductionProductMain(); //当前工艺路线对应的工序详情 ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId()); if (productProcessRouteItem == null) { throw new RuntimeException("工艺路线项不存在"); } String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); //当前具体工序 ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId()); //工艺路线中当前工序对应的产出规格型号 ProductModel productModel = productModelMapper.selectById(productProcessRouteItem.getProductModelId()); //查询该生产订单对应的bom ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectById(productProcessRouteItem.getProductRouteId()); /*新增报工主表*/ //查询最大报工编号 String datePrefix = "BG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd")); QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>(); queryWrapper.select("MAX(product_no) as maxNo") .likeRight("product_no", datePrefix); List<Map<String, Object>> resultList = productionProductMainMapper.selectMaps(queryWrapper); int sequenceNumber = 1; if (resultList != null && !resultList.isEmpty()) { Map<String, Object> result = resultList.get(0); if (result != null) { Object maxNoObj = result.get("maxNo"); if (maxNoObj != null) { String lastNo = maxNoObj.toString(); System.out.println("lastNo: " + lastNo); if (lastNo.startsWith(datePrefix)) { try { String seqStr = lastNo.substring(datePrefix.length()); @@ -135,32 +130,68 @@ } } } String productNo = String.format("%s%03d", datePrefix, sequenceNumber); productionProductMain.setProductNo(productNo); productionProductMain.setUserId(user.getUserId()); productionProductMain.setUserId(dto.getUserId()); productionProductMain.setUserName(dto.getUserName()); productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId()); productionProductMain.setWorkOrderId(dto.getWorkOrderId()); productionProductMain.setStatus(0); // 添加报工主表 int insert = productionProductMainMapper.insert(productionProductMain); //更新工单 if (insert > 0) { Map<String, Object> params = new HashMap<>(); params.put("workOrderId", dto.getWorkOrderId()); params.put("deductQuantity", dto.getQuantity()); productWorkOrderMapper.updatePlanQuantity(params); productionProductMainMapper.insert(productionProductMain); /*新增报工投入表*/ List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId()); if (productStructureDtos.size() == 0) { //如果该工序没有产品结构的投入品,那这个投入品和产出品是同一个 ProductStructureDto productStructureDto = new ProductStructureDto(); productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId()); productStructureDto.setUnitQuantity(BigDecimal.ONE); productStructureDtos.add(productStructureDto); } ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId()); ProductModel productModel = productProcessRouteItem.getProductModelId() != null ? productModelMapper.selectById(productProcessRouteItem.getProductModelId()) : null; if (productModel != null) { for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); Product product = productMapper.selectById(productModel1.getProductId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException(product.getProductName()+"产品的"+productModel1.getModel() + "的规格库存为0"); } if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) { throw new RuntimeException(product.getProductName()+"产品的"+productModel1.getModel() + "的规格库存不足"); } ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); productionProductInput.setProductMainId(productionProductMain.getId()); productionProductInputMapper.insert(productionProductInput); //对应的库存出库 DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate now = LocalDate.now(); ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now)); Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS" + dateFormat.format(now))[1]); ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(0) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(productionProductMain.getId())//关联报工产出 .inboundBatches(aLong.equals(0L) ? "第1批次" : "第" + (aLong + 1) + "批次") .inboundNum(productionProductInput.getQuantity()) .type(4) .createBy(user.getNickName()) .productModelId(productModel1.getId()); procurementRecordOutMapper.insert(procurementRecordOut.build()); } /*新增报工产出表*/ ProductionProductOutput productionProductOutput = new ProductionProductOutput(); productionProductOutput.setProductMainId(productionProductMain.getId()); productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId()); productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO); productionProductOutputMapper.insert(productionProductOutput); //对应的过程检或者出厂检 List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())); int inspectType = 1; if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){ //最后一道工序生成出厂检 inspectType = 2; } Product product = productMapper.selectById(productModel.getProductId()); int inspectType = "组装".equals(productProcess.getName()) ? 2 : 1; QualityInspect qualityInspect = new QualityInspect(); qualityInspect.setProductId(product.getId()); qualityInspect.setProductName(product.getProductName()); @@ -173,7 +204,6 @@ qualityInspect.setProductMainId(productionProductMain.getId()); qualityInspect.setProductModelId(productModel.getId()); qualityInspectMapper.insert(qualityInspect); qualityTestStandardMapper.selectList( new LambdaQueryWrapper<QualityTestStandard>() .eq(QualityTestStandard::getProductId, product.getId()) @@ -184,68 +214,30 @@ param.setInspectId(qualityInspect.getId()); qualityInspectParamMapper.insert(param); }); } // 添加投入 if (productModel != null) { List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModel.getId()); for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); Product product = productMapper.selectById(productModel1.getProductId()); BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException(product.getProductName() + "库存为0"); } if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) { throw new RuntimeException(product.getProductName() + "库存不足"); } ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); productionProductInput.setProductMainId(productionProductMain.getId()); productionProductInputMapper.insert(productionProductInput); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd"); LocalDate now = LocalDate.now(); ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now)); Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS"+dateFormat.format(now))[1]); //添加出库处理 ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(0) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(0) .inboundBatches(aLong.equals(0L) ? "第1批次" : "第"+ (aLong + 1) + "批次") .inboundNum(productionProductInput.getQuantity()) .type(4) .createTime(LocalDateTime.now()) .createUser(user.getUserId()) .createBy(user.getNickName()) .updateUser(user.getUserId()) .updateTime(LocalDateTime.now()) .productModelId(productModel1.getId()); procurementRecordOutMapper.insert(procurementRecordOut.build()); } } // 添加产出 ProductionProductOutput productionProductOutput = new ProductionProductOutput(); productionProductOutput.setProductMainId(productionProductMain.getId()); productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId()); productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO); productionProductOutputMapper.insert(productionProductOutput); // 获取生产订单 /*更新工单和生产订单*/ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(new QueryWrapper<ProductionProductMain>().lambda().eq(ProductionProductMain::getWorkOrderId, dto.getWorkOrderId())); if (productionProductMains.isEmpty()) { productWorkOrder.setActualStartTime(LocalDate.now()); productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity())); if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())){ productWorkOrder.setActualStartTime(LocalDate.now());//实际开始时间 } if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0){ productWorkOrder.setActualEndTime(LocalDate.now());//实际结束时间 } productWorkOrderMapper.updateById(productWorkOrder); //生产订单 ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId()); if (productOrder == null) { throw new RuntimeException("生产订单不存在"); if (ObjectUtils.isNull(productOrder.getStartTime())){ productOrder.setStartTime(LocalDateTime.now());//开始时间 } // 添加生产核算 if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){ //如果是最后一道工序报工之后生产订单完成数量+ productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(dto.getQuantity())); if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0){ productOrder.setEndTime(LocalDateTime.now());//结束时间 } } productOrderMapper.updateById(productOrder); /*添加生产核算*/ SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder() .salesLedgerWorkId(productionProductMain.getId()) .salesLedgerSchedulingId(0L) @@ -260,40 +252,54 @@ .tenantId(dto.getTenantId()) .build(); salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting); return true; } @Override @Transactional public Boolean removeProductMain(ProductionProductMainDto dto) { Long id = dto.getId(); // 更新工单 productWorkOrderMapper.rollbackPlanQuantity(id); // 删除质检参数和质检记录 ProductionProductMain productionProductMain = productionProductMainMapper.selectById(dto.getId()); //该报工对应的工艺路线详情 ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId()); ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())).get(0); /*删除核算*/ salesLedgerProductionAccountingMapper.delete( new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, productionProductMain.getId()) ); /*更新工单和生产订单*/ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId()); productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().subtract(productionProductOutput.getQuantity())); productWorkOrder.setActualEndTime(null); productWorkOrderMapper.updateById(productWorkOrder); //判断是否是最后一道工序 List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())); if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()){ ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId()); productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().subtract(productionProductOutput.getQuantity())); productOrder.setEndTime(null); productOrderMapper.updateById(productOrder); } /*删除产出*/ //删除质检 qualityInspectMapper.selectList( new LambdaQueryWrapper<QualityInspect>() .eq(QualityInspect::getProductMainId, id) .eq(QualityInspect::getProductMainId, productionProductMain.getId()) ).forEach(q -> { qualityInspectParamMapper.delete( new LambdaQueryWrapper<QualityInspectParam>() .eq(QualityInspectParam::getInspectId, q.getId())); qualityInspectMapper.deleteById(q.getId()); }); // 删除产出记录 productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() .eq(ProductionProductOutput::getProductMainId, id) ); // 删除关联的核算数据 salesLedgerProductionAccountingMapper.delete( new LambdaQueryWrapper<SalesLedgerProductionAccounting>() .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id) ); .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())); /*删除投入*/ procurementRecordOutMapper.delete(new LambdaQueryWrapper<ProcurementRecordOut>() .eq(ProcurementRecordOut::getSalesLedgerProductId, productionProductMain.getId())); productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>() .eq(ProductionProductInput::getProductMainId, productionProductMain.getId())); // 删除主表 return productionProductMainMapper.deleteById(id) > 0; productionProductMainMapper.deleteById(productionProductMain.getId()); return true; } } src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
@@ -1,26 +1,19 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.common.utils.poi.ExcelUtil; import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto; import com.ruoyi.production.dto.SalesLedgerSchedulingDto; import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper; import com.ruoyi.production.pojo.SalesLedgerProductionAccounting; import com.ruoyi.production.pojo.SalesLedgerWork; import com.ruoyi.production.service.SalesLedgerProductionAccountingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import java.math.BigDecimal; @@ -61,11 +54,11 @@ return true; } @Override public void export(HttpServletResponse response) { Page page = new Page(-1,-1); IPage<SalesLedgerProductionAccountingDto> salesLedgerProductionAccountingDtoIPage = listPage(page, new SalesLedgerProductionAccountingDto()); ExcelUtil<SalesLedgerProductionAccountingDto> util = new ExcelUtil<>(SalesLedgerProductionAccountingDto.class); util.exportExcel(response, salesLedgerProductionAccountingDtoIPage.getRecords(), "生产订单"); } // @Override // public void export(HttpServletResponse response) { // Page page = new Page(-1,-1); // IPage<SalesLedgerProductionAccountingDto> salesLedgerProductionAccountingDtoIPage = listPage(page, new SalesLedgerProductionAccountingDto()); // ExcelUtil<SalesLedgerProductionAccountingDto> util = new ExcelUtil<>(SalesLedgerProductionAccountingDto.class); // util.exportExcel(response, salesLedgerProductionAccountingDtoIPage.getRecords(), "生产订单"); // } } src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -84,9 +84,9 @@ } // 状态 = 数量和完工数量比较 if(i.getSuccessNum().compareTo(new BigDecimal(0)) == 0){ if(i.getSchedulingNum().compareTo(new BigDecimal(0)) == 0){ i.setStatus("未开始"); } else if(i.getQuantity().compareTo(i.getSuccessNum()) <= 0){ } else if(i.getQuantity().compareTo(i.getSchedulingNum()) <= 0){ i.setStatus("已完成"); }else{ i.setStatus("生产中"); @@ -129,13 +129,6 @@ .filter(j -> j.getSalesLedgerProductId().equals(i.getSalesLedgerProductId())) .map(SalesLedgerWork::getFinishedNum) .reduce(BigDecimal.ZERO, BigDecimal::add)); if(i.getSuccessNum().compareTo(new BigDecimal(0)) == 0){ i.setStatus("未开始"); } else if(i.getQuantity().compareTo(i.getSuccessNum()) <= 0){ i.setStatus("已完成"); }else{ i.setStatus("生产中"); } }); ExcelUtil<SalesLedgerSchedulingDto> util = new ExcelUtil<>(SalesLedgerSchedulingDto.class); util.exportExcel(response, list, "生产订单"); src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
@@ -18,7 +18,6 @@ import com.ruoyi.production.mapper.SalesLedgerWorkMapper; import com.ruoyi.production.pojo.SalesLedgerProductionAccounting; import com.ruoyi.production.pojo.SalesLedgerWork; import com.ruoyi.production.service.SalesLedgerProductionAccountingService; import com.ruoyi.production.service.SalesLedgerWorkService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -24,6 +24,7 @@ import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -181,7 +182,7 @@ salesLedgerIPage.getRecords().forEach(receiptPaymentRecordDto -> { ReceiptPaymentRecordDto receiptPaymentRecordDto1 = new ReceiptPaymentRecordDto(); BeanUtils.copyProperties(receiptPaymentRecordDto, receiptPaymentRecordDto1); receiptPaymentRecordDto1.setInvoiceDate(Date.from(receiptPaymentRecordDto.getCreateTime().atZone(DEFAULT_ZONE_ID).toInstant())); receiptPaymentRecordDto1.setInvoiceDate(LocalDateTime.from(receiptPaymentRecordDto.getCreateTime().atZone(DEFAULT_ZONE_ID).toInstant())); receiptPaymentRecordDto1.setReceiptPaymentAmountTotal(receiptPaymentRecordDto.getReceiptPaymentAmount()); BeanUtils.copyProperties(receiptPaymentRecordDto, receiptPaymentRecordDto1); receiptPaymentRecordDtos.add(receiptPaymentRecordDto1); src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -101,7 +101,7 @@ // 生成出库记录 ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd(); procurementRecordOutAdd.setId(procurementRecordStorage.getId()); procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId())); procurementRecordOutAdd.setSalesLedgerProductId(salesLedgerProduct.getId()); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId())); procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString()); src/main/java/com/ruoyi/sales/dto/ReceiptPaymentRecordDto.java
@@ -1,6 +1,5 @@ package com.ruoyi.sales.dto; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +9,6 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; /** * @author :yys @@ -31,7 +29,7 @@ @DateTimeFormat(pattern = "yyyy-MM-dd") @Excel(name = "登记日期",width = 30,dateFormat = "yyyy-MM-dd") @ApiModelProperty(value = "登记日期") private LocalDateTime createTime; private LocalDateTime invoiceDate; @ApiModelProperty(value = "销售合同号") @Excel(name = "销售合同号") @@ -39,7 +37,7 @@ @ApiModelProperty(value = "回款金额") @Excel(name = "回款金额") private BigDecimal receiptPaymentAmount; private BigDecimal receiptPaymentAmountTotal; @ApiModelProperty(value = "项目名称") @Excel(name = "项目名称") src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java
@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface InvoiceRegistrationProductMapper extends BaseMapper<InvoiceRegistrationProduct> { /** src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -93,7 +93,6 @@ private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; private final InvoiceRegistrationMapper invoiceRegistrationMapper; @@ -704,7 +703,6 @@ productOrderMapper.insert(productOrder); ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())); List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(salesLedgerProduct.getProductModelId()); if (processRoute != null) { //新增生产订单工艺路线主表 ProductProcessRoute productProcessRoute = new ProductProcessRoute(); @@ -749,11 +747,6 @@ // 生成完整的工单号 String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productStructureDtos.stream().forEach(productStructureDto -> { if (productStructureDto.getProductModelId().equals(productProcessRouteItem.getProductModelId())){ productWorkOrder.setPlanQuantity(productWorkOrder.getPlanQuantity()); } }); if (Objects.equals(productProcessRouteItem.getProductModelId(), salesLedgerProduct.getProductModelId())) { productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity()); } src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -9,11 +9,9 @@ <result column="product_id" property="productId" /> <result column="model" property="model" /> <result column="unit" property="unit" /> <result column="speculative_trading_name" property="speculativeTradingName" /> <result column="tenant_id" property="tenantId" /> <result column="product_name" property="productName" /> <result column="product_id" property="productId" /> <result column="product_code" property="productCode" /> </resultMap> <select id="listPageProductModel" resultType="com.ruoyi.basic.pojo.ProductModel"> select pm.*,p.product_name src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -40,4 +40,19 @@ where pb.product_model_id = #{productModelId} order by ps.id </select> <select id="listBybomAndProcess" resultType="com.ruoyi.production.dto.ProductStructureDto"> select ps.*, p.product_name, pp.name as process_name, pm.product_id, pm.model from product_structure ps left join product_model pm on ps.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on ps.process_id = pp.id where ps.bom_id = #{bomId} and ps.process_id=#{processId} order by ps.id </select> </mapper>