Browse Source

生产收货申请及回冲bom版本

master
陈薪名 2 years ago
parent
commit
08e2f5789a
  1. 6
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java
  2. 110
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/BackflushRequestDetailbController.java
  3. 72
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbBaseVO.java
  4. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbCreateReqVO.java
  5. 69
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbExcelVO.java
  6. 65
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbExportReqVO.java
  7. 71
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbPageReqVO.java
  8. 13
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbRespVO.java
  9. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbUpdateReqVO.java
  10. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestMainController.java
  11. 66
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestMainExcelVO.java
  12. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreturnRequest/ProductionreturnRequestDetailController.java
  13. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptJob/vo/ProductreceiptJobMainBaseVO.java
  14. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptJob/vo/ProductreceiptJobMainPageReqVO.java
  15. 11
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/ProductreceiptRequestDetailController.java
  16. 182
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/ProductreceiptRequestMainController.java
  17. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailBaseVO.java
  18. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailExcelVO.java
  19. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailExportReqVO.java
  20. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailPageReqVO.java
  21. 18
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestImportErrorVO.java
  22. 56
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestImportVO.java
  23. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestMainBaseVO.java
  24. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestMainCreateReqVO.java
  25. 127
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestMainExcelVO.java
  26. 34
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/backflushRequest/BackflushRequestDetailbConvert.java
  27. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productreceiptRequest/ProductreceiptRequestDetailConvert.java
  28. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productreceiptRequest/ProductreceiptRequestMainConvert.java
  29. 89
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/backflushRequest/BackflushRequestDetailbDO.java
  30. 8
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/productreceiptJob/ProductreceiptJobMainDO.java
  31. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/productreceiptRequest/ProductreceiptRequestDetailDO.java
  32. 61
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/backflushRequest/BackflushRequestDetailbMapper.java
  33. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productreceiptJob/ProductreceiptJobMainMapper.java
  34. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productreceiptRequest/ProductreceiptRequestDetailMapper.java
  35. 5
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productreceiptRequest/ProductreceiptRequestMainMapper.java
  36. 77
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/backflushRequest/BackflushRequestDetailbService.java
  37. 91
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/backflushRequest/BackflushRequestDetailbServiceImpl.java
  38. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/bom/BomService.java
  39. 59
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java
  40. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageMassage/PackageServiceImpl.java
  41. 33
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainServiceImpl.java
  42. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnJob/ProductionreturnJobMainServiceImpl.java
  43. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestDetailService.java
  44. 9
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestDetailServiceImpl.java
  45. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java
  46. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestDetailService.java
  47. 85
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestDetailServiceImpl.java
  48. 23
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestMainService.java
  49. 688
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestMainServiceImpl.java
  50. 48
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java

6
win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java

@ -654,6 +654,10 @@ public interface ErrorCodeConstants {
//制品收货申请子ErrorCode
ErrorCode PRODUCTRECEIPT_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_001_102_001, "制品收货申请子不存在");
ErrorCode PRODUCTRECEIPT_REQUEST_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_001_102_001, "导入制品收货申请不能为空");
ErrorCode PRODUCTRECEIPT_REQUEST_JOB_EXISTS = new ErrorCode(1_001_102_002, "制品收货申请存在制品收货任务单");
ErrorCode PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR = new ErrorCode(1_001_102_003, "制品收货申请状态错误");
//制品收货任务主ErrorCode
ErrorCode PRODUCTRECEIPT_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_103_000, "制品收货任务主不存在");
//制品收货申请子ErrorCode
@ -1035,5 +1039,7 @@ public interface ErrorCodeConstants {
ErrorCode BARBASIC_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_303_001, "条码实体列表不存在");
ErrorCode ENTERPRISE_EXISTS = new ErrorCode(1_000_303_001, "企业已存在");
ErrorCode BACKFLUSH_REQUEST_DETAILB_NOT_EXISTS = new ErrorCode(1_000_304_001, "制品收货申请二子表不存在");
}

110
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/BackflushRequestDetailbController.java

