Browse Source

生产收料任务

master
陈薪名 2 years ago
parent
commit
4c0acd9910
  1. 119
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/ProductionreceiptJobMainController.java
  2. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobDetailPageReqVO.java
  3. 21
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobDetailUpdateReqVO.java
  4. 110
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobMainExcelVO.java
  5. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobMainUpdateReqVO.java
  6. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionreceiptJob/ProductionreceiptJobMainConvert.java
  7. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/productionreceiptRecord/ProductionreceiptRecordDetailDO.java
  8. 8
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionreceiptJob/ProductionreceiptJobDetailMapper.java
  9. 5
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionreceiptJob/ProductionreceiptJobMainMapper.java
  10. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobDetailService.java
  11. 5
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobDetailServiceImpl.java
  12. 11
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainService.java
  13. 230
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainServiceImpl.java

119
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/ProductionreceiptJobMainController.java

@ -3,6 +3,7 @@ package com.win.module.wms.controller.productionreceiptJob;
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.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi;
@ -12,6 +13,7 @@ import com.win.module.wms.convert.productionreceiptJob.ProductionreceiptJobDetai
import com.win.module.wms.convert.productionreceiptJob.ProductionreceiptJobMainConvert;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobDetailDO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobMainDO;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.service.productionreceiptJob.ProductionreceiptJobDetailService;
import com.win.module.wms.service.productionreceiptJob.ProductionreceiptJobMainService;
import io.swagger.v3.oas.annotations.Operation;
@ -26,10 +28,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@ -98,23 +97,6 @@ public class ProductionreceiptJobMainController {
return success(ProductionreceiptJobMainConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出生产收料任务主 Excel")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:export')")
@OperateLog(type = EXPORT)
public void exportProductionreceiptJobMainExcel(@Valid ProductionreceiptJobMainExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProductionreceiptJobMainDO> list = productionreceiptJobMainService.getProductionreceiptJobMainList(exportReqVO);
// 导出 Excel
List<ProductionreceiptJobMainExcelVO> datas = ProductionreceiptJobMainConvert.INSTANCE.convertList02(list);
for(ProductionreceiptJobMainExcelVO vo : datas) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
//后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname());
}
ExcelUtils.write(response, "生产收料任务主.xls", "数据", ProductionreceiptJobMainExcelVO.class, datas);
}
@PostMapping("/senior")
@Operation(summary = "高级搜索获得生产收料任务主分页")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:query')")
@ -129,6 +111,70 @@ public class ProductionreceiptJobMainController {
return success(result);
}
@GetMapping("/export-excel")
@Operation(summary = "导出生产收料任务主 Excel")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:export')")
@OperateLog(type = EXPORT)
public void exportProductionreceiptJobMainExcel(@Valid ProductionreceiptJobMainExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ProductionreceiptJobMainDO> list = productionreceiptJobMainService.getProductionreceiptJobMainList(exportReqVO);
//组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<ProductionreceiptJobMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
// 导出 Excel
ExcelUtils.write(response, "生产收料任务.xlsx", "生产收料任务", ProductionreceiptJobMainExcelVO.class, resultList, mapDropDown);
}
@PostMapping("/export-excel-senior")
@Operation(summary = "导出生产收料任务 Excel")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:export')")
@OperateLog(type = EXPORT)
public void exportProductionreceiptJobMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException {
List<ProductionreceiptJobMainDO> list = productionreceiptJobMainService.getProductionreceiptJobMainList(conditions);
//组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<ProductionreceiptJobMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
// 导出 Excel
ExcelUtils.write(response, "生产收料任务.xlsx", "生产收料任务", ProductionreceiptJobMainExcelVO.class, resultList, mapDropDown);
}
private List<ProductionreceiptJobMainExcelVO> getExcelVo(List<ProductionreceiptJobMainDO> list, Map<Integer, String[]> mapDropDown) {
String[] locationType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.LOCATION_TYPE);
mapDropDown.put(17, locationType);
mapDropDown.put(18, locationType);
String[] areaType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.AREA_TYPE);
mapDropDown.put(24, areaType);
mapDropDown.put(25, areaType);
String[] trueFalse = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE);
mapDropDown.put(26, trueFalse);
mapDropDown.put(27, trueFalse);
mapDropDown.put(28, trueFalse);
mapDropDown.put(29, trueFalse);
mapDropDown.put(30, trueFalse);
mapDropDown.put(31, trueFalse);
mapDropDown.put(32, trueFalse);
mapDropDown.put(33, trueFalse);
mapDropDown.put(34, trueFalse);
mapDropDown.put(35, trueFalse);
mapDropDown.put(36, trueFalse);
String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS);
mapDropDown.put(43, inventoryStatus);
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(52, uom);
List<ProductionreceiptJobMainExcelVO> resultList = new ArrayList<>();
// 导出
for(ProductionreceiptJobMainDO mainDO : list) {
List<ProductionreceiptJobDetailDO> subList = productionreceiptJobDetailService.selectList(mainDO.getId());
for(ProductionreceiptJobDetailDO detailDO : subList) {
ProductionreceiptJobMainExcelVO vo = ProductionreceiptJobMainConvert.INSTANCE.convert(mainDO, detailDO);
AdminUserRespDTO user = userApi.getUser(Long.valueOf(mainDO.getCreator()));
vo.setCreator(user.getNickname());
resultList.add(vo);
}
}
return resultList;
}
@GetMapping("/getProductionreceiptJobById")
@Operation(summary = "APP获得生产收料主子表明细列表")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@ -162,4 +208,35 @@ public class ProductionreceiptJobMainController {
return success(countByStatus);
}
@GetMapping(value = "/accept")
@Operation(summary = "承接任务")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:accept')")
public CommonResult<Boolean> acceptProductionreceiptJobMain(@RequestParam("id") Long id) {
int result = productionreceiptJobMainService.acceptProductionreceiptJobMain(id);
return success(result > 0);
}
@GetMapping(value = "/abandon")
@Operation(summary = "放弃任务")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:abandon')")
public CommonResult<Boolean> abandonProductionreceiptJobMain(@RequestParam("id") Long id) {
int result = productionreceiptJobMainService.abandonProductionreceiptJobMain(id);
return success(result > 0);
}
@GetMapping(value = "/close")
@Operation(summary = "关闭任务")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:close')")
public CommonResult<Boolean> closeProductionreceiptJobMain(@RequestParam("id") Long id) {
int result = productionreceiptJobMainService.closeProductionreceiptJobMain(id);
return success(result > 0);
}
@PutMapping("/execute")
@Operation(summary = "执行任务")
@PreAuthorize("@ss.hasPermission('wms:productionreceipt-job-main:execute')")
public CommonResult<Boolean> executeProductionreceiptJobMain(@Valid @RequestBody ProductionreceiptJobMainUpdateReqVO updateReqVO) {
Integer count = productionreceiptJobMainService.executeProductionreceiptJobMain(updateReqVO);
return success(count > 0);
}
}

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobDetailPageReqVO.java

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

