Browse Source

生产计划

master
陈薪名 2 years ago
parent
commit
7e0b2f8014
  1. 25
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionDetailController.java
  2. 153
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionMainController.java
  3. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/vo/ProductionMainBaseVO.java
  4. 37
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/vo/ProductionMainExcelVO.java
  5. 57
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/vo/ProductionMainImportVO.java
  6. 25
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/production/ProductionMainConvert.java
  7. 16
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/production/ProductionMainDO.java
  8. 35
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/production/ProductionDetailMapper.java
  9. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/production/ProductionMainMapper.java
  10. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionDetailService.java
  11. 68
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionDetailServiceImpl.java
  12. 32
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainService.java
  13. 426
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java

25
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionDetailController.java

@ -8,9 +8,12 @@ import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.production.vo.*;
import com.win.module.wms.controller.work.vo.WorkMainExcelVO;
import com.win.module.wms.convert.production.ProductionDetailConvert;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
import com.win.module.wms.service.production.ProductionDetailService;
import com.win.module.wms.service.production.ProductionMainService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -23,7 +26,9 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@ -37,6 +42,9 @@ public class ProductionDetailController {
@Resource
private ProductionDetailService productionDetailService;
@Resource
private ProductionMainService productionMainService;
@Resource
private AdminUserApi userApi;
@ -90,23 +98,6 @@ public class ProductionDetailController {
return success(ProductionDetailConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出生产计划子 Excel")
@PreAuthorize("@ss.hasPermission('wms:production-detail:export')")
@OperateLog(type = EXPORT)
public void exportProductionDetailExcel(@Valid ProductionDetailExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProductionDetailDO> list = productionDetailService.getProductionDetailList(exportReqVO);
// 导出 Excel
List<ProductionDetailExcelVO> datas = ProductionDetailConvert.INSTANCE.convertList02(list);
for(ProductionDetailExcelVO vo : datas) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
//后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname());
}
ExcelUtils.write(response, "生产计划子.xls", "数据", ProductionDetailExcelVO.class, datas);
}
@PostMapping("/senior")
@Operation(summary = "高级搜索获得生产计划子分页")
@PreAuthorize("@ss.hasPermission('wms:production-detail:query')")

153
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/ProductionMainController.java

@ -11,9 +11,15 @@ import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.production.vo.*;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestImportVO;
import com.win.module.wms.controller.work.vo.WorkMainExcelVO;
import com.win.module.wms.convert.production.ProductionMainConvert;
import com.win.module.wms.convert.work.WorkMainConvert;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
import com.win.module.wms.dal.dataobject.work.WorkDetailDO;
import com.win.module.wms.dal.dataobject.work.WorkMainDO;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.service.production.ProductionDetailService;
import com.win.module.wms.service.production.ProductionMainService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -43,10 +49,10 @@ public class ProductionMainController {
@Resource
private ProductionMainService productionMainService;
@Resource
private ProductionDetailService productionDetailService;
@Resource
private AdminUserApi userApi;
@PostMapping("/create")
@Operation(summary = "创建生产计划主")
@PreAuthorize("@ss.hasPermission('wms:production-main:create')")
@ -97,6 +103,35 @@ public class ProductionMainController {
return success(ProductionMainConvert.INSTANCE.convertPage(pageResult));
}
@PostMapping("/senior")
@Operation(summary = "高级搜索获得生产计划主分页")
@PreAuthorize("@ss.hasPermission('wms:production-main:query')")
public CommonResult<PageResult<ProductionMainRespVO>> getProductionMainSenior(@Valid @RequestBody CustomConditions conditions) {
PageResult<ProductionMainDO> pageResult = productionMainService.getProductionMainSenior(conditions);
PageResult<ProductionMainRespVO> result = ProductionMainConvert.INSTANCE.convertPage(pageResult);
for(ProductionMainRespVO vo : result.getList()) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
//后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname());
}
return success(result);
}
private List<ProductionMainExcelVO> getExcelVo(List<ProductionMainDO> list, Map<Integer, String[]> mapDropDown) {
String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE);
mapDropDown.put(13, available);
List<ProductionMainExcelVO> resultList = new ArrayList<>();
// 导出
for(ProductionMainDO mainDO : list) {
List<ProductionDetailDO> subList = productionDetailService.selectList(mainDO.getId());
for(ProductionDetailDO detailDO : subList) {
ProductionMainExcelVO vo = ProductionMainConvert.INSTANCE.convert(mainDO, detailDO);
resultList.add(vo);
}
}
return resultList;
}
@GetMapping("/export-excel")
@Operation(summary = "导出生产计划主 Excel")
@PreAuthorize("@ss.hasPermission('wms:production-main:export')")
@ -104,42 +139,46 @@ public class ProductionMainController {
public void exportProductionMainExcel(@Valid ProductionMainExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProductionMainDO> list = productionMainService.getProductionMainList(exportReqVO);
// 导出 Excel
List<ProductionMainExcelVO> datas = ProductionMainConvert.INSTANCE.convertList02(list);
for(ProductionMainExcelVO vo : datas) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
//组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<ProductionMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
for(ProductionMainExcelVO vo : resultList) {
//后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname());
vo.setCreator(userApi.getUser(Long.valueOf(vo.getCreator())).getNickname());
//后端创建个字段作为前端展示的虚拟字段
vo.setUpdater(userApi.getUser(Long.valueOf(vo.getUpdater())).getNickname());
}
ExcelUtils.write(response, "生产计划主.xls", "数据", ProductionMainExcelVO.class, datas);
ExcelUtils.write(response, "生产计划.xls", "生产计划", ProductionMainExcelVO.class, resultList);
}
@PostMapping("/senior")
@Operation(summary = "高级搜索获得生产计划主分页")
@PreAuthorize("@ss.hasPermission('wms:production-main:query')")
public CommonResult<PageResult<ProductionMainRespVO>> getProductionMainSenior(@Valid @RequestBody CustomConditions conditions) {
PageResult<ProductionMainDO> pageResult = productionMainService.getProductionMainSenior(conditions);
PageResult<ProductionMainRespVO> result = ProductionMainConvert.INSTANCE.convertPage(pageResult);
for(ProductionMainRespVO vo : result.getList()) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
@GetMapping("/export-excel-senior")
@Operation(summary = "导出生产计划主 Excel")
@PreAuthorize("@ss.hasPermission('wms:production-main:export')")
@OperateLog(type = EXPORT)
public void exportProductionMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException {
List<ProductionMainDO> list = productionMainService.getProductionMainList(conditions);
//组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<ProductionMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
for(ProductionMainExcelVO vo : resultList) {
//后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname());
vo.setCreator(userApi.getUser(Long.valueOf(vo.getCreator())).getNickname());
//后端创建个字段作为前端展示的虚拟字段
vo.setUpdater(userApi.getUser(Long.valueOf(vo.getUpdater())).getNickname());
}
return success(result);
ExcelUtils.write(response, "生产计划.xlsx", "生产计划", ProductionMainExcelVO.class, resultList, mapDropDown);
}
@GetMapping("/get-import-template")
@Operation(summary = "获得导入生产计划信息模板")
@Operation(summary = "获得导入生产计划模板")
public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo
List<PurchaseclaimRequestImportVO> list = new ArrayList<>();
List<ProductionMainImportVO> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] purchaseReturnReason = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_RETURN_REASON);
mapDropDown.put(16, purchaseReturnReason);
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(25, uom);
mapDropDown.put(11, uom);
// 输出
ExcelUtils.write(response, "生产计划信息导入模板.xlsx", "生产计划信息列表", PurchaseclaimRequestImportVO.class, list, mapDropDown);
ExcelUtils.write(response, "生产计划导入模板.xlsx", "生产计划", ProductionMainImportVO.class, list, mapDropDown);
}
@PostMapping("/import")
@ -161,10 +200,74 @@ public class ProductionMainController {
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size());
if(!errorList.isEmpty()) {
String url = ExcelUtils.writeLocalFile("生产计划基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
String url = ExcelUtils.writeLocalFile("生产计划信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
returnMap.put("errorFile", url);
}
return success(returnMap);
}
@PutMapping("/close")
@Operation(summary = "关闭生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:close')")
public CommonResult<Boolean> closeProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.closeProductionMain(id);
return success(count > 0);
}
@PutMapping("/submit")
@Operation(summary = "提交生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:submit')")
public CommonResult<Boolean> submitProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.submitProductionMain(id);
return success(count > 0);
}
@PutMapping("/open")
@Operation(summary = "打开生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:open')")
public CommonResult<Boolean> openProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.openProductionMain(id);
return success(count > 0);
}
@PutMapping("/reject")
@Operation(summary = "驳回生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:reject')")
public CommonResult<Boolean> rejectProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.rejectProductionMain(id);
return success(count > 0);
}
@PutMapping("/agree")
@Operation(summary = "审批通过生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:agree')")
public CommonResult<Boolean> agreeProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.agreeProductionMain(id);
return success(count > 0);
}
@PutMapping("/publish")
@Operation(summary = "发布生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:publish')")
public CommonResult<Boolean> publishProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.publishProductionMain(id);
return success(count > 0);
}
@PutMapping("/resetting")
@Operation(summary = "重置生产计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:production-main:resetting')")
public CommonResult<Boolean> resettingProductionMain(@RequestParam("id") Long id) {
Integer count = productionMainService.resettingProductionMain(id);
return success(count > 0);
}
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/vo/ProductionMainBaseVO.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.production.vo;
import com.win.framework.excel.core.annotations.OnlyOne;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -44,6 +45,7 @@ public class ProductionMainBaseVO {
private LocalDateTime planDate;
@Schema(description = "单据号")
@OnlyOne
private String number;
@Schema(description = "业务类型")

37
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/vo/ProductionMainExcelVO.java

@ -1,7 +1,10 @@
package com.win.module.wms.controller.production.vo;
import com.win.module.wms.enums.DictTypeConstants;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
@ -74,9 +77,35 @@ public class ProductionMainExcelVO {
@ExcelProperty("是否可用")
private String available;
@ExcelProperty("订单号")
private String woNumber;
@ExcelProperty("Bom版本")
private String bomVersion;
@ExcelProperty("合格数量")
private BigDecimal goodQty;
@ExcelProperty("不合格数量")
private BigDecimal notGoodQty;
@ExcelProperty("物品代码")
private String itemCode;
@ExcelProperty("计划数量")
private BigDecimal planQty;
@ExcelProperty("计量单位")
@DictFormat(DictTypeConstants.UOM)
private String uom;
@ExcelProperty("是否可用")
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String availableDetail;
@ExcelProperty("备注")
private String remarkDetail;
@ExcelProperty("订单行")
private String woLine;
// @ExcelProperty("订单号")
// private String woNumber;
//
// @ExcelProperty("订单行")
// private String woLine;
}

57
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/production/vo/ProductionMainImportVO.java

@ -2,17 +2,24 @@ package com.win.module.wms.controller.production.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.annotations.OnlyOne;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 采购索赔申请子 Excel VO
* 生产计划 Excel VO
*
* @author 超级管理员
*/
@ -23,41 +30,53 @@ import java.time.LocalDateTime;
public class ProductionMainImportVO {
@ExcelProperty("单据号")
@NotNull
private String number;
@ExcelProperty("顺序")
private String hang;
@NotNull
private Integer displayOrder;
@ExcelProperty("车间")
private String supplierCode;
@NotNull
private String workshop;
@ExcelProperty("生产线")
private String contactName;
@NotNull
private String productionLine;
@ExcelProperty("班次")
@ColumnWidth(value = 16)
private String contactPhone;
@NotNull
private String shift;
@ExcelProperty("班组")
@ColumnWidth(value = 16)
private String contactEmail;
@ExcelProperty("计划日期")
private LocalDateTime isConsignment;
@NotNull
private String team;
@ExcelProperty("订单行")
private String woLine;
@ExcelProperty("开始日期")
@NotNull
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime beginTime;
@ExcelProperty("订单号")
private String woNumber;
@ExcelProperty("结束日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
//子表数据
@ExcelProperty("Bom版本")
private String itemCode;
@NotNull
private String bomVersion;
@ExcelProperty("物品代码")
private BigDecimal orderQty;
@NotNull
private String itemCode;
@ExcelProperty("计划数量")
private String uom;
@NotNull
private BigDecimal planQty;
@ExcelProperty("计量单位")
private BigDecimal overReceivingPercent;
@NotNull
@DictFormat(DictTypeConstants.UOM)
private String uom;
}

25
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/production/ProductionMainConvert.java

@ -4,11 +4,11 @@ import java.util.*;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.production.vo.ProductionMainCreateReqVO;
import com.win.module.wms.controller.production.vo.ProductionMainExcelVO;
import com.win.module.wms.controller.production.vo.ProductionMainRespVO;
import com.win.module.wms.controller.production.vo.ProductionMainUpdateReqVO;
import com.win.module.wms.controller.production.vo.*;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
@ -34,4 +34,21 @@ public interface ProductionMainConvert {
List<ProductionMainExcelVO> convertList02(List<ProductionMainDO> list);
@Mappings({
@Mapping(source = "mainDO.number", target = "number"),
})
ProductionMainImportErrorVO convert(ProductionMainCreateReqVO mainDO, ProductionDetailDO detailDO);
@Mappings({
@Mapping(source = "mainDO.number", target = "number"),
@Mapping(source = "mainDO.remark", target = "remark"),
@Mapping(source = "mainDO.createTime", target = "createTime"),
@Mapping(source = "mainDO.creator", target = "creator"),
@Mapping(source = "mainDO.updateTime", target = "updateTime"),
@Mapping(source = "mainDO.updater", target = "updater"),
@Mapping(source = "mainDO.available", target = "available"),
@Mapping(source = "detailDO.available", target = "availableDetail"),
@Mapping(source = "detailDO.remark", target = "remarkDetail"),
})
ProductionMainExcelVO convert(ProductionMainDO mainDO, ProductionDetailDO detailDO);
}

16
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/production/ProductionMainDO.java

@ -109,13 +109,13 @@ public class ProductionMainDO extends BaseDO {
*/
private String available;
/**
* 订单号
*/
private String woNumber;
/**
* 订单行
*/
private String woLine;
// /**
// * 订单号
// */
// private String woNumber;
// /**
// * 订单行
// */
// private String woLine;
}

35
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/production/ProductionDetailMapper.java

@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.production.vo.ProductionDetailExportReqVO;
import com.win.module.wms.controller.production.vo.ProductionDetailPageReqVO;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.work.WorkDetailDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -42,22 +43,26 @@ public interface ProductionDetailMapper extends BaseMapperX<ProductionDetailDO>
return selectPage(conditions, QueryWrapperUtils.structure(conditions));
}
default List<ProductionDetailDO> selectList(ProductionDetailExportReqVO reqVO) {
default List<ProductionDetailDO> selectList(Long masterId) {
return selectList(new LambdaQueryWrapperX<ProductionDetailDO>()
.eqIfPresent(ProductionDetailDO::getBomVersion, reqVO.getBomVersion())
.eqIfPresent(ProductionDetailDO::getGoodQty, reqVO.getGoodQty())
.eqIfPresent(ProductionDetailDO::getNotGoodQty, reqVO.getNotGoodQty())
.eqIfPresent(ProductionDetailDO::getNumber, reqVO.getNumber())
.eqIfPresent(ProductionDetailDO::getItemCode, reqVO.getItemCode())
.eqIfPresent(ProductionDetailDO::getRemark, reqVO.getRemark())
.betweenIfPresent(ProductionDetailDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ProductionDetailDO::getCreator, reqVO.getCreator())
.eqIfPresent(ProductionDetailDO::getPlanQty, reqVO.getPlanQty())
.eqIfPresent(ProductionDetailDO::getUom, reqVO.getUom())
.betweenIfPresent(ProductionDetailDO::getUpdateTime, reqVO.getUpdateTime())
.eqIfPresent(ProductionDetailDO::getUpdater, reqVO.getUpdater())
.eqIfPresent(ProductionDetailDO::getAvailable, reqVO.getAvailable())
.orderByDesc(ProductionDetailDO::getId));
.eq(ProductionDetailDO::getMasterId, masterId));
}
// default List<ProductionDetailDO> selectList(ProductionDetailExportReqVO reqVO) {
// return selectList(new LambdaQueryWrapperX<ProductionDetailDO>()
// .eqIfPresent(ProductionDetailDO::getBomVersion, reqVO.getBomVersion())
// .eqIfPresent(ProductionDetailDO::getGoodQty, reqVO.getGoodQty())
// .eqIfPresent(ProductionDetailDO::getNotGoodQty, reqVO.getNotGoodQty())
// .eqIfPresent(ProductionDetailDO::getNumber, reqVO.getNumber())
// .eqIfPresent(ProductionDetailDO::getItemCode, reqVO.getItemCode())
// .eqIfPresent(ProductionDetailDO::getRemark, reqVO.getRemark())
// .betweenIfPresent(ProductionDetailDO::getCreateTime, reqVO.getCreateTime())
// .eqIfPresent(ProductionDetailDO::getCreator, reqVO.getCreator())
// .eqIfPresent(ProductionDetailDO::getPlanQty, reqVO.getPlanQty())
// .eqIfPresent(ProductionDetailDO::getUom, reqVO.getUom())
// .betweenIfPresent(ProductionDetailDO::getUpdateTime, reqVO.getUpdateTime())
// .eqIfPresent(ProductionDetailDO::getUpdater, reqVO.getUpdater())
// .eqIfPresent(ProductionDetailDO::getAvailable, reqVO.getAvailable())
// .orderByDesc(ProductionDetailDO::getId));
// }
}

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/production/ProductionMainMapper.java