@ -0,0 +1,110 @@
package com.win.module.wms.controller.backflushRequest;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.common.pojo.CommonResult;
import static com.win.framework.common.pojo.CommonResult.success;
import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.win.module.wms.controller.backflushRequest.vo.*;
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO;
import com.win.module.wms.convert.backflushRequest.BackflushRequestDetailbConvert;
import com.win.module.wms.service.backflushRequest.BackflushRequestDetailbService;
@Tag(name = "管理后台 - 制品收货申请子")
@RestController
@RequestMapping("/wms/backflush-request-detailb")
@Validated
public class BackflushRequestDetailbController {
@Resource
private BackflushRequestDetailbService backflushRequestDetailbService;
@PostMapping("/create")
@Operation(summary = "创建制品收货申请子")
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:create')")
public CommonResult<Long> createBackflushRequestDetailb(@Valid @RequestBody BackflushRequestDetailbCreateReqVO createReqVO) {
return success(backflushRequestDetailbService.createBackflushRequestDetailb(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新制品收货申请子")
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:update')")
public CommonResult<Boolean> updateBackflushRequestDetailb(@Valid @RequestBody BackflushRequestDetailbUpdateReqVO updateReqVO) {
int result = backflushRequestDetailbService.updateBackflushRequestDetailb(updateReqVO);
return success(result > 0);
}
@DeleteMapping("/delete")
@Operation(summary = "删除制品收货申请子")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:delete')")
public CommonResult<Boolean> deleteBackflushRequestDetailb(@RequestParam("id") Long id) {
int result = backflushRequestDetailbService.deleteBackflushRequestDetailb(id);
return success(result > 0);
}
@GetMapping("/get")
@Operation(summary = "获得制品收货申请子")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:query')")
public CommonResult<BackflushRequestDetailbRespVO> getBackflushRequestDetailb(@RequestParam("id") Long id) {
BackflushRequestDetailbDO backflushRequestDetailb = backflushRequestDetailbService.getBackflushRequestDetailb(id);
return success(BackflushRequestDetailbConvert.INSTANCE.convert(backflushRequestDetailb));
}
@GetMapping("/list")
@Operation(summary = "获得制品收货申请子列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:query')")
public CommonResult<List<BackflushRequestDetailbRespVO>> getBackflushRequestDetailbList(@RequestParam("ids") Collection<Long> ids) {
List<BackflushRequestDetailbDO> list = backflushRequestDetailbService.getBackflushRequestDetailbList(ids);
return success(BackflushRequestDetailbConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得制品收货申请子分页")
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:query')")
public CommonResult<PageResult<BackflushRequestDetailbRespVO>> getBackflushRequestDetailbPage(@Valid BackflushRequestDetailbPageReqVO pageVO) {
PageResult<BackflushRequestDetailbDO> pageResult = backflushRequestDetailbService.getBackflushRequestDetailbPage(pageVO);
return success(BackflushRequestDetailbConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出制品收货申请子 Excel")
@PreAuthorize("@ss.hasPermission('wms:backflush-request-detailb:export')")
@OperateLog(type = EXPORT)
public void exportBackflushRequestDetailbExcel(@Valid BackflushRequestDetailbExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<BackflushRequestDetailbDO> list = backflushRequestDetailbService.getBackflushRequestDetailbList(exportReqVO);
// 导出 Excel
List<BackflushRequestDetailbExcelVO> datas = BackflushRequestDetailbConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "制品收货申请子.xls", "数据", BackflushRequestDetailbExcelVO.class, datas);
}
@GetMapping("/get-import-template")
@Operation(summary = "获得导入制品收货申请子模板")
public void importTemplate(HttpServletResponse response) throws IOException {
List<BackflushRequestDetailbExcelVO> list = Arrays.asList();
// 输出
ExcelUtils.write(response, "制品收货申请子基本信息导入模板.xls", "制品收货申请子基本信息列表", BackflushRequestDetailbExcelVO.class, list);
}
}

72
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbBaseVO.java

@ -0,0 +1,72 @@
package com.win.module.wms.controller.backflushRequest.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 制品收货申请子 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data
public class BackflushRequestDetailbBaseVO {
@Schema(description = "id")
private Long id;
@Schema(description = "工序代码")
private String processCode;
@Schema(description = "BOM版本")
private String bomVersion;
@Schema(description = "物品代码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "物品代码不能为空")
private String itemCode;
@Schema(description = "单据号")
private String number;
@Schema(description = "备注")
private String remark;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "创建时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime createTime;
@Schema(description = "物品名称")
private String itemName;
@Schema(description = "物品描述1")
private String itemDesc1;
@Schema(description = "物品描述2")
private String itemDesc2;
@Schema(description = "项目代码")
private String projectCode;
@Schema(description = "数量")
private BigDecimal qty;
@Schema(description = "计量单位")
private String uom;
@Schema(description = "最后更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime updateTime;
@Schema(description = "最后更新者用户名")
private String updater;
@Schema(description = "创建者用户名")
private String creator;
}

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbCreateReqVO.java

@ -0,0 +1,14 @@
package com.win.module.wms.controller.backflushRequest.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 制品收货申请子创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BackflushRequestDetailbCreateReqVO extends BackflushRequestDetailbBaseVO {
}

69
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbExcelVO.java

@ -0,0 +1,69 @@
package com.win.module.wms.controller.backflushRequest.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert;
/**
* 制品收货申请子 Excel VO
*
* @author 超级管理员
*/
@Data
public class BackflushRequestDetailbExcelVO {
@ExcelProperty("工序代码")
private String processCode;
@ExcelProperty("BOM版本")
private String bomVersion;
@ExcelProperty("物品代码")
private String itemCode;
@ExcelProperty("单据号")
private String number;
@ExcelProperty("备注")
private String remark;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@ExcelProperty("物品名称")
private String itemName;
@ExcelProperty("物品描述1")
private String itemDesc1;
@ExcelProperty("物品描述2")
private String itemDesc2;
@ExcelProperty("项目代码")
private String projectCode;
@ExcelProperty("数量")
private BigDecimal qty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String uom;
@ExcelProperty("最后更新时间")
private LocalDateTime updateTime;
@ExcelProperty("最后更新者用户名")
private String updater;
@ExcelProperty("创建者用户名")
private String creator;
}

65
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbExportReqVO.java

@ -0,0 +1,65 @@
package com.win.module.wms.controller.backflushRequest.vo;
import lombok.*;
import java.math.BigDecimal;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 制品收货申请子 Excel 导出 Request VO,参数和 BackflushRequestDetailbPageReqVO 是一致的")
@Data
public class BackflushRequestDetailbExportReqVO {
@Schema(description = "工序代码")
private String processCode;
@Schema(description = "BOM版本")
private String bomVersion;
@Schema(description = "物品代码")
private String itemCode;
@Schema(description = "单据号")
private String number;
@Schema(description = "备注")
private String remark;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "物品名称")
private String itemName;
@Schema(description = "物品描述1")
private String itemDesc1;
@Schema(description = "物品描述2")
private String itemDesc2;
@Schema(description = "项目代码")
private String projectCode;
@Schema(description = "数量")
private BigDecimal qty;
@Schema(description = "计量单位")
private String uom;
@Schema(description = "最后更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
@Schema(description = "最后更新者用户名")
private String updater;
@Schema(description = "创建者用户名")
private String creator;
}

71
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbPageReqVO.java

@ -0,0 +1,71 @@
package com.win.module.wms.controller.backflushRequest.vo;
import lombok.*;
import java.math.BigDecimal;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 制品收货申请子分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BackflushRequestDetailbPageReqVO extends PageParam {
@Schema(description = "工序代码")
private String processCode;
@Schema(description = "BOM版本")
private String bomVersion;
@Schema(description = "物品代码")
private String itemCode;
@Schema(description = "单据号")
private String number;
@Schema(description = "备注")
private String remark;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "物品名称")
private String itemName;
@Schema(description = "物品描述1")
private String itemDesc1;
@Schema(description = "物品描述2")
private String itemDesc2;
@Schema(description = "项目代码")
private String projectCode;
@Schema(description = "数量")
private BigDecimal qty;
@Schema(description = "计量单位")
private String uom;
@Schema(description = "最后更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
@Schema(description = "最后更新者用户名")
private String updater;
@Schema(description = "创建者用户名")
private String creator;
@Schema(description = "主表ID")
private String masterId;
}

13
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbRespVO.java

@ -0,0 +1,13 @@
package com.win.module.wms.controller.backflushRequest.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 制品收货申请子 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BackflushRequestDetailbRespVO extends BackflushRequestDetailbBaseVO {
}

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/backflushRequest/vo/BackflushRequestDetailbUpdateReqVO.java

@ -0,0 +1,14 @@
package com.win.module.wms.controller.backflushRequest.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 制品收货申请子更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BackflushRequestDetailbUpdateReqVO extends BackflushRequestDetailbBaseVO {
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/IssueRequestMainController.java

@ -211,7 +211,7 @@ public class IssueRequestMainController {
@Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")
})
@PreAuthorize("@ss.hasPermission('wms:inspect-request-main:import')")
@PreAuthorize("@ss.hasPermission('wms:issue-request-main:import')")
public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,

66
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/issueRequest/vo/IssueRequestMainExcelVO.java

@ -26,6 +26,21 @@ public class IssueRequestMainExcelVO {
@ExcelProperty("车间代码")
private String workshopCode;
@ExcelProperty("单据号")
private String number;
@ExcelProperty("申请时间")
private LocalDateTime requestTime;
@ExcelProperty("截止时间")
private LocalDateTime dueTime;
@ExcelProperty(value = "状态", converter = RequestStatusConverter.class)
private String status;
@ExcelProperty("使用在途库")
private String useOnTheWayLocation;
@ExcelProperty("从仓库代码")
private String fromWarehouseCode;
@ -33,11 +48,11 @@ public class IssueRequestMainExcelVO {
private String toWarehouseCode;
@ExcelProperty(value = "从库位类型范围", converter = DictConvert.class)
@DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@DictFormat(DictTypeConstants.LOCATION_TYPE)
private String fromLocationTypes;
@ExcelProperty(value = "到库位类型范围", converter = DictConvert.class)
@DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@DictFormat(DictTypeConstants.LOCATION_TYPE)
private String toLocationTypes;
@ExcelProperty("从库区代码范围")
@ -46,8 +61,24 @@ public class IssueRequestMainExcelVO {
@ExcelProperty("到库区代码范围")
private String toAreaCodes;
@ExcelProperty("单据号")
private String number;
@ExcelProperty("部门")
private String departmentCode;
@ExcelProperty(value = "自动提交", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoCommit;
@ExcelProperty(value = "自动通过", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoAgree;
@ExcelProperty(value = "自动执行", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoExecute;
@ExcelProperty(value = "直接生成记录", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String directCreateRecord;
@ExcelProperty("业务类型")
private String businessType;
@ -61,39 +92,12 @@ public class IssueRequestMainExcelVO {
@ExcelProperty("创建者用户名")
private String creator;
@ExcelProperty("申请时间")
private LocalDateTime requestTime;
@ExcelProperty("截止时间")
private LocalDateTime dueTime;
@ExcelProperty("部门")
private String departmentCode;
@ExcelProperty(value = "状态", converter = RequestStatusConverter.class)
private String status;
@ExcelProperty("最后更新时间")
private LocalDateTime updateTime;
@ExcelProperty("最后更新者用户名")
private String updater;
@ExcelProperty("使用在途库")
private String useOnTheWayLocation;
@ExcelProperty("自动提交")
private String autoCommit;
@ExcelProperty("自动通过")
private String autoAgree;
@ExcelProperty("自动执行")
private String autoExecute;
@ExcelProperty("直接生成记录")
private String directCreateRecord;
// 子表数据
@ExcelProperty("生产线代码")
private String productionLineCode;

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreturnRequest/ProductionreturnRequestDetailController.java

@ -122,4 +122,16 @@ public class ProductionreturnRequestDetailController {
return success(result);
}
/**
* 更新 生产退料申请 子表数据 包装号字段
* @param number
*/
@PutMapping("/updateDetailPackingNumber")
@Operation(summary = "更新生产退料申请子")
public CommonResult<Boolean> updateProductreceiptPackingNumber(@RequestParam("id") Long id, @RequestParam("number") String number) {
productionreturnRequestDetailService.updateProductreceiptRequestDetailPackingNumber(id, number);
return success(true);
}
}

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptJob/vo/ProductreceiptJobMainBaseVO.java

@ -149,4 +149,10 @@ public class ProductreceiptJobMainBaseVO {
@Schema(description = "允许修改箱码")
private String allowModifyPackingNumber;
@Schema(description = "入库库存状态范围")
private String inInventoryStatuses;
@Schema(description = "出库库存状态范围")
private String outInventoryStatuses;
}

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptJob/vo/ProductreceiptJobMainPageReqVO.java

@ -139,4 +139,10 @@ public class ProductreceiptJobMainPageReqVO extends PageParam {
@Schema(description = "允许修改箱码")
private String allowModifyPackingNumber;
@Schema(description = "入库库存状态范围")
private String inInventoryStatuses;
@Schema(description = "出库库存状态范围")
private String outInventoryStatuses;
}

11
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/ProductreceiptRequestDetailController.java

@ -120,4 +120,15 @@ public class ProductreceiptRequestDetailController {
}
return success(result);
}
/**
* 更新 制品收货申请 子表数据 包装号字段
* @param number
*/
@PutMapping("/updateDetailPackingNumber")
@Operation(summary = "更新制品收货申请子")
public CommonResult<Boolean> updateProductreceiptPackingNumber(@RequestParam("id") Long id, @RequestParam("number") String number) {
productreceiptRequestDetailService.updateProductreceiptRequestDetailPackingNumber(id, number);
return success(true);
}
}

182
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/ProductreceiptRequestMainController.java

@ -3,27 +3,35 @@ package com.win.module.wms.controller.productreceiptRequest;
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.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ConvertUtil;
import com.win.framework.excel.core.util.ExcelUtils;
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.productreceiptRequest.vo.*;
import com.win.module.wms.convert.productreceiptRequest.ProductreceiptRequestMainConvert;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.service.productreceiptRequest.ProductreceiptRequestDetailService;
import com.win.module.wms.service.productreceiptRequest.ProductreceiptRequestMainService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@ -34,6 +42,8 @@ import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Validated
public class ProductreceiptRequestMainController {
@Resource
private ProductreceiptRequestDetailService productreceiptRequestDetailService;
@Resource
private ProductreceiptRequestMainService productreceiptRequestMainService;
@ -90,23 +100,6 @@ public class ProductreceiptRequestMainController {
return success(ProductreceiptRequestMainConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出制品收货申请主 Excel")
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:export')")
@OperateLog(type = EXPORT)
public void exportProductreceiptRequestMainExcel(@Valid ProductreceiptRequestMainExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProductreceiptRequestMainDO> list = productreceiptRequestMainService.getProductreceiptRequestMainList(exportReqVO);
// 导出 Excel
List<ProductreceiptRequestMainExcelVO> datas = ProductreceiptRequestMainConvert.INSTANCE.convertList02(list);
for(ProductreceiptRequestMainExcelVO vo : datas) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
//后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname());
}
ExcelUtils.write(response, "制品收货申请主.xls", "数据", ProductreceiptRequestMainExcelVO.class, datas);
}
@PostMapping("/senior")
@Operation(summary = "高级搜索获得账期日历分页")
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:query')")
@ -121,4 +114,155 @@ public class ProductreceiptRequestMainController {
return success(result);
}
private List<ProductreceiptRequestMainExcelVO> getExcelVo(List<ProductreceiptRequestMainDO> list, Map<Integer, String[]> mapDropDown) {
String[] locationTypes = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.LOCATION_TYPE);
mapDropDown.put(9, locationTypes);
String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE);
mapDropDown.put(12, available);
mapDropDown.put(13, available);
mapDropDown.put(14, available);
mapDropDown.put(15, available);
String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS);
mapDropDown.put(31, inventoryStatus);
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(35, uom);
mapDropDown.put(42, uom);
List<ProductreceiptRequestMainExcelVO> resultList = new ArrayList<>();
// 导出
for(ProductreceiptRequestMainDO mainDO : list) {
List<ProductreceiptRequestDetailDO> subList = productreceiptRequestDetailService.selectList(mainDO.getId());
for(ProductreceiptRequestDetailDO detailDO : subList) {
ProductreceiptRequestMainExcelVO vo = ProductreceiptRequestMainConvert.INSTANCE.convert(mainDO, detailDO);
resultList.add(vo);
}
}
return resultList;
}
@GetMapping("/export-excel-senior")
@Operation(summary = "导出生产计划主 Excel")
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:export')")
@OperateLog(type = EXPORT)
public void exportProductreceiptRequestMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException {
List<ProductreceiptRequestMainDO> list = productreceiptRequestMainService.getProductreceiptRequestMainList(conditions);
//组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<ProductreceiptRequestMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
resultList.forEach(item -> {
//后端创建个字段作为前端展示的虚拟字段
item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname());
item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname());
});
ExcelUtils.write(response, "制品收货申请.xlsx", "制品收货申请", ProductreceiptRequestMainExcelVO.class, resultList, mapDropDown);
}
@GetMapping("/export-excel")
@Operation(summary = "导出制品收货申请 Excel")
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:export')")
@OperateLog(type = EXPORT)
public void exportProductreceiptRequestMainExcel(@Valid ProductreceiptRequestMainExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProductreceiptRequestMainDO> list = productreceiptRequestMainService.getProductreceiptRequestMainList(exportReqVO);
//组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<ProductreceiptRequestMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
resultList.forEach(item -> {
//后端创建个字段作为前端展示的虚拟字段
item.setCreator(userApi.getUser(Long.valueOf(item.getCreator())).getNickname());
item.setUpdater(userApi.getUser(Long.valueOf(item.getUpdater())).getNickname());
});
ExcelUtils.write(response, "制品收货申请.xls", "制品收货申请", ProductreceiptRequestMainExcelVO.class, resultList);
}
@GetMapping("/get-import-template")
@Operation(summary = "获得导入制品收货申请模板")
public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo
List<ProductreceiptRequestImportVO> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(10, uom);
// 输出
ExcelUtils.write(response, "制品收货申请导入模板.xlsx", "制品收货申请", ProductreceiptRequestImportVO.class, list, mapDropDown);
}
@PostMapping("/import")
@Operation(summary = "导入制品收货申请基本信息")
@Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true),
@Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")
})
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:import')")
public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<ProductreceiptRequestImportVO> list = ExcelUtils.read(file, ProductreceiptRequestImportVO.class);
ConvertUtil<ProductreceiptRequestMainCreateReqVO> convertUtil = new ConvertUtil<>(ProductreceiptRequestMainCreateReqVO.class);
List<ProductreceiptRequestMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList();
List<ProductreceiptRequestImportErrorVO> errorList = productreceiptRequestMainService.importProductreceiptRequestList(createReqVOList, mode, updatePart);
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);
returnMap.put("errorFile", url);
}
return success(returnMap);
}
@PutMapping("/close")
@Operation(summary = "关闭")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:close')")
public CommonResult<Boolean> closeProductreceiptRequestMain(@RequestParam("id") Long id) {
Integer count = productreceiptRequestMainService.closeProductreceiptRequestMain(id);
return success(count > 0);
}
@PutMapping("/reAdd")
@Operation(summary = "重新添加")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:reAdd')")
public CommonResult<Boolean> reAddProductreceiptRequestMain(@RequestParam("id") Long id) {
Integer count = productreceiptRequestMainService.reAddProductreceiptRequestMain(id);
return success(count > 0);
}
@PutMapping("/submit")
@Operation(summary = "提交审批")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:submit')")
public CommonResult<Boolean> submitProductreceiptRequestMain(@RequestParam("id") Long id) {
Integer count = productreceiptRequestMainService.submitProductreceiptRequestMain(id);
return success(count > 0);
}
@PutMapping("/refused")
@Operation(summary = "驳回")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:refused')")
public CommonResult<Boolean> refusedProductreceiptRequestMain(@RequestParam("id") Long id) {
Integer count = productreceiptRequestMainService.refusedProductreceiptRequestMain(id);
return success(count > 0);
}
@PutMapping("/agree")
@Operation(summary = "审批通过")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:agree')")
public CommonResult<Boolean> agreeProductreceiptRequestMain(@RequestParam("id") Long id) {
Integer count = productreceiptRequestMainService.agreeProductreceiptRequestMain(id);
return success(count > 0);
}
@PutMapping("/handle")
@Operation(summary = "处理")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:productreceipt-request-main:handle')")
public CommonResult<Boolean> handleProductreceiptRequestMain(@RequestParam("id") Long id) {
Integer count = productreceiptRequestMainService.handleProductreceiptRequestMain(id);
return success(count > 0);
}
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailBaseVO.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.productreceiptRequest.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -115,4 +116,10 @@ public class ProductreceiptRequestDetailBaseVO {
@Schema(description = "到库位代码")
private String toLocationCode;
@Schema(description = "bom版本")
private String bomVersion;
@Schema(description = "主表ID")
private String masterId;
}

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailExcelVO.java

@ -109,4 +109,7 @@ public class ProductreceiptRequestDetailExcelVO {
@ExcelProperty("到货主代码")
private String toOwnerCode;
@ExcelProperty("bom版本")
private String bomVersion;
}

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailExportReqVO.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.productreceiptRequest.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*;
import java.math.BigDecimal;
@ -103,4 +104,7 @@ public class ProductreceiptRequestDetailExportReqVO {
@Schema(description = "到货主代码")
private String toOwnerCode;
@Schema(description = "bom版本")
private String bomVersion;
}

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestDetailPageReqVO.java

@ -105,4 +105,7 @@ public class ProductreceiptRequestDetailPageReqVO extends PageParam {
@Schema(description = "到货主代码")
private String toOwnerCode;
@Schema(description = "主表ID")
private String masterId;
}

18
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestImportErrorVO.java

@ -0,0 +1,18 @@
package com.win.module.wms.controller.productreceiptRequest.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProductreceiptRequestImportErrorVO extends ProductreceiptRequestImportVO {
@ExcelProperty(value = "导入状态", index = 0)
private String importStatus;
@ExcelProperty(value = "导入说明", index = 1)
private String importRemark;
}

56
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestImportVO.java

@ -0,0 +1,56 @@
package com.win.module.wms.controller.productreceiptRequest.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class ProductreceiptRequestImportVO {
// 主表
@ExcelProperty("车间代码")
private String workshopCode;
@ExcelProperty("班组")
private String team;
@ExcelProperty("班次")
private String shift;
@ExcelProperty("截止时间")
private String dueTime;
// 子表
@ExcelProperty("生产线代码")
private String productionLineCode;
@ExcelProperty("工位代码")
private String workStationCode;
@ExcelProperty("工序代码")
private String processCode;
@ExcelProperty("bom版本")
private String bomVersion;
@ExcelProperty("物品代码")
private String itemCode;
@ExcelProperty("批次")
private String batch;
@ExcelProperty("数量")
private String qty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private String uom;
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestMainBaseVO.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.productreceiptRequest.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 ProductreceiptRequestMainBaseVO {
private String toAreaCodes;
@Schema(description = "单据号")
@OnlyOne
private String number;
@Schema(description = "业务类型")

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestMainCreateReqVO.java

@ -1,12 +1,19 @@
package com.win.module.wms.controller.productreceiptRequest.vo;
import com.win.framework.excel.core.annotations.SubObject;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailCreateReqVO;
import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
@Schema(description = "管理后台 - 制品收货申请主创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProductreceiptRequestMainCreateReqVO extends ProductreceiptRequestMainBaseVO {
@SubObject
@Schema(description = "子表数据")
private List<ProductreceiptRequestDetailCreateReqVO> subList;
}

127
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productreceiptRequest/vo/ProductreceiptRequestMainExcelVO.java

@ -1,5 +1,7 @@
package com.win.module.wms.controller.productreceiptRequest.vo;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.request.RequestStatusConverter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -33,21 +35,49 @@ public class ProductreceiptRequestMainExcelVO {
@ExcelProperty("班次")
private String shift;
@ExcelProperty("到仓库代码")
private String toWarehouseCode;
@ExcelProperty("单据号")
private String number;
@ExcelProperty("业务类型")
private String businessType;
@ExcelProperty("申请时间")
private LocalDateTime requestTime;
@ExcelProperty("截止时间")
private LocalDateTime dueTime;
@ExcelProperty(value = "状态", converter = RequestStatusConverter.class)
private String status;
@ExcelProperty(value = "到库位类型范围", converter = DictConvert.class)
@DictFormat("location_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@DictFormat(DictTypeConstants.LOCATION_TYPE)
private String toLocationTypes;
@ExcelProperty("到库区代码范围")
private String toAreaCodes;
@ExcelProperty("单据号")
private String number;
@ExcelProperty("到仓库代码")
private String toWarehouseCode;
@ExcelProperty("业务类型")
private String businessType;
@ExcelProperty(value = "自动提交", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoCommit;
@ExcelProperty(value = "自动通过", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoAgree;
@ExcelProperty(value = "自动执行", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoExecute;
@ExcelProperty(value = "直接生成记录", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String directCreateRecord;
@ExcelProperty("部门")
private String departmentCode;
@ExcelProperty("备注")
private String remark;
@ -58,35 +88,76 @@ public class ProductreceiptRequestMainExcelVO {
@ExcelProperty("创建者用户名")
private String creator;
@ExcelProperty("申请时间")
private LocalDateTime requestTime;
@ExcelProperty("截止时间")
private LocalDateTime dueTime;
@ExcelProperty("部门")
private String departmentCode;
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("request_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String status;
@ExcelProperty("最后更新时间")
private LocalDateTime updateTime;
@ExcelProperty("最后更新者用户名")
private String updater;
@ExcelProperty("自动提交")
private String autoCommit;
// 子表
@ExcelProperty("生产线代码")
private String productionLineCode;
@ExcelProperty("自动通过")
private String autoAgree;
@ExcelProperty("工位代码")
private String workStationCode;
@ExcelProperty("自动执行")
private String autoExecute;
@ExcelProperty("目标库位")
private String toLocationCode;
@ExcelProperty("直接生成记录")
private String directCreateRecord;
@ExcelProperty("工序代码")
private String processCode;
@ExcelProperty("包装号")
private String packingNumber;
@ExcelProperty("器具号")
private String containerNumber;
@ExcelProperty("批次")
private String batch;
@ExcelProperty("生产日期")
private String produceDate;
@ExcelProperty("过期日期")
private String expireDate;
@ExcelProperty(value = "库存状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.INVENTORY_STATUS)
private String inventoryStatus;
@ExcelProperty("订单号")
private String woNumber;
@ExcelProperty("订单行")
private String woLine;
@ExcelProperty("标包数量")
private String stdPackQty;
@ExcelProperty(value = "标包单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private String stdPackUnit;
@ExcelProperty("物品代码")
private String itemCode;
@ExcelProperty("物品名称")
private String itemName;
@ExcelProperty("物品描述1")
private String itemDesc1;
@ExcelProperty("物品描述2")
private String itemDesc2;
@ExcelProperty("项目代码")
private String projectCode;
@ExcelProperty("数量")
private String qty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private String uom;
}

34
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/backflushRequest/BackflushRequestDetailbConvert.java

@ -0,0 +1,34 @@
package com.win.module.wms.convert.backflushRequest;
import java.util.*;
import com.win.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.controller.backflushRequest.vo.*;
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO;
/**
* 制品收货申请子 Convert
*
* @author 超级管理员
*/
@Mapper
public interface BackflushRequestDetailbConvert {
BackflushRequestDetailbConvert INSTANCE = Mappers.getMapper(BackflushRequestDetailbConvert.class);
BackflushRequestDetailbDO convert(BackflushRequestDetailbCreateReqVO bean);
BackflushRequestDetailbDO convert(BackflushRequestDetailbUpdateReqVO bean);
BackflushRequestDetailbRespVO convert(BackflushRequestDetailbDO bean);
List<BackflushRequestDetailbRespVO> convertList(List<BackflushRequestDetailbDO> list);
PageResult<BackflushRequestDetailbRespVO> convertPage(PageResult<BackflushRequestDetailbDO> page);
List<BackflushRequestDetailbExcelVO> convertList02(List<BackflushRequestDetailbDO> list);
}

1
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productreceiptRequest/ProductreceiptRequestDetailConvert.java

@ -34,4 +34,5 @@ public interface ProductreceiptRequestDetailConvert {
List<ProductreceiptRequestDetailExcelVO> convertList02(List<ProductreceiptRequestDetailDO> list);
List<ProductreceiptRequestDetailDO> convertList03(List<ProductreceiptRequestDetailCreateReqVO> subList);
}

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productreceiptRequest/ProductreceiptRequestMainConvert.java

@ -7,7 +7,10 @@ import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainBaseVO;
import com.win.module.wms.controller.productreceiptRequest.vo.*;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO;
@ -35,4 +38,15 @@ public interface ProductreceiptRequestMainConvert {
List<ProductreceiptRequestMainExcelVO> convertList02(List<ProductreceiptRequestMainDO> list);
@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"),
})
ProductreceiptRequestMainExcelVO convert(ProductreceiptRequestMainDO mainDO, ProductreceiptRequestDetailDO detailDO);
ProductreceiptRequestImportErrorVO convert(ProductreceiptRequestMainCreateReqVO createReqVO, ProductreceiptRequestDetailDO detailDO);
}

89
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/backflushRequest/BackflushRequestDetailbDO.java

@ -0,0 +1,89 @@
package com.win.module.wms.dal.dataobject.backflushRequest;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.win.framework.mybatis.core.dataobject.BaseDO;
/**
* 制品收货申请子 DO
*
* @author 超级管理员
*/
@TableName("request_backflush_detailb")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BackflushRequestDetailbDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 工序代码
*/
private String processCode;
/**
* BOM版本
*/
private String bomVersion;
/**
* 物品代码
*/
private String itemCode;
/**
* 主表ID
*/
private Long masterId;
/**
* 单据号
*/
private String number;
/**
* 备注
*/
private String remark;
/**
* 物品名称
*/
private String itemName;
/**
* 物品描述1
*/
private String itemDesc1;
/**
* 物品描述2
*/
private String itemDesc2;
/**
* 项目代码
*/
private String projectCode;
/**
* 数量
*/
private BigDecimal qty;
/**
* 计量单位
*
* 枚举 {@link TODO uom 对应的类}
*/
private String uom;
/**
* 并发乐观锁
*/
private String concurrencyStamp;
/**
* 地点ID
*/
private String siteId;
}

8
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/productreceiptJob/ProductreceiptJobMainDO.java

@ -207,5 +207,13 @@ public class ProductreceiptJobMainDO extends BaseDO {
* 允许修改箱码
*/
private String allowModifyPackingNumber;
/**
* 入库库存状态范围
*/
private String inInventoryStatuses;
/**
* 出库库存状态范围
*/
private String outInventoryStatuses;
}

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/productreceiptRequest/ProductreceiptRequestDetailDO.java

@ -1,6 +1,7 @@
package com.win.module.wms.dal.dataobject.productreceiptRequest;
import com.sun.xml.bind.v2.TODO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
@ -149,4 +150,9 @@ public class ProductreceiptRequestDetailDO extends BaseDO {
*/
private String toOwnerCode;
/**
* 到货主代码
*/
private String bomVersion;
}

61
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/backflushRequest/BackflushRequestDetailbMapper.java

@ -0,0 +1,61 @@
package com.win.module.wms.dal.mysql.backflushRequest;
import java.util.*;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.mapper.BaseMapperX;
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO;
import org.apache.ibatis.annotations.Mapper;
import com.win.module.wms.controller.backflushRequest.vo.*;
/**
* 制品收货申请子 Mapper
*
* @author 超级管理员
*/
@Mapper
public interface BackflushRequestDetailbMapper extends BaseMapperX<BackflushRequestDetailbDO> {
default PageResult<BackflushRequestDetailbDO> selectPage(BackflushRequestDetailbPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BackflushRequestDetailbDO>()
.eqIfPresent(BackflushRequestDetailbDO::getMasterId, reqVO.getMasterId())
.eqIfPresent(BackflushRequestDetailbDO::getProcessCode, reqVO.getProcessCode())
.eqIfPresent(BackflushRequestDetailbDO::getBomVersion, reqVO.getBomVersion())
.eqIfPresent(BackflushRequestDetailbDO::getItemCode, reqVO.getItemCode())
.eqIfPresent(BackflushRequestDetailbDO::getNumber, reqVO.getNumber())
.eqIfPresent(BackflushRequestDetailbDO::getRemark, reqVO.getRemark())
.betweenIfPresent(BackflushRequestDetailbDO::getCreateTime, reqVO.getCreateTime())
.likeIfPresent(BackflushRequestDetailbDO::getItemName, reqVO.getItemName())
.eqIfPresent(BackflushRequestDetailbDO::getItemDesc1, reqVO.getItemDesc1())
.eqIfPresent(BackflushRequestDetailbDO::getItemDesc2, reqVO.getItemDesc2())
.eqIfPresent(BackflushRequestDetailbDO::getProjectCode, reqVO.getProjectCode())
.eqIfPresent(BackflushRequestDetailbDO::getQty, reqVO.getQty())
.eqIfPresent(BackflushRequestDetailbDO::getUom, reqVO.getUom())
.betweenIfPresent(BackflushRequestDetailbDO::getUpdateTime, reqVO.getUpdateTime())
.eqIfPresent(BackflushRequestDetailbDO::getUpdater, reqVO.getUpdater())
.eqIfPresent(BackflushRequestDetailbDO::getCreator, reqVO.getCreator())
.orderByDesc(BackflushRequestDetailbDO::getId));
}
default List<BackflushRequestDetailbDO> selectList(BackflushRequestDetailbExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<BackflushRequestDetailbDO>()
.eqIfPresent(BackflushRequestDetailbDO::getProcessCode, reqVO.getProcessCode())
.eqIfPresent(BackflushRequestDetailbDO::getBomVersion, reqVO.getBomVersion())
.eqIfPresent(BackflushRequestDetailbDO::getItemCode, reqVO.getItemCode())
.eqIfPresent(BackflushRequestDetailbDO::getNumber, reqVO.getNumber())
.eqIfPresent(BackflushRequestDetailbDO::getRemark, reqVO.getRemark())
.betweenIfPresent(BackflushRequestDetailbDO::getCreateTime, reqVO.getCreateTime())
.likeIfPresent(BackflushRequestDetailbDO::getItemName, reqVO.getItemName())
.eqIfPresent(BackflushRequestDetailbDO::getItemDesc1, reqVO.getItemDesc1())
.eqIfPresent(BackflushRequestDetailbDO::getItemDesc2, reqVO.getItemDesc2())
.eqIfPresent(BackflushRequestDetailbDO::getProjectCode, reqVO.getProjectCode())
.eqIfPresent(BackflushRequestDetailbDO::getQty, reqVO.getQty())
.eqIfPresent(BackflushRequestDetailbDO::getUom, reqVO.getUom())
.betweenIfPresent(BackflushRequestDetailbDO::getUpdateTime, reqVO.getUpdateTime())
.eqIfPresent(BackflushRequestDetailbDO::getUpdater, reqVO.getUpdater())
.eqIfPresent(BackflushRequestDetailbDO::getCreator, reqVO.getCreator())
.orderByDesc(BackflushRequestDetailbDO::getId));
}
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productreceiptJob/ProductreceiptJobMainMapper.java

@ -7,8 +7,10 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.productreceiptJob.vo.ProductreceiptJobMainExportReqVO;
import com.win.module.wms.controller.productreceiptJob.vo.ProductreceiptJobMainPageReqVO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO;
import com.win.module.wms.dal.dataobject.productreceiptJob.ProductreceiptJobMainDO;
import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobMainDO;
import com.win.module.wms.enums.order.OrderStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
@ -125,4 +127,9 @@ public interface ProductreceiptJobMainMapper extends BaseMapperX<ProductreceiptJ
}
default Long selectByRequestNumber(String requestNumber) {
return selectCount(new LambdaQueryWrapperX<ProductreceiptJobMainDO>()
.eq(ProductreceiptJobMainDO::getRequestNumber, requestNumber)
.ne(ProductreceiptJobMainDO::getStatus, OrderStatusEnum.CLOSED.getCode()));
}
}

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productreceiptRequest/ProductreceiptRequestDetailMapper.java

@ -7,6 +7,7 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestDetailExportReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestDetailPageReqVO;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import org.apache.ibatis.annotations.Mapper;
@ -22,6 +23,7 @@ public interface ProductreceiptRequestDetailMapper extends BaseMapperX<Productre
default PageResult<ProductreceiptRequestDetailDO> selectPage(ProductreceiptRequestDetailPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProductreceiptRequestDetailDO>()
.eqIfPresent(ProductreceiptRequestDetailDO::getMasterId, reqVO.getMasterId())
.eqIfPresent(ProductreceiptRequestDetailDO::getProductionLineCode, reqVO.getProductionLineCode())
.eqIfPresent(ProductreceiptRequestDetailDO::getWorkStationCode, reqVO.getWorkStationCode())
.eqIfPresent(ProductreceiptRequestDetailDO::getProcessCode, reqVO.getProcessCode())
@ -90,4 +92,8 @@ public interface ProductreceiptRequestDetailMapper extends BaseMapperX<Productre
.orderByDesc(ProductreceiptRequestDetailDO::getId));
}
default List<ProductreceiptRequestDetailDO> selectList(Long masterId) {
return selectList(new LambdaQueryWrapperX<ProductreceiptRequestDetailDO>()
.eq(ProductreceiptRequestDetailDO::getMasterId, masterId));
}
}

5
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productreceiptRequest/ProductreceiptRequestMainMapper.java

@ -7,6 +7,7 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainExportReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainPageReqVO;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO;
import org.apache.ibatis.annotations.Mapper;
@ -78,4 +79,8 @@ public interface ProductreceiptRequestMainMapper extends BaseMapperX<Productrece
.orderByDesc(ProductreceiptRequestMainDO::getId));
}
default List<ProductreceiptRequestMainDO> selectSeniorList(CustomConditions conditions) {
return selectList(QueryWrapperUtils.structure(conditions));
}
}

77
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/backflushRequest/BackflushRequestDetailbService.java

@ -0,0 +1,77 @@
package com.win.module.wms.service.backflushRequest;
import java.util.*;
import javax.validation.*;
import com.win.module.wms.controller.backflushRequest.vo.*;
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO;
import com.win.framework.common.pojo.PageResult;
/**
* 制品收货申请子 Service 接口
*
* @author 超级管理员
*/
public interface BackflushRequestDetailbService {
/**
* 创建制品收货申请子
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createBackflushRequestDetailb(@Valid BackflushRequestDetailbCreateReqVO createReqVO);
/**
* 更新制品收货申请子
*
* @param updateReqVO 更新信息
*/
Integer updateBackflushRequestDetailb(@Valid BackflushRequestDetailbUpdateReqVO updateReqVO);
/**
* 删除制品收货申请子
*
* @param id 编号
*/
Integer deleteBackflushRequestDetailb(Long id);
/**
* 删除制品收货申请子 根据 masterId
*
* @param id 编号
*/
Integer deleteBackflushRequestDetailbByMasterId(Long id);
/**
* 获得制品收货申请子
*
* @param id 编号
* @return 制品收货申请子
*/
BackflushRequestDetailbDO getBackflushRequestDetailb(Long id);
/**
* 获得制品收货申请子列表
*
* @param ids 编号
* @return 制品收货申请子列表
*/
List<BackflushRequestDetailbDO> getBackflushRequestDetailbList(Collection<Long> ids);
/**
* 获得制品收货申请子分页
*
* @param pageReqVO 分页查询
* @return 制品收货申请子分页
*/
PageResult<BackflushRequestDetailbDO> getBackflushRequestDetailbPage(BackflushRequestDetailbPageReqVO pageReqVO);
/**
* 获得制品收货申请子列表, 用于 Excel 导出
*
* @param exportReqVO 查询条件
* @return 制品收货申请子列表
*/
List<BackflushRequestDetailbDO> getBackflushRequestDetailbList(BackflushRequestDetailbExportReqVO exportReqVO);
}

91
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/backflushRequest/BackflushRequestDetailbServiceImpl.java

@ -0,0 +1,91 @@
package com.win.module.wms.service.backflushRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.mapstruct.ap.internal.model.assignment.UpdateWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.win.module.wms.controller.backflushRequest.vo.*;
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.convert.backflushRequest.BackflushRequestDetailbConvert;
import com.win.module.wms.dal.mysql.backflushRequest.BackflushRequestDetailbMapper;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
/**
* 制品收货申请子 Service 实现类
*
* @author 超级管理员
*/
@Service
@Validated
public class BackflushRequestDetailbServiceImpl implements BackflushRequestDetailbService {
@Resource
private BackflushRequestDetailbMapper backflushRequestDetailbMapper;
@Override
public Long createBackflushRequestDetailb(BackflushRequestDetailbCreateReqVO createReqVO) {
// 插入
BackflushRequestDetailbDO backflushRequestDetailb = BackflushRequestDetailbConvert.INSTANCE.convert(createReqVO);
backflushRequestDetailbMapper.insert(backflushRequestDetailb);
// 返回
return backflushRequestDetailb.getId();
}
@Override
public Integer updateBackflushRequestDetailb(BackflushRequestDetailbUpdateReqVO updateReqVO) {
// 校验存在
validateBackflushRequestDetailbExists(updateReqVO.getId());
// 更新
BackflushRequestDetailbDO updateObj = BackflushRequestDetailbConvert.INSTANCE.convert(updateReqVO);
return backflushRequestDetailbMapper.updateById(updateObj);
}
@Override
public Integer deleteBackflushRequestDetailb(Long id) {
// 校验存在
validateBackflushRequestDetailbExists(id);
// 删除
return backflushRequestDetailbMapper.deleteById(id);
}
@Override
public Integer deleteBackflushRequestDetailbByMasterId(Long masterId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("master_id",masterId.toString());
return backflushRequestDetailbMapper.delete(queryWrapper);
}
private void validateBackflushRequestDetailbExists(Long id) {
if (backflushRequestDetailbMapper.selectById(id) == null) {
throw exception(BACKFLUSH_REQUEST_DETAILB_NOT_EXISTS);
}
}
@Override
public BackflushRequestDetailbDO getBackflushRequestDetailb(Long id) {
return backflushRequestDetailbMapper.selectById(id);
}
@Override
public List<BackflushRequestDetailbDO> getBackflushRequestDetailbList(Collection<Long> ids) {
return backflushRequestDetailbMapper.selectBatchIds(ids);
}
@Override
public PageResult<BackflushRequestDetailbDO> getBackflushRequestDetailbPage(BackflushRequestDetailbPageReqVO pageReqVO) {
return backflushRequestDetailbMapper.selectPage(pageReqVO);
}
@Override
public List<BackflushRequestDetailbDO> getBackflushRequestDetailbList(BackflushRequestDetailbExportReqVO exportReqVO) {
return backflushRequestDetailbMapper.selectList(exportReqVO);
}
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/bom/BomService.java

@ -88,4 +88,6 @@ public interface BomService {
* @return
*/
public List<BomDO> bomItemCodeAndVersionExist(String productItemCode, String version);
}

59
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/issueRequest/IssueRequestMainServiceImpl.java

@ -14,6 +14,7 @@ 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.api.user.AdminUserApi;
import com.win.module.system.enums.serialNumber.RuleCodeEnum;
import com.win.module.wms.controller.expectin.vo.ExpectinCreateReqVO;
import com.win.module.wms.controller.expectout.vo.ExpectoutCreateReqVO;
@ -27,6 +28,7 @@ import com.win.module.wms.convert.purchasereceiptRecord.PurchasereceiptRecordDet
import com.win.module.wms.convert.purchasereceiptRecord.PurchasereceiptRecordMainConvert;
import com.win.module.wms.dal.dataobject.balance.BalanceDO;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
import com.win.module.wms.dal.dataobject.countRequest.CountRequestDetailDO;
import com.win.module.wms.dal.dataobject.expectout.ExpectoutDO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobDetailDO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO;
@ -77,11 +79,10 @@ import javax.validation.Validator;
import javax.xml.crypto.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.*;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
/**
@ -93,6 +94,8 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*;
@Validated
public class IssueRequestMainServiceImpl implements IssueRequestMainService {
@Resource
private AdminUserApi userApi;
@Resource
private ItempackagingService itempackagingService;
@Resource
@ -143,8 +146,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
@Override
@Transactional
public Long createIssueRequestMain(IssueRequestMainCreateReqVO createReqVO) {
RequestsettingDO requestsettingDO = new RequestsettingDO();
IssueRequestMainDO issueRequestMainDO = validatorToCreate(createReqVO,requestsettingDO);
IssueRequestMainDO issueRequestMainDO = validatorToCreate(createReqVO);
//调用自动执行方法
if(RequestStatusEnum.HANDLING.getCode().equals(issueRequestMainDO.getStatus())) {
this.generateJob(issueRequestMainDO, issueRequestDetailMapper.selectList(issueRequestMainDO.getId()));
@ -396,10 +398,14 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
return message.toString();
}
//新增方法(主和子)
private IssueRequestMainDO validatorToCreate(IssueRequestMainCreateReqVO createReqVO,RequestsettingDO requestsettingDO) {
/**
* 创建 主子 数据
* @param createReqVO
* @return
*/
private IssueRequestMainDO validatorToCreate(IssueRequestMainCreateReqVO createReqVO ) {
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest");
IssueRequestMainDO issueRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO);
IssueRequestMainDO issueRequestMainDO = validateMainMethod(createReqVO);
//子表校验
List<IssueRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<IssueRequestDetailDO> subDOList = IssueRequestDetailConvert.INSTANCE.convertList03(subList);
@ -408,6 +414,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
}
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode());
issueRequestMainDO.setNumber(number);
issueRequestMainDO.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString());
issueRequestMainMapper.insert(issueRequestMainDO);
for (IssueRequestDetailDO issueRequestDetailDO : subDOList) {
issueRequestDetailDO.setMasterId(issueRequestMainDO.getId());
@ -420,31 +427,24 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
//修改方法(主)
private IssueRequestMainDO validatorToUpdate(IssueRequestMainUpdateReqVO updateReqVO,RequestsettingDO requestsettingDO) {
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest");
IssueRequestMainDO issueRequestMainDO = validateMainMethod(updateReqVO,businesstypeDO,requestsettingDO);
//子表校验
// List<IssueRequestDetailUpdateReqVO> subList = updateReqVO.getSubList();
// List<IssueRequestDetailDO> subDOList = IssueRequestDetailConvert.INSTANCE.convertList05(subList);
// for (IssueRequestDetailDO issueRequestDetailDO : subDOList) {
// validateDetailMethod(issueRequestDetailDO,businesstypeDO,issueRequestMainDO);
// }
IssueRequestMainDO issueRequestMainDO = validateMainMethod(updateReqVO);
issueRequestMainDO.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString());
issueRequestMainMapper.updateById(issueRequestMainDO);
// issueRequestDetailMapper.updateBatch(subDOList);
return issueRequestMainDO;
}
//校验主表公共方法(适用于新增/修改)
private IssueRequestMainDO validateMainMethod(IssueRequestMainBaseVO baseVO, BusinesstypeDO businesstypeDO,RequestsettingDO requestsettingDO){
private IssueRequestMainDO validateMainMethod(IssueRequestMainBaseVO baseVO){
IssueRequestMainDO issueRequestMainDO = IssueRequestMainConvert.INSTANCE.convert(baseVO);
this.validatorWorkshop(issueRequestMainDO.getWorkshopCode());
issueRequestMainDO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
issueRequestMainDO.setRequestTime(LocalDateTime.now());
requestsettingDO = requestsettingService.selectRequestsettingExist("IssueRequest");
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("IssueRequest");
issueRequestMainDO.setAutoAgree(requestsettingDO.getAutoAgree());
issueRequestMainDO.setAutoCommit(requestsettingDO.getAutoCommit());
issueRequestMainDO.setAutoExecute(requestsettingDO.getAutoExecute());
issueRequestMainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest");
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueRequest");
issueRequestMainDO.setBusinessType(businesstypeDO.getCode());
issueRequestMainDO.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
issueRequestMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes());
@ -617,9 +617,9 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
/**
* 创建任务 OR 创建记录
* @param mainDO
* @param detailDO
* @param detailDOList
*/
private void generateJob (IssueRequestMainDO mainDO, List<IssueRequestDetailDO> detailDO) {
private void generateJob (IssueRequestMainDO mainDO, List<IssueRequestDetailDO> detailDOList) {
//跳过任务直接生成记录
if("TRUE".equals(mainDO.getDirectCreateRecord())) {
// TODO: 发料申请 跳过任务直接生成记录 未做!!
@ -640,6 +640,18 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
// }
// return;
}
// 根据 子表 toLocationCode 拆分任务
Map<String, List<IssueRequestDetailDO>> listMap = new HashMap<>();
for(IssueRequestDetailDO detailDO : detailDOList) {
List<IssueRequestDetailDO> list = listMap.get(detailDO.getToLocationCode());
if(list == null) {
list = new ArrayList<>();
}
//向list增加数据
list.add(detailDO);
listMap.put(detailDO.getToLocationCode(), list);
}
for(String mapKey : listMap.keySet()) {
// 任务主表信息
IssueJobMainDO issueJobMainDO = new IssueJobMainDO();
issueJobMainDO.setRequestNumber(mainDO.getNumber());
@ -688,7 +700,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
List<ExpectinCreateReqVO> expectinCreateReqVOList = new ArrayList<>();
List<ExpectoutCreateReqVO> expectoutCreateReqVOList = new ArrayList<>();
// 根据发料申请子表数据进行分析
detailDO.forEach(item -> {
listMap.get(mapKey).forEach(item -> {
// 根据批次策略/下架策略 返回 库存余额DO
List<BalanceDO> balanceDOListJob = jobUtils.getBalanceByBatchOffShelf(item.getItemCode(),item.getInventoryStatus(),item.getProjectCode(),item.getQty(),mainDO.getFromLocationTypes());
// 根据 查询出所需数据 解析成 任务子表数据
@ -747,6 +759,7 @@ public class IssueRequestMainServiceImpl implements IssueRequestMainService {
expectoutService.createExpectout(expectoutCreateReqVOList);
trendsApi.createTrends(issueJobMainDO.getId(), "issueJob", "发料申请生成发料任务", TrendsTypeEnum.CREATE);
}
}
/**
* PDA 获取库存推荐

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/packageMassage/PackageServiceImpl.java

@ -164,7 +164,7 @@ public class PackageServiceImpl implements PackageService {
}
packageMapper.insert(packageDo);
// 更新 生产退料申请 子表数据 包装号字段
updateProductionreturnPackingNumber(packageDo.getId(),packageDo.getNumber());
// updateProductionreturnPackingNumber(packageDo.getId(),packageDo.getNumber());
// 创建 标签数据
generateLabel(packageDo);
// 返回
@ -175,12 +175,12 @@ public class PackageServiceImpl implements PackageService {
* 更新 生产退料申请 子表数据 包装号字段
* @param packingNumber
*/
private void updateProductionreturnPackingNumber(Long id, String packingNumber) {
ProductionreturnRequestDetailDO updateObj = new ProductionreturnRequestDetailDO();
updateObj.setId(id);
updateObj.setPackingNumber(packingNumber);
productionreturnRequestDetailMapper.updateById(updateObj);
}
// private void updateProductionreturnPackingNumber(Long id, String packingNumber) {
// ProductionreturnRequestDetailDO updateObj = new ProductionreturnRequestDetailDO();
// updateObj.setId(id);
// updateObj.setPackingNumber(packingNumber);
// productionreturnRequestDetailMapper.updateById(updateObj);
// }
/**
* 根据 包装 创建 标签

33
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/preparetoissue/PreparetoissueMainServiceImpl.java

@ -37,6 +37,7 @@ import com.win.module.wms.service.shift.ShiftService;
import com.win.module.wms.service.team.TeamService;
import com.win.module.wms.service.workshop.WorkshopService;
import com.win.module.wms.service.workstation.WorkstationService;
import com.win.module.wms.util.JobUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@ -87,6 +88,8 @@ public class PreparetoissueMainServiceImpl implements PreparetoissueMainService
private TrendsApi trendsApi;
@Resource
private SerialNumberApi serialNumberApi;
@Resource
private JobUtils jobUtils;
@Override
@Transactional
@ -359,8 +362,7 @@ public class PreparetoissueMainServiceImpl implements PreparetoissueMainService
public List<PreparetoissueDetailCreateReqVO> BomDisassemble(ProductionMainDO mainDO, List<ProductionDetailDO> detailDOList ) {
List<PreparetoissueDetailCreateReqVO> subList = new ArrayList<>();
detailDOList.forEach(item -> {
List<Map<String,Object>> list = new ArrayList<>();
this.BomRecursion(item.getItemCode(), item.getBomVersion(), list);
List<Map<String,Object>> list = jobUtils.bomDismantleList(item.getItemCode(), item.getBomVersion());
list.forEach(itemBom -> {
PreparetoissueDetailCreateReqVO preparetoissueDetailCreateReqVO = new PreparetoissueDetailCreateReqVO();
preparetoissueDetailCreateReqVO.setAvailable(item.getAvailable());
@ -374,31 +376,4 @@ public class PreparetoissueMainServiceImpl implements PreparetoissueMainService
});
return subList;
}
/**
* bom解析递归
* @param itemCode
* @param list
*/
private void BomRecursion (String itemCode,String bomVersion ,List<Map<String,Object>> list) {
BomExportReqVO bomExportReqVO = new BomExportReqVO();
bomExportReqVO.setProductItemCode(itemCode);
bomExportReqVO.setVersion(bomVersion);
bomExportReqVO.setAvailable("TRUE");
List<BomDO> bomDOList = bomService.getBomList(bomExportReqVO);
bomDOList.forEach(item -> {
// 判断物品是否是虚零件
if (itembasicService.selectItembasic(item.getComponentItemCode()).getIsPhantom().equals("TRUE")) {
this.BomRecursion(item.getComponentItemCode(), item.getVersion(), list);
} else {
Map<String,Object> map = new HashMap<>();
map.put("itemCode",item.getComponentItemCode());
map.put("uom",item.getComponentUom());
map.put("qty",item.getComponentQty());
list.add(map);
}
});
}
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnJob/ProductionreturnJobMainServiceImpl.java

@ -254,12 +254,15 @@ public class ProductionreturnJobMainServiceImpl implements ProductionreturnJobMa
productionreturnRecordMainDO.setInterfaceType(recordsettingDO.getInterfaceType());
//增加业务类型
BusinesstypeDO businesstypeDO ;
String inventoryStatus ;
// 判断是合格还是隔离
// 合格
if (productionreturnJobMainDO.getBusinessType().equals("ReturnToStoreRequest")) {
if (productionreturnJobMainDO.getBusinessType().equals("ReturnToStore")) {
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ReturnToStoreRecord");
inventoryStatus = "OK";
} else { // 隔离
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ReturnToHoldRecord");
inventoryStatus = "HOLD";
}
productionreturnRecordMainDO.setInTransactionType(businesstypeDO.getInTransactionType());
productionreturnRecordMainDO.setOutTransactionType(businesstypeDO.getOutTransactionType());
@ -292,7 +295,7 @@ public class ProductionreturnJobMainServiceImpl implements ProductionreturnJobMa
productionreturnRecordDetailDO.setToBatch(DetailUpdateItem.getToBatch());
productionreturnRecordDetailDO.setFromLocationCode(subListItem.getFromLocationCode());
productionreturnRecordDetailDO.setToLocationCode(DetailUpdateItem.getToLocationCode());
productionreturnRecordDetailDO.setInventoryStatus(DetailUpdateItem.getToInventoryStatus());
productionreturnRecordDetailDO.setInventoryStatus(inventoryStatus);
productionreturnRecordDetailDO.setFromContainerNumber(subListItem.getContainerNumber());
productionreturnRecordDetailDO.setToContainerNumber(DetailUpdateItem.getToContainerNumber());
productionreturnRecordDetailDO.setQty(DetailUpdateItem.getHandleQty());

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestDetailService.java

@ -80,4 +80,6 @@ public interface ProductionreturnRequestDetailService {
PageResult<ProductionreturnRequestDetailDO> getProductionreturnRequestDetailSenior(CustomConditions conditions);
List<ProductionreturnRequestDetailDO> selectList(Long id);
void updateProductreceiptRequestDetailPackingNumber(Long id, String number);
}

9
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestDetailServiceImpl.java

@ -20,6 +20,7 @@ import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO;
import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO;
import com.win.module.wms.dal.dataobject.productionreturnRequest.ProductionreturnRequestDetailDO;
import com.win.module.wms.dal.dataobject.productionreturnRequest.ProductionreturnRequestMainDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.module.wms.dal.mysql.productionreturnRequest.ProductionreturnRequestDetailMapper;
@ -172,6 +173,14 @@ public class ProductionreturnRequestDetailServiceImpl implements Productionretur
return productionreturnRequestDetailMapper.selectList(masterId);
}
@Override
public void updateProductreceiptRequestDetailPackingNumber(Long id, String number) {
ProductionreturnRequestDetailDO updateObj = new ProductionreturnRequestDetailDO();
updateObj.setId(id);
updateObj.setPackingNumber(number);
productionreturnRequestDetailMapper.updateById(updateObj);
}
//校验子表公共方法(适用于新增/修改)
private void validatorDetailMethod(ProductionreturnRequestDetailDO detailDo, ProductionreturnRequestMainDO mainDo) {
ItembasicDO itembasicDO = validatorItembasic(detailDo.getItemCode());

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java

@ -156,7 +156,7 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR
}
trendsApi.createTrends(productionreturnRequestMainDO.getId(), "ProductionreturnRequest", "增加了生产退料申请", TrendsTypeEnum.CREATE);
// 返回
return createReqVO.getId();
return productionreturnRequestMainDO.getId();
}
@Override
@ -690,7 +690,7 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR
productionreturnRecordDetailDO.setToAreaCode(locationDOTo.getAreaCode());
// 判断合格 不合格
if (!mainDO.getBusinessType().equals("ReturnToStore")) {
productionreturnRecordDetailDO.setInventoryStatus("NOK");
productionreturnRecordDetailDO.setInventoryStatus("HOLD");
}
productionreturnRecordDetailDO.setMasterId(productionreturnRecordMainDO.getId());
productionreturnRecordDetailDO.setNumber(number);
@ -801,7 +801,7 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR
productionreturnJobDetailDO.setToLocationCode(locationDO.getCode());
// 判断合格 不合格
if (!mainDO.getBusinessType().equals("ReturnToStore")) {
productionreturnJobDetailDO.setInventoryStatus("NOK");
productionreturnJobDetailDO.setInventoryStatus("OK");
}
productionreturnJobDetailDOList.add(productionreturnJobDetailDO);
//预计入

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestDetailService.java

@ -80,4 +80,8 @@ public interface ProductreceiptRequestDetailService {
* @return 分页列表
*/
PageResult<ProductreceiptRequestDetailDO> getProductreceiptRequestDetailSenior(CustomConditions conditions);
List<ProductreceiptRequestDetailDO> selectList(Long id);
void updateProductreceiptRequestDetailPackingNumber(Long id, String number);
}

85
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestDetailServiceImpl.java

@ -1,5 +1,6 @@
package com.win.module.wms.service.productreceiptRequest;
import cn.hutool.core.exceptions.UtilException;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestDetailCreateReqVO;
@ -7,8 +8,20 @@ import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequ
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestDetailPageReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestDetailUpdateReqVO;
import com.win.module.wms.convert.productreceiptRequest.ProductreceiptRequestDetailConvert;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.itempackaging.ItempackagingDO;
import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.module.wms.dal.mysql.productreceiptRequest.ProductreceiptRequestDetailMapper;
import com.win.module.wms.service.bom.BomService;
import com.win.module.wms.service.itembasic.ItembasicService;
import com.win.module.wms.service.itempackaging.ItempackagingService;
import com.win.module.wms.service.productionline.ProductionlineService;
import com.win.module.wms.service.productionlineitem.ProductionlineitemService;
import com.win.module.wms.service.workstation.WorkstationService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -28,6 +41,20 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTRECEIPT_REQUEST
@Validated
public class ProductreceiptRequestDetailServiceImpl implements ProductreceiptRequestDetailService {
@Resource
private BomService bomService;
@Resource
private WorkstationService workstationService;
@Resource
private ItempackagingService itempackagingService;
@Resource
private ItembasicService itembasicService;
@Resource
private ProductionlineitemService productionlineitemService;
@Resource
private ProductionlineService productionlineService;
@Resource
private ProductreceiptRequestMainService productreceiptRequestMainService;
@Resource
private ProductreceiptRequestDetailMapper productreceiptRequestDetailMapper;
@ -35,7 +62,12 @@ public class ProductreceiptRequestDetailServiceImpl implements ProductreceiptReq
public Long createProductreceiptRequestDetail(ProductreceiptRequestDetailCreateReqVO createReqVO) {
// 插入
ProductreceiptRequestDetailDO productreceiptRequestDetail = ProductreceiptRequestDetailConvert.INSTANCE.convert(createReqVO);
// 主表信息
ProductreceiptRequestMainDO productreceiptRequestMainDO = productreceiptRequestMainService.getProductreceiptRequestMain(productreceiptRequestDetail.getMasterId());
validateDetailMethod(productreceiptRequestMainDO, productreceiptRequestDetail);
productreceiptRequestDetailMapper.insert(productreceiptRequestDetail);
// 创建 bom版本相关信息
productreceiptRequestMainService.generateBackflushRequest(productreceiptRequestDetail);
// 返回
return productreceiptRequestDetail.getId();
}
@ -46,7 +78,47 @@ public class ProductreceiptRequestDetailServiceImpl implements ProductreceiptReq
validateProductreceiptRequestDetailExists(updateReqVO.getId());
// 更新
ProductreceiptRequestDetailDO updateObj = ProductreceiptRequestDetailConvert.INSTANCE.convert(updateReqVO);
// 主表信息
ProductreceiptRequestMainDO productreceiptRequestMainDO = productreceiptRequestMainService.getProductreceiptRequestMain(updateObj.getMasterId());
validateDetailMethod(productreceiptRequestMainDO, updateObj);
productreceiptRequestDetailMapper.updateById(updateObj);
// 创建 bom版本相关信息
productreceiptRequestMainService.generateBackflushRequest(updateObj);
}
/**
* 校验 子表 数据
* @param detailDo
*/
private void validateDetailMethod(ProductreceiptRequestMainDO mainDO, ProductreceiptRequestDetailDO detailDo) {
// 校验 生产线
ProductionlineDO productionlineDO = productionlineService.productionLineCodeExist(detailDo.getProductionLineCode());
detailDo.setToLocationCode(productionlineDO.getRawLocationCode());
// 校验生产线和物品关系
productionlineitemService.productionLineCodeAndpItemCodeExist(detailDo.getProductionLineCode(), detailDo.getItemCode());
// 校验 物品
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode());
// 赋值物品相关信息
detailDo.setItemName(itembasicDO.getName());
detailDo.setItemDesc1(itembasicDO.getDesc1());
detailDo.setItemDesc2(itembasicDO.getDesc2());
detailDo.setProjectCode(itembasicDO.getProject());
if (!itembasicDO.getUom().equals(detailDo.getUom())) {
throw new UtilException("计量单位【" + detailDo.getUom() + "】错误,应该是" + itembasicDO.getUom());
}
// 校验 物品包装
ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode());
detailDo.setStdPackQty(itempackagingDO.getStdPackQty());
detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit());
// 校验 工位
if (detailDo.getWorkStationCode() != null && !detailDo.getWorkStationCode().equals("")) {
WorkstationDO workstationDO = workstationService.selectWorkstationExist(detailDo.getWorkStationCode(), mainDO.getWorkshopCode(), detailDo.getProductionLineCode());
detailDo.setToLocationCode(workstationDO.getFgLocationCode());
}
// 校验 物品和bom关系
bomService.bomItemCodeAndVersionExist(detailDo.getItemCode(),detailDo.getBomVersion());
// 校验 成品库与物品关系 TODO:需要上架策略完善后 打开注释
// jobUtils.getItemCodeLocationCode(detailDo.getItemCode(), detailDo.getToLocationCode());
}
@Override
@ -87,4 +159,17 @@ public class ProductreceiptRequestDetailServiceImpl implements ProductreceiptReq
public PageResult<ProductreceiptRequestDetailDO> getProductreceiptRequestDetailSenior(CustomConditions conditions) {
return productreceiptRequestDetailMapper.selectSenior(conditions);
}
@Override
public List<ProductreceiptRequestDetailDO> selectList(Long masterId) {
return productreceiptRequestDetailMapper.selectList(masterId);
}
@Override
public void updateProductreceiptRequestDetailPackingNumber(Long id, String packingNumber) {
ProductreceiptRequestDetailDO updateObj = new ProductreceiptRequestDetailDO();
updateObj.setId(id);
updateObj.setPackingNumber(packingNumber);
productreceiptRequestDetailMapper.updateById(updateObj);
}
}

23
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestMainService.java

@ -2,10 +2,8 @@ package com.win.module.wms.service.productreceiptRequest;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainCreateReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainExportReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainPageReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainUpdateReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.*;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO;
import javax.validation.Valid;
@ -81,4 +79,21 @@ public interface ProductreceiptRequestMainService {
* @return 分页列表
*/
PageResult<ProductreceiptRequestMainDO> getProductreceiptRequestMainSenior(CustomConditions conditions);
List<ProductreceiptRequestMainDO> getProductreceiptRequestMainList(CustomConditions conditions);
List<ProductreceiptRequestImportErrorVO> importProductreceiptRequestList(List<ProductreceiptRequestMainCreateReqVO> createReqVOList, Integer mode, Boolean updatePart);
void generateBackflushRequest(ProductreceiptRequestDetailDO detailbDO);
Integer closeProductreceiptRequestMain(Long id);
Integer reAddProductreceiptRequestMain(Long id);
Integer submitProductreceiptRequestMain(Long id);
Integer refusedProductreceiptRequestMain(Long id);
Integer agreeProductreceiptRequestMain(Long id);
Integer handleProductreceiptRequestMain(Long id);
}

688
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productreceiptRequest/ProductreceiptRequestMainServiceImpl.java

@ -1,24 +1,85 @@
package com.win.module.wms.service.productreceiptRequest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.exceptions.UtilException;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.win.framework.common.exception.ServiceException;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainCreateReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainExportReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainPageReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainUpdateReqVO;
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.api.user.AdminUserApi;
import com.win.module.system.enums.serialNumber.RuleCodeEnum;
import com.win.module.wms.controller.expectin.vo.ExpectinCreateReqVO;
import com.win.module.wms.controller.productreceiptRequest.vo.*;
import com.win.module.wms.controller.rule.vo.RuleRespVO;
import com.win.module.wms.convert.productreceiptRequest.ProductreceiptRequestDetailConvert;
import com.win.module.wms.convert.productreceiptRequest.ProductreceiptRequestMainConvert;
import com.win.module.wms.dal.dataobject.accountcalendar.AccountcalendarDO;
import com.win.module.wms.dal.dataobject.backflushRequest.BackflushRequestDetailbDO;
import com.win.module.wms.dal.dataobject.bom.BomDO;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobDetailDO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.itempackaging.ItempackagingDO;
import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO;
import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO;
import com.win.module.wms.dal.dataobject.productreceiptJob.ProductreceiptJobDetailDO;
import com.win.module.wms.dal.dataobject.productreceiptJob.ProductreceiptJobMainDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestDetailDO;
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO;
import com.win.module.wms.dal.dataobject.purchasereceiptJob.PurchasereceiptJobMainDO;
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO;
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO;
import com.win.module.wms.dal.mysql.backflushRequest.BackflushRequestDetailbMapper;
import com.win.module.wms.dal.mysql.productreceiptJob.ProductreceiptJobDetailMapper;
import com.win.module.wms.dal.mysql.productreceiptJob.ProductreceiptJobMainMapper;
import com.win.module.wms.dal.mysql.productreceiptRequest.ProductreceiptRequestDetailMapper;
import com.win.module.wms.dal.mysql.productreceiptRequest.ProductreceiptRequestMainMapper;
import com.win.module.wms.dal.mysql.purchasereceiptJob.PurchasereceiptJobMainMapper;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.job.JobStatusEnum;
import com.win.module.wms.enums.request.RequestStatusEnum;
import com.win.module.wms.enums.request.RequestStatusState;
import com.win.module.wms.service.backflushRequest.BackflushRequestDetailbService;
import com.win.module.wms.service.bom.BomService;
import com.win.module.wms.service.expectin.ExpectinService;
import com.win.module.wms.service.itembasic.ItembasicService;
import com.win.module.wms.service.itempackaging.ItempackagingService;
import com.win.module.wms.service.jobsetting.JobsettingService;
import com.win.module.wms.service.productionline.ProductionlineService;
import com.win.module.wms.service.productionlineitem.ProductionlineitemService;
import com.win.module.wms.service.requestsetting.RequestsettingService;
import com.win.module.wms.service.shift.ShiftService;
import com.win.module.wms.service.team.TeamService;
import com.win.module.wms.service.workshop.WorkshopService;
import com.win.module.wms.service.workstation.WorkstationService;
import com.win.module.wms.util.JobUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.validation.Validator;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTRECEIPT_REQUEST_MAIN_NOT_EXISTS;
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
/**
* 制品收货申请主 Service 实现类
@ -29,25 +90,189 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTRECEIPT_REQUEST
@Validated
public class ProductreceiptRequestMainServiceImpl implements ProductreceiptRequestMainService {
@Resource
private ProductreceiptJobDetailMapper productreceiptJobDetailMapper;
@Resource
private ExpectinService expectinService;
@Resource
private JobsettingService jobsettingService;
@Resource
private ProductreceiptJobMainMapper productreceiptJobMainMapper;
@Resource
private BackflushRequestDetailbService backflushRequestDetailbSerivce;
@Resource
private AdminUserApi userApi;
@Resource
private BackflushRequestDetailbMapper backflushRequestDetailbMapper;
@Resource
private BomService bomService;
@Resource
private ProductreceiptRequestDetailMapper productreceiptRequestDetailMapper;
@Resource
private WorkstationService workstationService;
@Resource
private ItempackagingService itempackagingService;
@Resource
private ProductionlineitemService productionlineitemService;
@Resource
private ProductionlineService productionlineService;
@Resource
private DictDataApi dictDataApi;
@Resource
private ItembasicService itembasicService;
@Resource
private Validator validator;
@Resource
private ShiftService shiftService;
@Resource
private TeamService teamService;
@Resource
private RequestsettingService requestsettingService;
@Resource
private WorkshopService workshopService;
@Resource
private TrendsApi trendsApi;
@Resource
private SerialNumberApi serialNumberApi;
@Resource
private JobUtils jobUtils;
@Resource
private ProductreceiptRequestMainMapper productreceiptRequestMainMapper;
@Override
@Transactional
public Long createProductreceiptRequestMain(ProductreceiptRequestMainCreateReqVO createReqVO) {
// 插入
ProductreceiptRequestMainDO productreceiptRequestMain = ProductreceiptRequestMainConvert.INSTANCE.convert(createReqVO);
productreceiptRequestMainMapper.insert(productreceiptRequestMain);
// 返回
return productreceiptRequestMain.getId();
ProductreceiptRequestMainDO productreceiptRequestMainDO = validatorToCreate(createReqVO);
//调用自动执行方法
if(RequestStatusEnum.HANDLING.getCode().equals(productreceiptRequestMainDO.getStatus())) {
this.generateJob(productreceiptRequestMainDO, productreceiptRequestDetailMapper.selectList(productreceiptRequestMainDO.getId()));
}
trendsApi.createTrends(productreceiptRequestMainDO.getId(), "ProductreceiptRequest", "增加了制品收货申请", TrendsTypeEnum.CREATE);
return productreceiptRequestMainDO.getId();
}
@Override
@Transactional
public void updateProductreceiptRequestMain(ProductreceiptRequestMainUpdateReqVO updateReqVO) {
// 校验存在
validateProductreceiptRequestMainExists(updateReqVO.getId());
// 更新
ProductreceiptRequestMainDO updateObj = ProductreceiptRequestMainConvert.INSTANCE.convert(updateReqVO);
productreceiptRequestMainMapper.updateById(updateObj);
ProductreceiptRequestMainDO productreceiptRequestMainDO = validatorToUpdate(updateReqVO);
if(RequestStatusEnum.HANDLING.getCode().equals(productreceiptRequestMainDO.getStatus())) {
this.generateJob(productreceiptRequestMainDO, productreceiptRequestDetailMapper.selectList(productreceiptRequestMainDO.getId()));
}
trendsApi.createTrends(productreceiptRequestMainDO.getId(), "ProductreceiptRequest", "更新了制品收货申请", TrendsTypeEnum.UPDATE);
}
/**
* 创建 主子 数据
* @param createReqVO
* @return
*/
private ProductreceiptRequestMainDO validatorToCreate(ProductreceiptRequestMainCreateReqVO createReqVO) {
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductReceiptRequest");
ProductreceiptRequestMainDO productreceiptRequestMainDO = validateMainMethod(createReqVO);
//子表校验
List<ProductreceiptRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<ProductreceiptRequestDetailDO> subDOList = ProductreceiptRequestDetailConvert.INSTANCE.convertList03(subList);
for (ProductreceiptRequestDetailDO productreceiptRequestDetailDO : subDOList) {
validateDetailMethod(productreceiptRequestMainDO, productreceiptRequestDetailDO);
}
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode());
productreceiptRequestMainDO.setNumber(number);
productreceiptRequestMainDO.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString());
productreceiptRequestMainMapper.insert(productreceiptRequestMainDO);
for (ProductreceiptRequestDetailDO productreceiptRequestDetailDO : subDOList) {
productreceiptRequestDetailDO.setMasterId(productreceiptRequestMainDO.getId());
productreceiptRequestDetailDO.setNumber(productreceiptRequestMainDO.getNumber());
productreceiptRequestDetailDO.setInventoryStatus(businesstypeDO.getOutInventoryStatuses());
productreceiptRequestDetailMapper.insert(productreceiptRequestDetailDO);
// 创建 制品收货申请第二子表 bom相关信息
generateBackflushRequest(productreceiptRequestDetailDO);
}
return productreceiptRequestMainDO;
}
/**
* 更新 数据
* @param updateReqVO
* @return
*/
private ProductreceiptRequestMainDO validatorToUpdate(ProductreceiptRequestMainUpdateReqVO updateReqVO) {
ProductreceiptRequestMainDO productreceiptRequestMainDO = validateMainMethod(updateReqVO);
productreceiptRequestMainDO.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString());
productreceiptRequestMainMapper.updateById(productreceiptRequestMainDO);
return productreceiptRequestMainDO;
}
/**
* 校验 主表 数据
* @param baseVO
* @return
*/
private ProductreceiptRequestMainDO validateMainMethod(ProductreceiptRequestMainBaseVO baseVO){
ProductreceiptRequestMainDO mainDo = ProductreceiptRequestMainConvert.INSTANCE.convert(baseVO);
// 赋值
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
mainDo.setRequestTime(LocalDateTime.now());
// 校验 车间
workshopService.selectWorkshopExist(mainDo.getWorkshopCode());
// 校验 班组
teamService.selectTeamExist(mainDo.getTeam());
// 校验 班次
shiftService.selectShiftExist(mainDo.getShift());
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ProductReceiptRequest");
if (requestsettingDO == null) {
throw new UtilException("未查找到发料申请的相关申请设置");
} else {
mainDo.setAutoAgree(requestsettingDO.getAutoAgree());
mainDo.setAutoCommit(requestsettingDO.getAutoCommit());
mainDo.setAutoExecute(requestsettingDO.getAutoExecute());
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
}
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductReceiptRequest");
if (businesstypeDO == null) {
throw new UtilException("根据单据设置未查找到发料申请的相关业务类型");
} else {
mainDo.setBusinessType(businesstypeDO.getCode());
mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes());
mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes());
}
return mainDo;
}
/**
* 校验 子表 数据
* @param detailDo
*/
private void validateDetailMethod(ProductreceiptRequestMainDO mainDO, ProductreceiptRequestDetailDO detailDo) {
// 校验 生产线
ProductionlineDO productionlineDO = productionlineService.productionLineCodeExist(detailDo.getProductionLineCode());
detailDo.setToLocationCode(productionlineDO.getRawLocationCode());
// 校验生产线和物品关系
productionlineitemService.productionLineCodeAndpItemCodeExist(detailDo.getProductionLineCode(), detailDo.getItemCode());
// 校验 物品
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode());
// 赋值物品相关信息
detailDo.setItemName(itembasicDO.getName());
detailDo.setItemDesc1(itembasicDO.getDesc1());
detailDo.setItemDesc2(itembasicDO.getDesc2());
detailDo.setProjectCode(itembasicDO.getProject());
if (!itembasicDO.getUom().equals(detailDo.getUom())) {
throw new UtilException("计量单位【" + detailDo.getUom() + "】错误,应该是" + itembasicDO.getUom());
}
// 校验 物品包装
ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode());
detailDo.setStdPackQty(itempackagingDO.getStdPackQty());
detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit());
// 校验 工位
if (detailDo.getWorkStationCode() != null && !detailDo.getWorkStationCode().equals("")) {
WorkstationDO workstationDO = workstationService.selectWorkstationExist(detailDo.getWorkStationCode(), mainDO.getWorkshopCode(), detailDo.getProductionLineCode());
detailDo.setToLocationCode(workstationDO.getFgLocationCode());
}
// 校验 物品和bom关系
bomService.bomItemCodeAndVersionExist(detailDo.getItemCode(),detailDo.getBomVersion());
// 校验 成品库与物品关系 TODO:需要上架策略完善后 打开注释
//jobUtils.getItemCodeLocationCode(detailDo.getItemCode(), detailDo.getToLocationCode());
}
@Override
@ -58,10 +283,12 @@ public class ProductreceiptRequestMainServiceImpl implements ProductreceiptReque
productreceiptRequestMainMapper.deleteById(id);
}
private void validateProductreceiptRequestMainExists(Long id) {
if (productreceiptRequestMainMapper.selectById(id) == null) {
private ProductreceiptRequestMainDO validateProductreceiptRequestMainExists(Long id) {
ProductreceiptRequestMainDO productreceiptRequestMainDO = productreceiptRequestMainMapper.selectById(id);
if (productreceiptRequestMainDO == null) {
throw exception(PRODUCTRECEIPT_REQUEST_MAIN_NOT_EXISTS);
}
return productreceiptRequestMainDO;
}
@Override
@ -88,4 +315,435 @@ public class ProductreceiptRequestMainServiceImpl implements ProductreceiptReque
public PageResult<ProductreceiptRequestMainDO> getProductreceiptRequestMainSenior(CustomConditions conditions) {
return productreceiptRequestMainMapper.selectSenior(conditions);
}
@Override
public List<ProductreceiptRequestMainDO> getProductreceiptRequestMainList(CustomConditions conditions) {
return productreceiptRequestMainMapper.selectSeniorList(conditions);
}
/**
* 主表校验导入并赋值一些参数
*
* @param mainDo
* @return
*/
private String validateProductreceiptRequestMainImport(ProductreceiptRequestMainDO mainDo) {
StringBuilder message = new StringBuilder();
// 赋值
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
mainDo.setRequestTime(LocalDateTime.now());
// 校验 车间
try {
workshopService.selectWorkshopExist(mainDo.getWorkshopCode());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验 班组
try {
teamService.selectTeamExist(mainDo.getTeam());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验 班次
try {
shiftService.selectShiftExist(mainDo.getShift());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ProductReceiptRequest");
if (requestsettingDO == null) {
message.append("未查找到发料申请的相关申请设置");
} else {
mainDo.setAutoAgree(requestsettingDO.getAutoAgree());
mainDo.setAutoCommit(requestsettingDO.getAutoCommit());
mainDo.setAutoExecute(requestsettingDO.getAutoExecute());
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
}
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductReceiptRequest");
if (businesstypeDO == null) {
message.append("根据单据设置未查找到发料申请的相关业务类型");
} else {
mainDo.setBusinessType(businesstypeDO.getCode());
mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes());
mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes());
}
try {
ValidationUtils.validate(validator, mainDo);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
return message.toString();
}
/**
* 子表校验导入并赋值一些参数
*
* @param detailDo
* @return
*/
private String validateProductreceiptRequestDetailImport(ProductreceiptRequestDetailDO detailDo, ProductreceiptRequestMainDO mainDo) {
StringBuilder message = new StringBuilder();
// 校验 生产线
try {
ProductionlineDO productionlineDO = productionlineService.productionLineCodeExist(detailDo.getProductionLineCode());
detailDo.setToLocationCode(productionlineDO.getRawLocationCode());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验生产线和物品关系
try {
productionlineitemService.productionLineCodeAndpItemCodeExist(detailDo.getProductionLineCode(), detailDo.getItemCode());
} catch (Exception e) {
message.append(e.getMessage()).append(",");
}
// 校验 物品
try {
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDo.getItemCode());
// 赋值物品相关信息
detailDo.setItemName(itembasicDO.getName());
detailDo.setItemDesc1(itembasicDO.getDesc1());
detailDo.setItemDesc2(itembasicDO.getDesc2());
detailDo.setProjectCode(itembasicDO.getProject());
try {
if (!itembasicDO.getUom().equals(detailDo.getUom())) {
message.append("计量单位【").append(dictDataApi.selectDictValue(detailDo.getUom()).getLabel()).append("】错误,应该是【").append(dictDataApi.selectDictValue(itembasicDO.getUom()).getLabel()).append("】").append(",");
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验 物品包装
try {
ItempackagingDO itempackagingDO = itempackagingService.selectItemPackagingExist(detailDo.getItemCode());
detailDo.setStdPackQty(itempackagingDO.getStdPackQty());
detailDo.setStdPackUnit(itempackagingDO.getStdPackUnit());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验 工位
try {
if (detailDo.getWorkStationCode() != null && !detailDo.getWorkStationCode().equals("")) {
WorkstationDO workstationDO = workstationService.selectWorkstationExist(detailDo.getWorkStationCode(), mainDo.getWorkshopCode(), detailDo.getProductionLineCode());
detailDo.setToLocationCode(workstationDO.getFgLocationCode());
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验 物品和bom关系
try {
bomService.bomItemCodeAndVersionExist(detailDo.getItemCode(),detailDo.getBomVersion());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
// 校验 成品库与物品关系 TODO:需要上架策略完善后 打开注释
// try {
// jobUtils.getItemCodeLocationCode(detailDo.getItemCode(), detailDo.getToLocationCode());
// } catch (Exception ex) {
// message.append(ex.getMessage()).append(",");
// }
try {
ValidationUtils.validate(validator, detailDo);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
return message.toString();
}
@Override
@Transactional
public List<ProductreceiptRequestImportErrorVO> importProductreceiptRequestList(List<ProductreceiptRequestMainCreateReqVO> datas, Integer mode, Boolean updatePart) {
if (CollUtil.isEmpty(datas)) {
throw exception(PRODUCTRECEIPT_REQUEST_IMPORT_LIST_IS_EMPTY);
}
List<ProductreceiptRequestImportErrorVO> errorList = new ArrayList<>();
datas.forEach(createReqVO -> {
ProductreceiptRequestMainDO mainDo = ProductreceiptRequestMainConvert.INSTANCE.convert(createReqVO);
String messageMain = validateProductreceiptRequestMainImport(mainDo);
List<ProductreceiptRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<ProductreceiptRequestDetailDO> subDOList = ProductreceiptRequestDetailConvert.INSTANCE.convertList03(subList);
// 是否有错误数据
boolean flag = true;
for (ProductreceiptRequestDetailDO detailDO : subDOList) {
String messageDetail = validateProductreceiptRequestDetailImport(detailDO, mainDo);
if (!messageMain.isEmpty() || !messageDetail.isEmpty()) {
ProductreceiptRequestImportErrorVO importErrorVO = ProductreceiptRequestMainConvert.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.PRODUCT_RECEIPT_REQUEST.getCode());
mainDo.setNumber(number);
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
productreceiptRequestMainMapper.insert(mainDo);
for (ProductreceiptRequestDetailDO detailDO : subDOList) {
detailDO.setMasterId(mainDo.getId());
detailDO.setNumber(number);
productreceiptRequestDetailMapper.insert(detailDO);
// 创建 制品收货申请第二子表 bom相关信息
generateBackflushRequest(detailDO);
}
//调用自动执行方法
if(RequestStatusEnum.HANDLING.getCode().equals(mainDo.getStatus())) {
generateJob(mainDo, subDOList);
}
//增加操作记录
trendsApi.createTrends(mainDo.getId(), "ProductreceiptRequestMain", "导入了制品收货申请", TrendsTypeEnum.CREATE);
}
});
return errorList;
}
/**
* 创建 制品收货申请第二子表bom相关
* @param detailbDO
*/
@Override
public void generateBackflushRequest(ProductreceiptRequestDetailDO detailbDO) {
// 删除旧数据 重新添加
backflushRequestDetailbSerivce.deleteBackflushRequestDetailbByMasterId(detailbDO.getId());
List<BackflushRequestDetailbDO> backflushRequestDetailbDOList = new ArrayList<>();
List<Map<String,Object>> list = jobUtils.bomDismantleList(detailbDO.getItemCode(), detailbDO.getBomVersion());
if (list == null || list.size() == 0) {
throw new UtilException("没有找到bom拆解信息");
}
list.forEach(itemBom -> {
BackflushRequestDetailbDO backflushRequestDetailbDO = new BackflushRequestDetailbDO();
backflushRequestDetailbDO.setProcessCode(detailbDO.getProcessCode());
backflushRequestDetailbDO.setBomVersion(itemBom.get("version")==null?"":itemBom.get("version").toString());
backflushRequestDetailbDO.setItemCode(itemBom.get("itemCode")==null?"":itemBom.get("itemCode").toString());
backflushRequestDetailbDO.setMasterId(detailbDO.getId());
backflushRequestDetailbDO.setNumber(detailbDO.getNumber());
backflushRequestDetailbDO.setQty(new BigDecimal(itemBom.get("qty").toString()));
backflushRequestDetailbDO.setUom(itemBom.get("uom")==null?"":itemBom.get("uom").toString());
// 赋值物品相关信息
ItembasicDO itembasicDO = itembasicService.selectItembasic(itemBom.get("itemCode")==null?"":itemBom.get("itemCode").toString());
backflushRequestDetailbDO.setItemName(itembasicDO.getName());
backflushRequestDetailbDO.setItemDesc1(itembasicDO.getDesc1());
backflushRequestDetailbDO.setItemDesc2(itembasicDO.getDesc2());
backflushRequestDetailbDO.setProjectCode(itembasicDO.getProject());
backflushRequestDetailbDOList.add(backflushRequestDetailbDO);
});
backflushRequestDetailbMapper.insertBatch(backflushRequestDetailbDOList);
}
@Override
@Transactional
public Integer closeProductreceiptRequestMain(Long id) {
ProductreceiptRequestMainDO mainDO = validateProductreceiptRequestMainExists(id);
// 校验存在存在下级单据
Long count = productreceiptJobMainMapper.selectByRequestNumber(mainDO.getNumber());
if(count > 0) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_JOB_EXISTS);
}
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus());
boolean flag = requestStatusState.close();
if(!flag) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR);
}
mainDO.setStatus(requestStatusState.getState().getCode());
//增加操作记录
trendsApi.createTrends(id, "productreceiptRequest", "关闭了制品收货申请", TrendsTypeEnum.UPDATE);
return productreceiptRequestMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer reAddProductreceiptRequestMain(Long id) {
ProductreceiptRequestMainDO mainDO = validateProductreceiptRequestMainExists(id);
// 校验存在存在下级单据
Long count = productreceiptJobMainMapper.selectByRequestNumber(mainDO.getNumber());
if(count > 0) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_JOB_EXISTS);
}
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus());
boolean flag = requestStatusState.reAdd();
if(!flag) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR);
}
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
trendsApi.createTrends(id, "productreceiptRequest", "打开了制品收货申请", TrendsTypeEnum.UPDATE);
return productreceiptRequestMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer submitProductreceiptRequestMain(Long id) {
ProductreceiptRequestMainDO mainDO = validateProductreceiptRequestMainExists(id);
// 校验存在存在下级单据
Long count = productreceiptJobMainMapper.selectByRequestNumber(mainDO.getNumber());
if(count > 0) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_JOB_EXISTS);
}
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus());
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute());
if(!flag) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR);
}
mainDO.setStatus(requestStatusState.getState().getCode());
//调用自动执行方法
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) {
this.generateJob(mainDO, productreceiptRequestDetailMapper.selectList(mainDO.getId()));
}
trendsApi.createTrends(id, "productreceiptRequest", "提交了制品收货申请", TrendsTypeEnum.UPDATE);
return productreceiptRequestMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer refusedProductreceiptRequestMain(Long id) {
ProductreceiptRequestMainDO mainDO = validateProductreceiptRequestMainExists(id);
// 校验存在存在下级单据
Long count = productreceiptJobMainMapper.selectByRequestNumber(mainDO.getNumber());
if(count > 0) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_JOB_EXISTS);
}
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus());
boolean flag = requestStatusState.refused();
if(!flag) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR);
}
mainDO.setStatus(requestStatusState.getState().getCode());
trendsApi.createTrends(id, "productreceiptRequest", "驳回了制品收货申请", TrendsTypeEnum.UPDATE);
return productreceiptRequestMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer agreeProductreceiptRequestMain(Long id) {
ProductreceiptRequestMainDO mainDO = validateProductreceiptRequestMainExists(id);
// 校验存在存在下级单据
Long count = productreceiptJobMainMapper.selectByRequestNumber(mainDO.getNumber());
if(count > 0) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_JOB_EXISTS);
}
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus());
boolean flag = requestStatusState.agree(mainDO.getAutoAgree());
if(!flag) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR);
}
mainDO.setStatus(requestStatusState.getState().getCode());
//调用自动执行方法
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) {
this.generateJob(mainDO, productreceiptRequestDetailMapper.selectList(mainDO.getId()));
}
trendsApi.createTrends(id, "productreceiptRequest", "审批通过了制品收货申请", TrendsTypeEnum.UPDATE);
return productreceiptRequestMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer handleProductreceiptRequestMain(Long id) {
ProductreceiptRequestMainDO mainDO = validateProductreceiptRequestMainExists(id);
// 校验存在存在下级单据
Long count = productreceiptJobMainMapper.selectByRequestNumber(mainDO.getNumber());
if(count > 0) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_JOB_EXISTS);
}
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus());
boolean flag = requestStatusState.handle();
if(!flag) {
throw new ServiceException(PRODUCTRECEIPT_REQUEST_MAIN_STATUS_ERROR);
}
mainDO.setStatus(requestStatusState.getState().getCode());
//调用执行方法
this.generateJob(mainDO, productreceiptRequestDetailMapper.selectList(mainDO.getId()));
trendsApi.createTrends(id, "productreceiptRequest", "执行了制品收货申请", TrendsTypeEnum.UPDATE);
return productreceiptRequestMainMapper.updateById(mainDO);
}
/**
* 创建 制品收货任务
* @param mainDO
* @param detailDOList
*/
private void generateJob(ProductreceiptRequestMainDO mainDO, List<ProductreceiptRequestDetailDO> detailDOList) {
//跳过任务直接生成记录
if("TRUE".equals(mainDO.getDirectCreateRecord())) {
// TODO: 制品收货申请 跳过任务直接生成记录 未做!!
// PurchasereceiptRecordMainCreateReqVO purchasereceiptRecordMainCreateReqVO = new PurchasereceiptRecordMainCreateReqVO();
// BeanUtils.copyProperties(mainDO, purchasereceiptRecordMainCreateReqVO);
// purchasereceiptRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber());
// String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_RECORD.getCode());
// purchasereceiptRecordMainCreateReqVO.setNumber(number);
// //增加业务类型
// BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("PurchaseReceiptRecord");
// purchasereceiptRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode());
// purchasereceiptRecordMainMapper.insert(PurchasereceiptRecordMainConvert.INSTANCE.convert(purchasereceiptRecordMainCreateReqVO));
// for(PurchasereceiptRequestDetailDO purchasereceiptRequestDetailDO : detailDOList) {
// PurchasereceiptRecordDetailCreateReqVO purchasereceiptRecordDetailCreateReqVO = new PurchasereceiptRecordDetailCreateReqVO();
// BeanUtils.copyProperties(purchasereceiptRequestDetailDO, purchasereceiptRecordDetailCreateReqVO);
// purchasereceiptRecordDetailCreateReqVO.setNumber(number);
// purchasereceiptRecordDetailMapper.insert(PurchasereceiptRecordDetailConvert.INSTANCE.convert(purchasereceiptRecordDetailCreateReqVO));
// }
// return;
}
// 任务主表信息
ProductreceiptJobMainDO productreceiptJobMainDO = new ProductreceiptJobMainDO();
BeanUtil.copyProperties(mainDO, productreceiptJobMainDO);
String number = serialNumberApi.generateCode(RuleCodeEnum.PRODUCT_RECEIPT_JOB.getCode());
productreceiptJobMainDO.setNumber(number);
productreceiptJobMainDO.setRequestNumber(mainDO.getNumber());
productreceiptJobMainDO.setWorkShopCode(mainDO.getWorkshopCode());
productreceiptJobMainDO.setRequestDueTime(mainDO.getDueTime());
productreceiptJobMainDO.setStatus(JobStatusEnum.PENDING.getCode());
productreceiptJobMainDO.setId(null);
productreceiptJobMainDO.setCreateTime(null);
productreceiptJobMainDO.setCreator(null);
productreceiptJobMainDO.setUpdateTime(null);
productreceiptJobMainDO.setUpdater(null);
productreceiptJobMainDO.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString());
// 获取任务单据设置
JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("ProductReceiptJob");
productreceiptJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete());
productreceiptJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation());
productreceiptJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty());
productreceiptJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty());
productreceiptJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty());
productreceiptJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus());
productreceiptJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning());
productreceiptJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete());
productreceiptJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber());
productreceiptJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach());
//增加业务类型
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductReceiptJob");
productreceiptJobMainDO.setInInventoryStatuses(businesstypeDO.getInInventoryStatuses());
productreceiptJobMainDO.setOutInventoryStatuses(businesstypeDO.getOutInventoryStatuses());
productreceiptJobMainDO.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
productreceiptJobMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes());
productreceiptJobMainDO.setBusinessType(businesstypeDO.getCode());
productreceiptJobMainMapper.insert(productreceiptJobMainDO);
List<ProductreceiptJobDetailDO> productreceiptJobDetailDOList = new ArrayList<>();
List<ExpectinCreateReqVO> expectinCreateReqVOList = new ArrayList<>();
for(ProductreceiptRequestDetailDO detailDO: detailDOList) {
ProductreceiptJobDetailDO productreceiptJobDetailDO = new ProductreceiptJobDetailDO();
BeanUtil.copyProperties(detailDO, productreceiptJobDetailDO);
productreceiptJobDetailDO.setMasterId(productreceiptJobMainDO.getId());
productreceiptJobDetailDO.setNumber(number);
productreceiptJobDetailDO.setId(null);
productreceiptJobDetailDO.setCreateTime(null);
productreceiptJobDetailDO.setCreator(null);
productreceiptJobDetailDO.setUpdateTime(null);
productreceiptJobDetailDO.setUpdater(null);
productreceiptJobDetailDOList.add(productreceiptJobDetailDO);
//预计入
ExpectinCreateReqVO expectinCreateReqVO = new ExpectinCreateReqVO();
BeanUtils.copyProperties(productreceiptJobDetailDO, expectinCreateReqVO);
expectinCreateReqVO.setJobNumber(number);
expectinCreateReqVO.setBusinessType(productreceiptJobMainDO.getBusinessType());
expectinCreateReqVO.setLocationCode(detailDO.getToLocationCode());
expectinCreateReqVO.setOwnerCode(detailDO.getToOwnerCode());
expectinCreateReqVOList.add(expectinCreateReqVO);
}
productreceiptJobDetailMapper.insertBatch(productreceiptJobDetailDOList);
//增加预计入
expectinService.createExpectin(expectinCreateReqVOList);
trendsApi.createTrends(productreceiptJobMainDO.getId(), "productreceiptJob", "制品收货申请生成制品收货任务", TrendsTypeEnum.CREATE);
}
}