21
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobDetailUpdateReqVO.java

@ -3,10 +3,31 @@ package com.win.module.wms.controller.productionreceiptJob.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List;
@Schema(description = "管理后台 - 生产收料任务子更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProductionreceiptJobDetailUpdateReqVO extends ProductionreceiptJobDetailBaseVO {
@Schema(description = "实际收货数量")
private BigDecimal handleQty;
@Schema(description = "到包装")
private String toPackingNumber;
@Schema(description = "到器具")
private String toContainerNumber;
@Schema(description = "到批次")
private String toBatch;
@Schema(description = "到库存状态")
private String toInventoryStatus;
@Schema(description = "到库位")
private String toLocationCode;
}

110
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobMainExcelVO.java

@ -1,5 +1,7 @@
package com.win.module.wms.controller.productionreceiptJob.vo;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.job.JobStatusConverter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -42,8 +44,7 @@ public class ProductionreceiptJobMainExcelVO {
@ExcelProperty("要求截止时间")
private LocalDateTime requestDueTime;
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("job_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@ExcelProperty(value = "状态", converter = JobStatusConverter.class)
private String status;
@ExcelProperty("过期时间")
@ -55,10 +56,6 @@ public class ProductionreceiptJobMainExcelVO {
@ExcelProperty("最后更新者Id")
private String updater;
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("job_stage_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String jobStageStatus;
@ExcelProperty("优先级")
private Integer priority;
@ -81,11 +78,11 @@ public class ProductionreceiptJobMainExcelVO {
private LocalDateTime completeTime;
@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("单据号")
@ -103,43 +100,112 @@ public class ProductionreceiptJobMainExcelVO {
@ExcelProperty("创建者id")
private String creator;
@ExcelProperty("从库区代码范围")
@ExcelProperty(value = "从库区代码范围", converter = DictConvert.class)
@DictFormat(DictTypeConstants.AREA_TYPE)
private String fromAreaCodes;
@ExcelProperty("到库区代码范围")
@ExcelProperty(value = "到库区代码范围", converter = DictConvert.class)
@DictFormat(DictTypeConstants.AREA_TYPE)
private String toAreaCodes;
@ExcelProperty("使用在途库")
@ExcelProperty(value = "使用在途库", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String useOnTheWayLocation;
@ExcelProperty("自动完成")
@ExcelProperty(value = "自动完成", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String autoComplete;
@ExcelProperty("允许修改库位")
@ExcelProperty(value = "允许修改库位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowModifyLocation;
@ExcelProperty("允许修改数量")
@ExcelProperty(value = "允许修改数量", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowModifyQty;
@ExcelProperty("允许大于推荐数量")
@ExcelProperty(value = "允许大于推荐数量", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowBiggerQty;
@ExcelProperty("允许小于推荐数量")
@ExcelProperty(value = "允许小于推荐数量", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowSmallerQty;
@ExcelProperty("允许修改库存状态")
@ExcelProperty(value = "允许修改库存状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowModifyInventoryStatus;
@ExcelProperty("允许连续扫描")
@ExcelProperty(value = "允许连续扫描", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowContinuousScanning;
@ExcelProperty("允许部分完成")
@ExcelProperty(value = "允许部分完成", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowPartialComplete;
@ExcelProperty("允许修改批次")
@ExcelProperty(value = "允许修改箱码", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowModifyPackingNumber;
@ExcelProperty(value = "允许修改批次", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
private String allowModifyBatch;
@ExcelProperty("允许修改箱码")
private String allowModifyPackingNumber;
@ExcelProperty("生产线代码")
private String productionLineCode;
@ExcelProperty("工位代码")
private String workStationCode;
@ExcelProperty("在途库库位")
private String onTheWayLocationCode;
@ExcelProperty("包装号")
private String packingNumber;
@ExcelProperty("器具号")
private String containerNumber;
@ExcelProperty("批次")
private String batch;
@ExcelProperty(value = "库存状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.INVENTORY_STATUS)
private String inventoryStatus;
@ExcelProperty("从库位代码")
private String fromLocationCode;
@ExcelProperty("到库位代码")
private String toLocationCode;
@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;
@ExcelProperty("从货主代码")
private String fromOwnerCode;
@ExcelProperty("到货主代码")
private String toOwnerCode;
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionreceiptJob/vo/ProductionreceiptJobMainUpdateReqVO.java

@ -1,12 +1,17 @@
package com.win.module.wms.controller.productionreceiptJob.vo;
import com.win.module.wms.controller.issueJob.vo.IssueJobDetailUpdateReqVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.Valid;
import java.util.List;
@Schema(description = "管理后台 - 生产收料任务主更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProductionreceiptJobMainUpdateReqVO extends ProductionreceiptJobMainBaseVO {
@Schema(description = "子表数据")
private List<@Valid ProductionreceiptJobDetailUpdateReqVO> subList;
}

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionreceiptJob/ProductionreceiptJobMainConvert.java

@ -8,7 +8,10 @@ import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJo
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainExcelVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainRespVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainUpdateReqVO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobDetailDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobMainDO;
@ -34,4 +37,13 @@ public interface ProductionreceiptJobMainConvert {
List<ProductionreceiptJobMainExcelVO> convertList02(List<ProductionreceiptJobMainDO> 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"),
})
ProductionreceiptJobMainExcelVO convert(ProductionreceiptJobMainDO mainDO, ProductionreceiptJobDetailDO detailDO);
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/productionreceiptRecord/ProductionreceiptRecordDetailDO.java

@ -87,7 +87,7 @@ public class ProductionreceiptRecordDetailDO extends BaseDO {
/**
* 主表ID
*/
private String masterId;
private Long masterId;
/**
* 单据号
*/

8
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionreceiptJob/ProductionreceiptJobDetailMapper.java

@ -7,6 +7,8 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobDetailExportReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobDetailPageReqVO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobDetailDO;
import com.win.module.wms.dal.dataobject.preparetoissue.PreparetoissueDetailDO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobDetailDO;
import org.apache.ibatis.annotations.Mapper;
@ -22,6 +24,7 @@ public interface ProductionreceiptJobDetailMapper extends BaseMapperX<Production
default PageResult<ProductionreceiptJobDetailDO> selectPage(ProductionreceiptJobDetailPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProductionreceiptJobDetailDO>()
.eq(ProductionreceiptJobDetailDO::getMasterId, reqVO.getMasterId())
.eqIfPresent(ProductionreceiptJobDetailDO::getProductionLineCode, reqVO.getProductionLineCode())
.eqIfPresent(ProductionreceiptJobDetailDO::getWorkStationCode, reqVO.getWorkStationCode())
.eqIfPresent(ProductionreceiptJobDetailDO::getOnTheWayLocationCode, reqVO.getOnTheWayLocationCode())
@ -79,4 +82,9 @@ public interface ProductionreceiptJobDetailMapper extends BaseMapperX<Production
.orderByDesc(ProductionreceiptJobDetailDO::getId));
}
default List<ProductionreceiptJobDetailDO> selectList(Long masterId) {
return selectList(new LambdaQueryWrapperX<ProductionreceiptJobDetailDO>()
.eq(ProductionreceiptJobDetailDO::getMasterId, masterId));
}
}

5
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionreceiptJob/ProductionreceiptJobMainMapper.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.productionreceiptJob.vo.ProductionreceiptJobMainExportReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainPageReqVO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobMainDO;
import com.win.module.wms.dal.dataobject.repleinshJob.RepleinshJobMainDO;
import org.apache.ibatis.annotations.Mapper;
@ -122,4 +123,8 @@ public interface ProductionreceiptJobMainMapper extends BaseMapperX<Productionre
}
default List<ProductionreceiptJobMainDO> selectSeniorList(CustomConditions conditions) {
return selectList(QueryWrapperUtils.structure(conditions));
}
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobDetailService.java

@ -80,4 +80,6 @@ public interface ProductionreceiptJobDetailService {
* @return 分页列表
*/
PageResult<ProductionreceiptJobDetailDO> getProductionreceiptJobDetailSenior(CustomConditions conditions);
List<ProductionreceiptJobDetailDO> selectList(Long id);
}

5
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobDetailServiceImpl.java

@ -88,4 +88,9 @@ public class ProductionreceiptJobDetailServiceImpl implements ProductionreceiptJ
public PageResult<ProductionreceiptJobDetailDO> getProductionreceiptJobDetailSenior(CustomConditions conditions) {
return productionreceiptJobDetailMapper.selectSenior(conditions);
}
@Override
public List<ProductionreceiptJobDetailDO> selectList(Long masterId) {
return productionreceiptJobDetailMapper.selectList(masterId);
}
}

11
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainService.java

@ -6,6 +6,7 @@ import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJo
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainExportReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainPageReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainUpdateReqVO;
import com.win.module.wms.dal.dataobject.issueJob.IssueJobMainDO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobMainDO;
import org.springframework.lang.Nullable;
@ -59,6 +60,8 @@ public interface ProductionreceiptJobMainService {
*/
List<ProductionreceiptJobMainDO> getProductionreceiptJobMainList(Collection<Long> ids);
List<ProductionreceiptJobMainDO> getProductionreceiptJobMainList(CustomConditions conditions);
/**
* 获得生产收料任务主分页
*
@ -97,4 +100,12 @@ public interface ProductionreceiptJobMainService {
* @return
*/
Map<String,Integer> getCountByStatus(@Nullable Collection<String> types);
Integer acceptProductionreceiptJobMain(Long id);
Integer abandonProductionreceiptJobMain(Long id);
Integer closeProductionreceiptJobMain(Long id);
Integer executeProductionreceiptJobMain(ProductionreceiptJobMainUpdateReqVO updateReqVO);
}

230
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainServiceImpl.java

@ -1,28 +1,49 @@
package com.win.module.wms.service.productionreceiptJob;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.productionreceiptJob.vo.ProductionreceiptJobMainCreateReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainExportReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainPageReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainUpdateReqVO;
import com.win.module.infra.api.trends.TrendsApi;
import com.win.module.infra.enums.TrendsTypeEnum;
import com.win.module.system.api.serialnumber.SerialNumberApi;
import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.system.enums.serialNumber.RuleCodeEnum;
import com.win.module.wms.controller.issueJob.vo.IssueJobDetailUpdateReqVO;
import com.win.module.wms.controller.productionreceiptJob.vo.*;
import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO;
import com.win.module.wms.convert.productionreceiptJob.ProductionreceiptJobMainConvert;
import com.win.module.wms.dal.dataobject.accountcalendar.AccountcalendarDO;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
import com.win.module.wms.dal.dataobject.issueRecord.IssueRecordDetailDO;
import com.win.module.wms.dal.dataobject.location.LocationDO;
import com.win.module.wms.dal.dataobject.production.ProductionDetailDO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobDetailDO;
import com.win.module.wms.dal.dataobject.productionreceiptJob.ProductionreceiptJobMainDO;
import com.win.module.wms.dal.dataobject.productionreceiptRecord.ProductionreceiptRecordDetailDO;
import com.win.module.wms.dal.dataobject.productionreceiptRecord.ProductionreceiptRecordMainDO;
import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO;
import com.win.module.wms.dal.mysql.productionreceiptJob.ProductionreceiptJobMainMapper;
import com.win.module.wms.dal.mysql.productionreceiptRecord.ProductionreceiptRecordDetailMapper;
import com.win.module.wms.dal.mysql.productionreceiptRecord.ProductionreceiptRecordMainMapper;
import com.win.module.wms.enums.job.JobStatusState;
import com.win.module.wms.service.expectin.ExpectinService;
import com.win.module.wms.service.location.LocationService;
import com.win.module.wms.service.production.ProductionMainService;
import com.win.module.wms.service.transaction.TransactionService;
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 java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.time.LocalDateTime;
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.*;
/**
@ -34,6 +55,26 @@ import static com.win.module.wms.enums.ErrorCodeConstants.*;
@Validated
public class ProductionreceiptJobMainServiceImpl implements ProductionreceiptJobMainService {
@Resource
private ExpectinService expectinService;
@Resource
private TransactionService transactionService;
@Resource
private LocationService locationService;
@Resource
private ProductionreceiptRecordDetailMapper productionreceiptRecordDetailMapper;
@Resource
private ProductionreceiptRecordMainMapper productionreceiptRecordMainMapper;
@Resource
private JobUtils jobUtils;
@Resource
private SerialNumberApi serialNumberApi;
@Resource
private ProductionreceiptJobDetailService productionreceiptJobDetailService;
@Resource
private AdminUserApi userApi;
@Resource
private TrendsApi trendsApi;
@Resource
private ProductionreceiptJobMainMapper productionreceiptJobMainMapper;
@ -66,10 +107,12 @@ public class ProductionreceiptJobMainServiceImpl implements ProductionreceiptJob
productionreceiptJobMainMapper.deleteById(id);
}
private void validateProductionreceiptJobMainExists(Long id) {
if (productionreceiptJobMainMapper.selectById(id) == null) {
private ProductionreceiptJobMainDO validateProductionreceiptJobMainExists(Long id) {
ProductionreceiptJobMainDO productionreceiptJobMainDO = productionreceiptJobMainMapper.selectById(id);
if (productionreceiptJobMainDO == null) {
throw exception(PRODUCTIONRECEIPT_JOB_MAIN_NOT_EXISTS);
}
return productionreceiptJobMainDO;
}
@Override
@ -82,6 +125,11 @@ public class ProductionreceiptJobMainServiceImpl implements ProductionreceiptJob
return productionreceiptJobMainMapper.selectBatchIds(ids);
}
@Override
public List<ProductionreceiptJobMainDO> getProductionreceiptJobMainList(CustomConditions conditions) {
return productionreceiptJobMainMapper.selectSeniorList(conditions);
}
@Override
public PageResult<ProductionreceiptJobMainDO> getProductionreceiptJobMainPage(ProductionreceiptJobMainPageReqVO pageReqVO) {
return productionreceiptJobMainMapper.selectPage(pageReqVO);
@ -127,4 +175,164 @@ public class ProductionreceiptJobMainServiceImpl implements ProductionreceiptJob
map.put("count", l.intValue());
return map;
}
@Override
@Transactional
public Integer acceptProductionreceiptJobMain(Long id) {
ProductionreceiptJobMainDO productionreceiptJobMainDO = this.validateProductionreceiptJobMainExists(id);
JobStatusState jobStatusState = new JobStatusState(productionreceiptJobMainDO.getStatus());
if(!jobStatusState.accept()) {
throw exception(PRODUCTIONRECEIPT_JOB_MAIN_STATUS_ERROR);
}
Long userId = getLoginUserId();
AdminUserRespDTO userRespDTO = userApi.getUser(userId);
productionreceiptJobMainDO.setStatus(jobStatusState.getState().getCode());
productionreceiptJobMainDO.setAcceptUserId(String.valueOf(userId));
productionreceiptJobMainDO.setAcceptUserName(userRespDTO.getNickname());
productionreceiptJobMainDO.setAcceptTime(LocalDateTime.now());
trendsApi.createTrends(id, "productionreceiptJob", "承接了生产收料任务", TrendsTypeEnum.UPDATE);
return productionreceiptJobMainMapper.updateById(productionreceiptJobMainDO);
}
@Override
@Transactional
public Integer abandonProductionreceiptJobMain(Long id) {
ProductionreceiptJobMainDO productionreceiptJobMainDO = this.validateProductionreceiptJobMainExists(id);
JobStatusState jobStatusState = new JobStatusState(productionreceiptJobMainDO.getStatus());
if(!jobStatusState.cancelAccept()) {
throw exception(PRODUCTIONRECEIPT_JOB_MAIN_STATUS_ERROR);
}
productionreceiptJobMainDO.setStatus(jobStatusState.getState().getCode());
productionreceiptJobMainDO.setAcceptUserId(null);
productionreceiptJobMainDO.setAcceptUserName(null);
productionreceiptJobMainDO.setAcceptTime(null);
trendsApi.createTrends(id, "productionreceiptJob", "取消了生产收料任务", TrendsTypeEnum.UPDATE);
return productionreceiptJobMainMapper.updateById(productionreceiptJobMainDO);
}
@Override
@Transactional
public Integer closeProductionreceiptJobMain(Long id) {
ProductionreceiptJobMainDO productionreceiptJobMainDO = this.validateProductionreceiptJobMainExists(id);
JobStatusState jobStatusState = new JobStatusState(productionreceiptJobMainDO.getStatus());
if(!jobStatusState.close()) {
throw exception(PRODUCTIONRECEIPT_JOB_MAIN_STATUS_ERROR);
}
productionreceiptJobMainDO.setStatus(jobStatusState.getState().getCode());
trendsApi.createTrends(id, "productionreceiptJob", "关闭了生产收料任务", TrendsTypeEnum.UPDATE);
return productionreceiptJobMainMapper.updateById(productionreceiptJobMainDO);
}
@Override
@Transactional
public Integer executeProductionreceiptJobMain(ProductionreceiptJobMainUpdateReqVO updateReqVO) {
//查询数据
ProductionreceiptJobMainDO productionreceiptJobMainDO = this.validateProductionreceiptJobMainExists(updateReqVO.getId());
List<ProductionreceiptJobDetailDO> subList = productionreceiptJobDetailService.selectList(productionreceiptJobMainDO.getId());
JobStatusState jobStatusState = new JobStatusState(productionreceiptJobMainDO.getStatus());
boolean flag = jobStatusState.execute();
if(!flag) {
throw new ServiceException(PRODUCTIONRECEIPT_JOB_MAIN_STATUS_ERROR);
}
//更新完成信息
Long userId = getLoginUserId();
AdminUserRespDTO userRespDTO = userApi.getUser(userId);
productionreceiptJobMainDO.setStatus(jobStatusState.getState().getCode());
productionreceiptJobMainDO.setCompleteTime(LocalDateTime.now());
productionreceiptJobMainDO.setCompleteUserId(String.valueOf(userRespDTO.getId()));
productionreceiptJobMainDO.setCompleteUserName(userRespDTO.getNickname());
//更新任务表状态
int result = productionreceiptJobMainMapper.updateById(productionreceiptJobMainDO);
//创建 生产收料记录 主表
ProductionreceiptRecordMainDO productionreceiptRecordMainDO = new ProductionreceiptRecordMainDO();
BeanUtils.copyProperties(productionreceiptJobMainDO, productionreceiptRecordMainDO);
String number = serialNumberApi.generateCode(RuleCodeEnum.PRODUCTION_RECEIPT_RECORD.getCode());
productionreceiptRecordMainDO.setNumber(number);
productionreceiptRecordMainDO.setIssueRecordNumber(productionreceiptJobMainDO.getIssueRecordNumber());
productionreceiptRecordMainDO.setJobNumber(productionreceiptJobMainDO.getNumber());
productionreceiptRecordMainDO.setExecuteTime(LocalDateTime.now());
productionreceiptRecordMainDO.setActiveDate(LocalDateTime.now());
productionreceiptRecordMainDO.setDueTime(productionreceiptJobMainDO.getRequestDueTime());
//增加业务类型
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("IssueJob");
productionreceiptRecordMainDO.setOutTransactionType(businesstypeDO.getOutTransactionType());
productionreceiptRecordMainDO.setInTransactionType(businesstypeDO.getInTransactionType());
productionreceiptRecordMainDO.setBusinessType(businesstypeDO.getCode());
productionreceiptRecordMainDO.setId(null);
productionreceiptRecordMainDO.setCreator(null);
productionreceiptRecordMainDO.setCreateTime(null);
productionreceiptRecordMainDO.setUpdater(null);
productionreceiptRecordMainDO.setUpdateTime(null);
productionreceiptRecordMainMapper.insert(productionreceiptRecordMainDO);
// 获取参数中的sublist
List<ProductionreceiptJobDetailUpdateReqVO> productionreceiptJobDetailUpdateReqVOList = updateReqVO.getSubList();
//发料记录子
List<ProductionreceiptRecordDetailDO> productionreceiptRecordDetailDOList = new ArrayList<>();
//库存事务
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>();
subList.forEach(subListItem -> {
// 获取参数中recordLst
productionreceiptJobDetailUpdateReqVOList.forEach(DetailUpdateItem -> {
// 匹配任务子表与参数中子表
if (DetailUpdateItem.getId().equals(subListItem.getId())) {
ProductionreceiptRecordDetailDO productionreceiptRecordDetailDO = new ProductionreceiptRecordDetailDO();
BeanUtils.copyProperties(subListItem, productionreceiptRecordDetailDO);
productionreceiptRecordDetailDO.setNumber(number);
productionreceiptRecordDetailDO.setMasterId(productionreceiptRecordMainDO.getId());
productionreceiptRecordDetailDO.setFromPackingNumber(subListItem.getPackingNumber());
productionreceiptRecordDetailDO.setFromBatch(subListItem.getBatch());
productionreceiptRecordDetailDO.setFromLocationCode(subListItem.getFromLocationCode());
productionreceiptRecordDetailDO.setFromContainerNumber(subListItem.getContainerNumber());
// 根据前端参数赋值
productionreceiptRecordDetailDO.setToPackingNumber(DetailUpdateItem.getToPackingNumber());
productionreceiptRecordDetailDO.setToBatch(DetailUpdateItem.getToBatch());
productionreceiptRecordDetailDO.setToLocationCode(DetailUpdateItem.getToLocationCode());
productionreceiptRecordDetailDO.setToContainerNumber(DetailUpdateItem.getToContainerNumber());
productionreceiptRecordDetailDO.setInventoryStatus(DetailUpdateItem.getToInventoryStatus());
productionreceiptRecordDetailDO.setQty(DetailUpdateItem.getHandleQty());
// 根据 to库位 查询 库位组 库区
LocationDO locationDO = locationService.selectLocation(DetailUpdateItem.getToLocationCode());
productionreceiptRecordDetailDO.setToLocationGroupCode(locationDO.getLocationGroupCode());
productionreceiptRecordDetailDO.setToAreaCode(locationDO.getAreaCode());
// 根据 from库位 查询 库位组 库区
LocationDO locationDOFrom = locationService.selectLocation(subListItem.getFromLocationCode());
productionreceiptRecordDetailDO.setFromLocationGroupCode(locationDOFrom.getLocationGroupCode());
productionreceiptRecordDetailDO.setFromAreaCode(locationDOFrom.getAreaCode());
productionreceiptRecordDetailDO.setId(null);
productionreceiptRecordDetailDO.setCreator(null);
productionreceiptRecordDetailDO.setCreateTime(null);
productionreceiptRecordDetailDO.setUpdater(null);
productionreceiptRecordDetailDO.setUpdateTime(null);
productionreceiptRecordDetailDOList.add(productionreceiptRecordDetailDO);
//添加库存事务list
TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO();
BeanUtils.copyProperties(productionreceiptRecordDetailDO, transactionCreateReqVO);
TransactiontypeDO transactiontypeDO = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType());
transactionCreateReqVO.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId()));
transactionCreateReqVO.setInventoryAction(transactiontypeDO.getInventoryAction());
transactionCreateReqVO.setTransactionType(transactiontypeDO.getCode());
transactionCreateReqVO.setBusinessType(productionreceiptRecordMainDO.getBusinessType());
transactionCreateReqVO.setOwnerCode(productionreceiptRecordDetailDO.getFromOwnerCode());
transactionCreateReqVO.setRecordNumber(number);
transactionCreateReqVO.setId(null);
transactionCreateReqVO.setPackingNumber(productionreceiptRecordDetailDO.getToPackingNumber());
transactionCreateReqVO.setBatch(productionreceiptRecordDetailDO.getToBatch());
transactionCreateReqVO.setContainerNumber(productionreceiptRecordDetailDO.getToContainerNumber());
transactionCreateReqVO.setAmount(BigDecimal.ZERO);
transactionCreateReqVO.setLocationCode(productionreceiptRecordDetailDO.getToLocationCode());
transactionCreateReqVOList.add(transactionCreateReqVO);
}
});
});
if(!productionreceiptRecordDetailDOList.isEmpty()) {
productionreceiptRecordDetailMapper.insertBatch(productionreceiptRecordDetailDOList);
}
//增加库存事务
transactionService.createTransaction(transactionCreateReqVOList);
//移除预计入
expectinService.deleteExpectinByJobNumber(productionreceiptJobMainDO.getNumber());
//变更记录
trendsApi.createTrends(productionreceiptJobMainDO.getId(), "productionreceiptJob", "执行了生产收料任务", TrendsTypeEnum.UPDATE);
return result;
}
}

Loading…
Cancel
Save