@ -8,6 +8,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.production.vo.ProductionMainExportReqVO;
import com.win.module.wms.controller.production.vo.ProductionMainPageReqVO;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
import com.win.module.wms.dal.dataobject.work.WorkMainDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -39,8 +40,8 @@ public interface ProductionMainMapper extends BaseMapperX<ProductionMainDO> {
.betweenIfPresent(ProductionMainDO::getUpdateTime, reqVO.getUpdateTime())
.eqIfPresent(ProductionMainDO::getUpdater, reqVO.getUpdater())
.eqIfPresent(ProductionMainDO::getAvailable, reqVO.getAvailable())
.eqIfPresent(ProductionMainDO::getWoNumber, reqVO.getWoNumber())
.eqIfPresent(ProductionMainDO::getWoLine, reqVO.getWoLine())
// .eqIfPresent(ProductionMainDO::getWoNumber, reqVO.getWoNumber())
// .eqIfPresent(ProductionMainDO::getWoLine, reqVO.getWoLine())
.orderByDesc(ProductionMainDO::getId));
}
@ -71,9 +72,12 @@ public interface ProductionMainMapper extends BaseMapperX<ProductionMainDO> {
.betweenIfPresent(ProductionMainDO::getUpdateTime, reqVO.getUpdateTime())
.eqIfPresent(ProductionMainDO::getUpdater, reqVO.getUpdater())
.eqIfPresent(ProductionMainDO::getAvailable, reqVO.getAvailable())
.eqIfPresent(ProductionMainDO::getWoNumber, reqVO.getWoNumber())
.eqIfPresent(ProductionMainDO::getWoLine, reqVO.getWoLine())
// .eqIfPresent(ProductionMainDO::getWoNumber, reqVO.getWoNumber())
// .eqIfPresent(ProductionMainDO::getWoLine, reqVO.getWoLine())
.orderByDesc(ProductionMainDO::getId));
}
default List<ProductionMainDO> selectSeniorList(CustomConditions conditions) {
return selectList(QueryWrapperUtils.structure(conditions));
}
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionDetailService.java