48
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java

@ -4,8 +4,10 @@ import cn.hutool.core.exceptions.UtilException;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.module.wms.controller.bom.vo.BomExportReqVO;
import com.win.module.wms.controller.rule.vo.RuleRespVO;
import com.win.module.wms.dal.dataobject.balance.BalanceDO;
import com.win.module.wms.dal.dataobject.bom.BomDO;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
import com.win.module.wms.dal.dataobject.documentsetting.DocumentsettingDO;
import com.win.module.wms.dal.dataobject.expectout.ExpectoutDO;
@ -17,6 +19,7 @@ import com.win.module.wms.dal.mysql.balance.BalanceMapper;
import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper;
import com.win.module.wms.dal.mysql.location.LocationMapper;
import com.win.module.wms.service.balance.BalanceService;
import com.win.module.wms.service.bom.BomService;
import com.win.module.wms.service.businesstype.BusinesstypeService;
import com.win.module.wms.service.documentsetting.DocumentsettingService;
import com.win.module.wms.service.expectout.ExpectoutService;
@ -31,10 +34,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
@ -43,6 +43,8 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*;
@Component
public class JobUtils {
@Resource
private BomService bomService;
@Resource
private ItembasicService itembasicService;
@ -934,4 +936,42 @@ public class JobUtils {
throw exception(LOCATION_ITEMCODE_AND_LOCATIONCODE_NOT_EXISTS);
}
}
/**
* bom拆解
* @param itemCode 父物品代码
* @param bomVersion bom版本
* @return
*/
public List<Map<String,Object>> bomDismantleList (String itemCode, String bomVersion) {
List<Map<String,Object>> list = new ArrayList<>();
BomRecursion(itemCode, bomVersion, list);
return list;
}
/**
* bom解析递归
* @param itemCode
* @param list
*/
private void BomRecursion (String itemCode,String bomVersion ,List<Map<String,Object>> list) {
BomExportReqVO bomExportReqVO = new BomExportReqVO();
bomExportReqVO.setProductItemCode(itemCode);
bomExportReqVO.setVersion(bomVersion);
bomExportReqVO.setAvailable("TRUE");
List<BomDO> bomDOList = bomService.getBomList(bomExportReqVO);
bomDOList.forEach(item -> {
// 判断物品是否是虚零件 TODO: 拆解BOM 子零件是否要按照父零件版本进行查询??
if (itembasicService.selectItembasic(item.getComponentItemCode()).getIsPhantom().equals("TRUE")) {
this.BomRecursion(item.getComponentItemCode(), item.getVersion(), list);
} else {
Map<String,Object> map = new HashMap<>();
map.put("itemCode",item.getComponentItemCode());
map.put("uom",item.getComponentUom());
map.put("qty",item.getComponentQty());
map.put("version",item.getVersion());
list.add(map);
}
});
}
}

Loading…
Cancel
Save