@ -32,14 +32,14 @@ public interface ProductionDetailService {
*
* @param updateReqVO 更新信息
*/
void updateProductionDetail(@Valid ProductionDetailUpdateReqVO updateReqVO);
Integer updateProductionDetail(@Valid ProductionDetailUpdateReqVO updateReqVO);
/**
* 删除生产计划子
*
* @param id 编号
*/
void deleteProductionDetail(Long id);
Integer deleteProductionDetail(Long id);
/**
* 获得生产计划子
@ -71,7 +71,7 @@ public interface ProductionDetailService {
* @param exportReqVO 查询条件
* @return 生产计划子列表
*/
List<ProductionDetailDO> getProductionDetailList(ProductionDetailExportReqVO exportReqVO);
// List<ProductionDetailDO> getProductionDetailList(ProductionDetailExportReqVO exportReqVO);
/**
* 获得用高级搜索户分页列表
@ -81,4 +81,5 @@ public interface ProductionDetailService {
*/
PageResult<ProductionDetailDO> getProductionDetailSenior(CustomConditions conditions);
List<ProductionDetailDO> selectList(Long masterId);
}

68
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionDetailServiceImpl.java

@ -2,15 +2,24 @@ package com.win.module.wms.service.production;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.module.infra.api.trends.TrendsApi;
import com.win.module.infra.enums.TrendsTypeEnum;
import com.win.module.system.api.dict.DictDataApi;
import com.win.module.wms.controller.production.vo.ProductionDetailCreateReqVO;
import com.win.module.wms.controller.production.vo.ProductionDetailExportReqVO;
import com.win.module.wms.controller.production.vo.ProductionDetailPageReqVO;
import com.win.module.wms.controller.production.vo.ProductionDetailUpdateReqVO;
import com.win.module.wms.convert.production.ProductionDetailConvert;
import com.win.module.wms.dal.dataobject.accountcalendar.AccountcalendarDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
import com.win.module.wms.dal.mysql.production.ProductionDetailMapper;
import com.win.module.wms.service.bom.BomService;
import com.win.module.wms.service.itembasic.ItembasicService;
import com.win.module.wms.service.productionlineitem.ProductionlineitemService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
@ -18,6 +27,7 @@ import java.util.Collection;
import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.ITEMBASIC_UOM_EXCEPTION;
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTION_DETAIL_NOT_EXISTS;
/**
@ -29,33 +39,53 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTION_DETAIL_NOT_
@Validated
public class ProductionDetailServiceImpl implements ProductionDetailService {
@Resource
private BomService bomService;
@Resource
private ProductionlineitemService productionlineitemService;
@Resource
private DictDataApi dictDataApi;
@Resource
private ItembasicService itembasicService;
@Resource
private ProductionDetailMapper productionDetailMapper;
@Resource
private TrendsApi trendsApi;
@Resource
private ProductionMainService productionMainService;
@Override
@Transactional
public Long createProductionDetail(ProductionDetailCreateReqVO createReqVO) {
// 插入
ProductionDetailDO productionDetail = ProductionDetailConvert.INSTANCE.convert(createReqVO);
validateProductionDetailCreate(productionDetail);
productionDetailMapper.insert(productionDetail);
trendsApi.createTrends(productionDetail.getId(), "productionDetail", "增加了生产计划子表", TrendsTypeEnum.CREATE);
// 返回
return productionDetail.getId();
}
@Override
public void updateProductionDetail(ProductionDetailUpdateReqVO updateReqVO) {
@Transactional
public Integer updateProductionDetail(ProductionDetailUpdateReqVO updateReqVO) {
// 校验存在
validateProductionDetailExists(updateReqVO.getId());
// 更新
ProductionDetailDO updateObj = ProductionDetailConvert.INSTANCE.convert(updateReqVO);
productionDetailMapper.updateById(updateObj);
validateProductionDetailCreate(updateObj);
trendsApi.createTrends(updateObj.getId(), "productionDetail", "更新了生产计划子表", TrendsTypeEnum.UPDATE);
return productionDetailMapper.updateById(updateObj);
}
@Override
public void deleteProductionDetail(Long id) {
@Transactional
public Integer deleteProductionDetail(Long id) {
// 校验存在
validateProductionDetailExists(id);
// 删除
productionDetailMapper.deleteById(id);
trendsApi.createTrends(id, "productionDetail", "删除了生产计划子表", TrendsTypeEnum.DELETE);
return productionDetailMapper.deleteById(id);
}
private void validateProductionDetailExists(Long id) {
@ -79,13 +109,35 @@ public class ProductionDetailServiceImpl implements ProductionDetailService {
return productionDetailMapper.selectPage(pageReqVO);
}
@Override
public List<ProductionDetailDO> getProductionDetailList(ProductionDetailExportReqVO exportReqVO) {
return productionDetailMapper.selectList(exportReqVO);
}
// @Override
// public List<ProductionDetailDO> getProductionDetailList(ProductionDetailExportReqVO exportReqVO) {
// return productionDetailMapper.selectList(exportReqVO);
// }
@Override
public PageResult<ProductionDetailDO> getProductionDetailSenior(CustomConditions conditions) {
return productionDetailMapper.selectSenior(conditions);
}
@Override
public List<ProductionDetailDO> selectList(Long masterId) {
return productionDetailMapper.selectList(masterId);
}
/**
* 新增校验
* @param detailDo
* @return
*/
private void validateProductionDetailCreate(ProductionDetailDO detailDo) {
// 校验物品代码
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode());
if (!itembasicDO.getUom().equals(detailDo.getUom())) {
throw exception(ITEMBASIC_UOM_EXCEPTION, dictDataApi.selectDictValue(detailDo.getUom()).getLabel(), dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel());
}
// 校验生产线和物品关系
productionlineitemService.productionLineCodeAndpItemCodeExist(productionMainService.getProductionMain(detailDo.getMasterId()).getProductionLine(), detailDo.getItemCode());
// 校验物品和bom关系
bomService.bomItemCodeAndVersionExist(detailDo.getItemCode(), detailDo.getBomVersion());
}
}

32
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainService.java

@ -5,6 +5,7 @@ import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.production.vo.*;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
import com.win.module.wms.dal.dataobject.work.WorkMainDO;
import javax.validation.Valid;
import java.util.Collection;
@ -88,12 +89,39 @@ public interface ProductionMainService {
PageResult<ProductionMainDO> getProductionMainSenior(CustomConditions conditions);
/**
* 批量导入采购索赔申请主信息
* @param datas 导入采购索赔申请主信息列表
* 获得生产计划主列表, 用于 Excel 导出
*
* @param conditions 查询条件
* @return 生产计划主列表
*/
List<ProductionMainDO> getProductionMainList(CustomConditions conditions);
/**
* 批量导入生产计划信息
* @param datas 导入生产计划主信息列表
* @param mode 导入模式1更新2追加3覆盖
* @param updatePart 是否支持更新
* @return 导入结果
*/
public List<ProductionMainImportErrorVO> importProductionMainList(List<ProductionMainCreateReqVO> datas, Integer mode, boolean updatePart);
/**
* 关闭生产计划
*
* @param id 生产计划ID
* @return 更新数量
*/
Integer closeProductionMain(Long id);
Integer submitProductionMain(Long id);
Integer openProductionMain(Long id);
Integer rejectProductionMain(Long id);
Integer agreeProductionMain(Long id);
Integer publishProductionMain(Long id);
Integer resettingProductionMain(Long id);
}

426
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java

@ -2,25 +2,52 @@ package com.win.module.wms.service.production;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.exceptions.UtilException;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.framework.common.exception.ServiceException;
import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.common.util.validation.ValidationUtils;
import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.module.infra.api.trends.TrendsApi;
import com.win.module.infra.enums.TrendsTypeEnum;
import com.win.module.system.api.dict.DictDataApi;
import com.win.module.system.api.serialnumber.SerialNumberApi;
import com.win.module.system.enums.serialNumber.RuleCodeEnum;
import com.win.module.wms.controller.production.vo.*;
import com.win.module.wms.controller.work.vo.WorkDetailCreateReqVO;
import com.win.module.wms.controller.work.vo.WorkMainImportErrorVO;
import com.win.module.wms.convert.production.ProductionDetailConvert;
import com.win.module.wms.convert.production.ProductionMainConvert;
import com.win.module.wms.convert.purchasereceiptRequest.PurchasereceiptRequestDetailConvert;
import com.win.module.wms.convert.work.WorkDetailConvert;
import com.win.module.wms.convert.work.WorkMainConvert;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.production.ProductionMainDO;
import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO;
import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestDetailDO;
import com.win.module.wms.dal.dataobject.purchasereceiptRequest.PurchasereceiptRequestMainDO;
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO;
import com.win.module.wms.dal.dataobject.team.TeamDO;
import com.win.module.wms.dal.dataobject.work.WorkDetailDO;
import com.win.module.wms.dal.dataobject.work.WorkMainDO;
import com.win.module.wms.dal.mysql.documentSwitch.SwitchMapper;
import com.win.module.wms.dal.mysql.documentsetting.DocumentsettingMapper;
import com.win.module.wms.dal.mysql.preparetoissue.PreparetoissueMainMapper;
import com.win.module.wms.dal.mysql.production.ProductionDetailMapper;
import com.win.module.wms.dal.mysql.production.ProductionMainMapper;
import com.win.module.wms.dal.mysql.productreceiptJob.ProductreceiptJobDetailMapper;
import com.win.module.wms.dal.mysql.productreceiptRequest.ProductreceiptRequestMainMapper;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.plan.PlanStatusState;
import com.win.module.wms.enums.request.RequestStatusEnum;
import com.win.module.wms.enums.request.RequestStatusState;
import com.win.module.wms.service.bom.BomService;
import com.win.module.wms.service.itembasic.ItembasicService;
import com.win.module.wms.service.preparetoissue.PreparetoissueMainService;
import com.win.module.wms.service.productionline.ProductionlineService;
import com.win.module.wms.service.productionlineitem.ProductionlineitemService;
import com.win.module.wms.service.shift.ShiftService;
@ -29,19 +56,29 @@ import com.win.module.wms.service.team.TeamService;
import com.win.module.wms.service.work.WorkMainService;
import com.win.module.wms.service.workshop.WorkshopService;
import com.win.module.wms.util.JobUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.validation.Validator;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTION_MAIN_NOT_EXISTS;
import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY;
import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
/**
* 生产计划主 Service 实现类
@ -52,6 +89,19 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASECLAIM_REQUEST_
@Validated
public class ProductionMainServiceImpl implements ProductionMainService {
@Resource
private SwitchMapper switchMapper;
@Resource
private DictDataApi dictDataApi;
@Resource
private TrendsApi trendsApi;
@Resource
private SerialNumberApi serialNumberApi;
@Resource
private Validator validator;
@Resource
private BomService bomService;
@Resource
private ProductionMainMapper productionMainMapper;
@Resource
@ -77,18 +127,34 @@ public class ProductionMainServiceImpl implements ProductionMainService {
@Resource
private WorkMainService workMainService;
@Override
@Transactional
public Long createProductionMain(ProductionMainCreateReqVO createReqVO) {
// 插入
ProductionMainDO productionMain = ProductionMainConvert.INSTANCE.convert(createReqVO);
productionMainMapper.insert(productionMain);
ProductionMainDO mainDO = ProductionMainConvert.INSTANCE.convert(createReqVO);
List<ProductionDetailDO> subDOList = ProductionDetailConvert.INSTANCE.convertList03(createReqVO.getSubList());
for (ProductionDetailDO detailDO : subDOList) {
this.validateProductionDetailCreate(mainDO, detailDO);
}
String number = serialNumberApi.generateCode(RuleCodeEnum.WORK_PLAN.getCode());
mainDO.setNumber(number);
mainDO.setBusinessType("ProductReceipt"); // 业务类型:制品收货
productionMainMapper.insert(mainDO);
for (ProductionDetailDO detailDO : subDOList) {
detailDO.setMasterId(mainDO.getId());
detailDO.setNumber(number);
detailDO.setGoodQty(new BigDecimal(0.0));
detailDO.setNotGoodQty(new BigDecimal(0.0));
}
productionDetailMapper.insertBatch(subDOList);
//增加操作记录
trendsApi.createTrends(mainDO.getId(), "productionMain", "增加了生产计划", TrendsTypeEnum.CREATE);
// 返回
return productionMain.getId();
return mainDO.getId();
}
@Override
@Transactional
public void updateProductionMain(ProductionMainUpdateReqVO updateReqVO) {
// 校验存在
validateProductionMainExists(updateReqVO.getId());
@ -105,10 +171,12 @@ public class ProductionMainServiceImpl implements ProductionMainService {
productionMainMapper.deleteById(id);
}
private void validateProductionMainExists(Long id) {
if (productionMainMapper.selectById(id) == null) {
private ProductionMainDO validateProductionMainExists(Long id) {
ProductionMainDO existProductionMainDO = productionMainMapper.selectById(id);
if (existProductionMainDO == null) {
throw exception(PRODUCTION_MAIN_NOT_EXISTS);
}
return existProductionMainDO;
}
@Override
@ -163,135 +231,154 @@ public class ProductionMainServiceImpl implements ProductionMainService {
}
@Override
public List<ProductionMainImportErrorVO> importProductionMainList(List<ProductionMainCreateReqVO> datas, Integer mode, boolean updatePart) {
if (CollUtil.isEmpty(datas)) {
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY);
}
List<ProductionMainImportErrorVO> errorList = new ArrayList<>();
datas.forEach(createReqVO -> {
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
String messageMain = "";
//主表的验证
// 校验班组基础信息
try {
if (!"".equals(createReqVO.getTeam())) {
TeamDO teamDO = teamService.selectTeamExist(createReqVO.getTeam());
if (teamDO == null) {
messageMain += "班组" + createReqVO.getTeam() + "无效" + ",";
}
public List<ProductionMainDO> getProductionMainList(CustomConditions conditions) {
return productionMainMapper.selectSeniorList(conditions);
}
} catch (Exception ex) {
messageMain += ex.getMessage() + ",";
/**
* 新增校验
* @param detailDo
* @return
*/
private void validateProductionDetailCreate(ProductionMainDO mainDo, ProductionDetailDO detailDo) {
// 校验物品代码
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode());
if (!itembasicDO.getUom().equals(detailDo.getUom())) {
throw exception(ITEMBASIC_UOM_EXCEPTION, dictDataApi.selectDictValue(detailDo.getUom()).getLabel(), dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel());
}
// 校验车间 基础信息
workshopService.selectWorkshopExist(mainDo.getWorkshop());
// 校验生产线基础信息
productionlineService.productionLineCodeExist(mainDo.getProductionLine());
// 校验班组基础信息
teamService.selectTeamExist(mainDo.getTeam());
// 校验班次基础信息
try {
if (!"".equals(createReqVO.getShift())) {
TeamDO teamDO = teamService.selectTeamExist(createReqVO.getTeam());
if (teamDO == null) {
messageMain += "班组" + createReqVO.getTeam() + "无效" + ",";
}
}
} catch (Exception ex) {
messageMain += ex.getMessage() + ",";
shiftService.selectShiftExist(mainDo.getShift());
// 校验生产线和物品关系
productionlineitemService.productionLineCodeAndpItemCodeExist(mainDo.getProductionLine(), detailDo.getItemCode());
// 校验物品和bom关系
bomService.bomItemCodeAndVersionExist(detailDo.getItemCode(), detailDo.getBomVersion());
}
//子表的验证
List<ProductionDetailCreateReqVO> subList = createReqVO.getSubList();
List<ProductionDetailDO> subDOList = ProductionDetailConvert.INSTANCE.convertList03(subList);
for (ProductionDetailDO purchasePlanDetailDO : subDOList) {
String messageDetail = "";
// 校验物品基础信息
/**
* 主表校验导入
* @param mainDo
* @return
*/
private String validateProductionMainImport(ProductionMainDO mainDo) {
StringBuilder message = new StringBuilder();
try {
ItembasicDO itembasicDO = itembasicService.selectItembasic(purchasePlanDetailDO.getItemCode());
if (itembasicDO.getUom() != purchasePlanDetailDO.getUom()) {
messageDetail += "计量单位" + itembasicDO.getUom() + "错误,应该是" + purchasePlanDetailDO.getUom() + ",";
} else {
// purchasePlanDetailDO.setItemDesc1(itembasicDO.getDesc1());
// purchasePlanDetailDO.setItemDesc2(itembasicDO.getDesc2());
// purchasePlanDetailDO.setItemName(itembasicDO.getName());
// purchasePlanDetailDO.setProjectCode(itembasicDO.getProject());
}
} catch (ServiceException ex) {
messageDetail += ex.getMessage() + ",";
ValidationUtils.validate(validator, mainDo);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验车间 基础信息
try {
workshopService.selectWorkshopExist(createReqVO.getWorkshop());
workshopService.selectWorkshopExist(mainDo.getWorkshop());
} catch (Exception ex) {
messageMain += ex.getMessage() + ",";
message.append(ex.getMessage()).append(",");
}
// 校验生产线基础信息
try {
ProductionlineDO productionlineDO = productionlineService.productionLineCodeExist(createReqVO.getProductionLine());
if (productionlineDO != null) {
//prodlinedto.fg_location_code=to_location_code
}
productionlineService.productionLineCodeExist(mainDo.getProductionLine());
} catch (Exception ex) {
messageMain += ex.getMessage() + ",";
message.append(ex.getMessage()).append(",");
}
// 校验工位基础信息
// try {
// if("".equals(work_station_code){
//
// }
// } catch (Exception ex) {
// messageMain += ex.getMessage() + ",";
// }
// 校验零件生产线关系
// 校验班组基础信息
try {
// productionlineitemService.productionLineCodeAndpItemCodeExist(createReqVO.getProductionLineCode(), purchasePlanDetailDO.getItemCode());
teamService.selectTeamExist(mainDo.getTeam());
} catch (Exception ex) {
messageMain += ex.getMessage() + ",";
message.append(ex.getMessage()).append(",");
}
// 检验生产订单
// 校验班次基础信息
try {
workMainService.selectWorkExist(createReqVO.getNumber(),purchasePlanDetailDO.getItemCode());
shiftService.selectShiftExist(mainDo.getShift());
} catch (Exception ex) {
messageMain += ex.getMessage() + ",";
message.append(ex.getMessage()).append(",");
}
return message.toString();
}
ProductionDetailCreateReqVO purchasePlanDetailCreateReqVO = ProductionDetailConvert.INSTANCE.convert1(purchasePlanDetailDO);
ProductionMainImportErrorVO importVO = ProductionDetailConvert.INSTANCE.convert(createReqVO, purchasePlanDetailCreateReqVO);
//进行子表的错误统计
//主表没有错误 写入库里
if (!messageMain.equals("") || !messageDetail.equals("")) {
importVO.setImportStatus("失败");
messageMain = messageMain + messageDetail;
importVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1));
errorList.add(importVO);
} else {
purchasePlanDetailDO.setNumber(createReqVO.getNumber());
purchasePlanDetailDO.setMasterId(createReqVO.getId());
purchasePlanDetailDO.setGoodQty(new BigDecimal(0));
purchasePlanDetailDO.setNotGoodQty(new BigDecimal(0));
/**
* 子表校验导入
* @param detailDo
* @return
*/
private String validateProductionDetailImport(ProductionMainDO mainDo, ProductionDetailDO detailDo) {
StringBuilder message = new StringBuilder();
try {
ValidationUtils.validate(validator, detailDo);
} catch (Exception e) {
message.append(e.getMessage()).append(",");
}
// 校验物品代码
try {
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode());
if (!dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel().equals(detailDo.getUom())) {
message.append("计量单位【").append(detailDo.getUom()).append("】错误,应该是【").append(dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel()).append("】").append(",");
}
} catch (Exception e) {
message.append(e.getMessage()).append(",");
}
if (errorList.isEmpty()) {
ProductionMainDO existPurchaseclaimRequestMainDO = productionMainMapper.selectByNumber(createReqVO.getNumber());
// 判断如果不存在,在进行插入
if (existPurchaseclaimRequestMainDO == null && mode != 3) {
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("WorkPlan");
if (businesstypeDO != null) {
createReqVO.setBusinessType(businesstypeDO.getCode());
// 校验生产线和物品关系
try {
productionlineitemService.productionLineCodeAndpItemCodeExist(mainDo.getProductionLine(), detailDo.getItemCode());
} catch (Exception e) {
message.append(e.getMessage()).append(",");
}
// 校验物品和bom关系
try {
bomService.bomItemCodeAndVersionExist(detailDo.getItemCode(), detailDo.getBomVersion());
} catch (Exception e) {
message.append(e.getMessage()).append(",");
}
return message.toString();
}
ProductionMainDO createObj = ProductionMainConvert.INSTANCE.convert(createReqVO);
productionMainMapper.insert(createObj);
productionDetailMapper.insertBatch(subDOList);
} else if (existPurchaseclaimRequestMainDO == null && mode != 2) {
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("WorkPlan");
if (businesstypeDO != null) {
createReqVO.setBusinessType(businesstypeDO.getCode());
@Override
@Transactional
public List<ProductionMainImportErrorVO> importProductionMainList(List<ProductionMainCreateReqVO> datas, Integer mode, boolean updatePart) {
if (CollUtil.isEmpty(datas)) {
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY);
}
ProductionMainDO createObj = ProductionMainConvert.INSTANCE.convert(createReqVO);
productionMainMapper.updateById(createObj);
productionDetailMapper.updateBatch(subDOList);
List<ProductionMainImportErrorVO> errorList = new ArrayList<>();
datas.forEach(createReqVO -> {
ProductionMainDO mainDO = ProductionMainConvert.INSTANCE.convert(createReqVO);
String messageMain = this.validateProductionMainImport(mainDO);
List<ProductionDetailCreateReqVO> subList = createReqVO.getSubList();
List<ProductionDetailDO> subDOList = ProductionDetailConvert.INSTANCE.convertList03(subList);
// 是否有错误数据
boolean flag = true;
for (ProductionDetailDO detailDO : subDOList) {
String messageDetail = this.validateProductionDetailImport(mainDO, detailDO);
if (!messageMain.isEmpty() || !messageDetail.isEmpty()) {
ProductionMainImportErrorVO importErrorVO = ProductionMainConvert.INSTANCE.convert(createReqVO, detailDO);
importErrorVO.setImportStatus("失败");
messageMain = messageMain + messageDetail;
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1));
errorList.add(importErrorVO);
flag = false;
}
}
//写入数据
if(flag) {
//申请单目前只做新增
String number = serialNumberApi.generateCode(RuleCodeEnum.WORK_PLAN.getCode());
mainDO.setNumber(number);
mainDO.setAvailable("TRUE"); // 导入默认 可用
mainDO.setBusinessType("ProductReceipt"); // 业务类型:制品收货
mainDO.setStatus("1"); // 默认新增状态
productionMainMapper.insert(mainDO);
//增加操作记录
trendsApi.createTrends(mainDO.getId(), "productionMain", "导入了生产计划", TrendsTypeEnum.CREATE);
for (ProductionDetailDO detailDO : subDOList) {
detailDO.setMasterId(mainDO.getId());
detailDO.setNumber(number);
detailDO.setAvailable("TRUE"); // 导入默认 可用
detailDO.setGoodQty(new BigDecimal(0.0));
detailDO.setNotGoodQty(new BigDecimal(0.0));
}
productionDetailMapper.insertBatch(subDOList);
}
});
//错误不为空并非部分更新,手工回滚
@ -301,4 +388,123 @@ public class ProductionMainServiceImpl implements ProductionMainService {
return errorList;
}
@Override
@Transactional
public Integer closeProductionMain(Long id) {
// 校验存在存在下级单据
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.close();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_CLOSE);
}
mainDO.setStatus(planStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productionMain", "关闭了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer submitProductionMain(Long id) {
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.submit();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_SUBMIT);
}
mainDO.setStatus(planStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productionMain", "提交了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
@Override
public Integer openProductionMain(Long id) {
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.open();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_OPEN);
}
mainDO.setStatus(planStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productionMain", "打开了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
@Override
public Integer rejectProductionMain(Long id) {
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.reject();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_REJECT);
}
mainDO.setStatus(planStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productionMain", "驳回了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
@Override
public Integer agreeProductionMain(Long id) {
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.agree();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_AGREE);
}
mainDO.setStatus(planStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productionMain", "审批通过了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
@Override
public Integer publishProductionMain(Long id) {
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.publish();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_PUBLISH);
}
mainDO.setStatus(planStatusState.getState().getCode());
// 生成申请单据
this.generateRequest(mainDO, productionDetailMapper.selectList(mainDO.getId()));
//增加操作记录
trendsApi.createTrends(id, "productionMain", "发布了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
@Override
public Integer resettingProductionMain(Long id) {
ProductionMainDO mainDO = validateProductionMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.resetting();
if(!flag) {
throw new ServiceException(PRODUCTION_MAIN_CANNOT_RESETTING);
}
mainDO.setStatus(planStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productionMain", "重置了生产计划", TrendsTypeEnum.UPDATE);
return productionMainMapper.updateById(mainDO);
}
/**
* 生成申请单据
* @param mainDO
* @param detailDOList
*/
private void generateRequest(ProductionMainDO mainDO, List<ProductionDetailDO> detailDOList ) {
// 判断单据设置:该计划发布后 是否创建 备料计划
if(switchMapper.selectByCode("CreatePrepareToIssuePlanAfterProductionPlanPublished").getEffectiveSetValue().equals("TRUE")) {
// TODO:先做备料计划导入新增编辑 之后再补充这里
}
// 判断单据设置:该计划发布后 是否创建 制品收货申请
if(switchMapper.selectByCode("CreateProductReciptRequestAfterProductionPlanPublished").getEffectiveSetValue().equals("TRUE")) {
// TODO:先做制品收货申请导入新增编辑 之后再补充这里
}
}
}

Loading…
Cancel
Save