Browse Source

采购计划生成采购申请。

master
刘忱 2 years ago
parent
commit
8eea017026
  1. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countPlan/vo/CountPlanDetailBaseVO.java
  2. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainBaseVO.java
  3. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainExcelVO.java
  4. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainExportReqVO.java
  5. 11
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainPageReqVO.java
  6. 15
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countRequest/CountRequestMainDO.java
  7. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/countRequest/CountRequestMainMapper.java
  8. 15
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/plan/PlanStatusState.java
  9. 108
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java
  10. 37
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRequest/CountRequestMainServiceImpl.java
  11. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverPlan/DeliverPlanMainServiceImpl.java

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countPlan/vo/CountPlanDetailBaseVO.java

@ -1,5 +1,7 @@
package com.win.module.wms.controller.countPlan.vo;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.module.wms.enums.DictTypeConstants;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainBaseVO.java

@ -19,9 +19,6 @@ public class CountRequestMainBaseVO {
@Schema(description = "id", example = "id")
private Long id;
@Schema(description = "申请单号")
private String requestNumber;
@OnlyOne
@Schema(description = "计划单号")
private String planNumber;

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainExcelVO.java

@ -18,9 +18,6 @@ import java.time.LocalDateTime;
@Data
public class CountRequestMainExcelVO {
@ExcelProperty("申请单号")
private String requestNumber;
@ExcelProperty("计划单号")
private String planNumber;

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainExportReqVO.java

@ -1,21 +1,17 @@
package com.win.module.wms.controller.countRequest.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import lombok.Data;
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 = "管理后台 - 盘点申请主 Excel 导出 Request VO,参数和 CountRequestMainPageReqVO 是一致的")
@Data
public class CountRequestMainExportReqVO {
@Schema(description = "申请单号")
private String requestNumber;
@Schema(description = "计划单号")
private String planNumber;

11
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/countRequest/vo/CountRequestMainPageReqVO.java

@ -1,10 +1,12 @@
package com.win.module.wms.controller.countRequest.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
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;
@ -15,9 +17,6 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY
@ToString(callSuper = true)
public class CountRequestMainPageReqVO extends PageParam {
@Schema(description = "申请单号")
private String requestNumber;
@Schema(description = "计划单号")
private String planNumber;

15
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countRequest/CountRequestMainDO.java

@ -1,13 +1,12 @@
package com.win.module.wms.dal.dataobject.countRequest;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sun.xml.bind.v2.TODO;
import com.win.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.win.framework.mybatis.core.dataobject.BaseDO;
/**
* 盘点申请主 DO
@ -28,10 +27,6 @@ public class CountRequestMainDO extends BaseDO {
*/
@TableId
private Long id;
/**
* 申请单号
*/
private String requestNumber;
/**
* 计划单号
*/

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/countRequest/CountRequestMainMapper.java

@ -23,7 +23,6 @@ public interface CountRequestMainMapper extends BaseMapperX<CountRequestMainDO>
default PageResult<CountRequestMainDO> selectPage(CountRequestMainPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<CountRequestMainDO>()
.eqIfPresent(CountRequestMainDO::getRequestNumber, reqVO.getRequestNumber())
.eqIfPresent(CountRequestMainDO::getPlanNumber, reqVO.getPlanNumber())
.eqIfPresent(CountRequestMainDO::getStage, reqVO.getStage())
.eqIfPresent(CountRequestMainDO::getWarehouseCode, reqVO.getWarehouseCode())
@ -64,7 +63,6 @@ public interface CountRequestMainMapper extends BaseMapperX<CountRequestMainDO>
}
default List<CountRequestMainDO> selectList(CountRequestMainExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<CountRequestMainDO>()
.eqIfPresent(CountRequestMainDO::getRequestNumber, reqVO.getRequestNumber())
.eqIfPresent(CountRequestMainDO::getPlanNumber, reqVO.getPlanNumber())
.eqIfPresent(CountRequestMainDO::getStage, reqVO.getStage())
.eqIfPresent(CountRequestMainDO::getWarehouseCode, reqVO.getWarehouseCode())

15
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/plan/PlanStatusState.java

@ -116,7 +116,7 @@ public class PlanStatusState {
* @return
*/
public boolean publish() {
if(this.planStatusEnum.getCode().equals(PlanStatusEnum.AGREED.getCode())) {
if(this.planStatusEnum.getCode().equals(PlanStatusEnum.AGREED.getCode()) || this.planStatusEnum.getCode().equals(PlanStatusEnum.PUBLISHED.getCode())) {
this.planStatusEnum = PlanStatusEnum.PUBLISHED;
return Boolean.TRUE;
} else {
@ -124,19 +124,6 @@ public class PlanStatusState {
}
}
/**
* 执行
* @return
*/
public boolean execute() {
if(this.planStatusEnum.getCode().equals(PlanStatusEnum.PUBLISHED.getCode())) {
this.planStatusEnum = PlanStatusEnum.COMPLETED;
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
/**
* 获取可执行的状态机
* @return

108
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java

@ -13,19 +13,32 @@ import com.win.module.wms.controller.countPlan.vo.CountPlanMainCreateReqVO;
import com.win.module.wms.controller.countPlan.vo.CountPlanMainExportReqVO;
import com.win.module.wms.controller.countPlan.vo.CountPlanMainPageReqVO;
import com.win.module.wms.controller.countPlan.vo.CountPlanMainUpdateReqVO;
import com.win.module.wms.controller.countRequest.vo.CountRequestDetailCreateReqVO;
import com.win.module.wms.controller.countRequest.vo.CountRequestMainCreateReqVO;
import com.win.module.wms.convert.countPlan.CountPlanDetailConvert;
import com.win.module.wms.convert.countPlan.CountPlanMainConvert;
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.countPlan.CountPlanDetailDO;
import com.win.module.wms.dal.dataobject.countPlan.CountPlanMainDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.mysql.balance.BalanceMapper;
import com.win.module.wms.dal.mysql.countPlan.CountPlanDetailMapper;
import com.win.module.wms.dal.mysql.countPlan.CountPlanMainMapper;
import com.win.module.wms.dal.mysql.countRequest.CountRequestMainMapper;
import com.win.module.wms.enums.plan.PlanStatusState;
import com.win.module.wms.service.countRequest.CountRequestMainService;
import com.win.module.wms.service.itembasic.ItembasicService;
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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -50,12 +63,20 @@ public class CountPlanMainServiceImpl implements CountPlanMainService {
private TrendsApi trendsApi;
@Resource
private SerialNumberApi serialNumberApi;
@Resource
private JobUtils jobUtils;
@Resource
private BalanceMapper balanceMapper;
@Resource
private ItembasicService itembasicService;
@Resource
private CountRequestMainService countRequestMainService;
@Override
public Long createCountPlanMain(CountPlanMainCreateReqVO createReqVO) {
// 插入
CountPlanMainDO countPlanMain = CountPlanMainConvert.INSTANCE.convert(createReqVO);
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode());
String number = serialNumberApi.generateCode(RuleCodeEnum.COUNT_PLAN.getCode());
countPlanMain.setNumber(number);
countPlanMainMapper.insert(countPlanMain);
List<CountPlanDetailDO> subDOList = CountPlanDetailConvert.INSTANCE.convertList03(createReqVO.getSubList());
@ -225,19 +246,19 @@ public class CountPlanMainServiceImpl implements CountPlanMainService {
return countPlanMainMapper.updateById(mainDO);
}
@Override
@Transactional
public Integer publishCountPlanMain(Long id) {
// 校验存在存在下级单据
CountPlanMainDO mainDO = validateCountPlanMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.execute();
boolean flag = planStatusState.publish();
if(!flag) {
throw new ServiceException(COUNT_PLAN_CANNOT_PUBLISH);
}
mainDO.setStatus(planStatusState.getState().getCode());//增加操作记录
trendsApi.createTrends(id, "countPlan", "发布了盘点计划", TrendsTypeEnum.UPDATE);
this.generateRequest(mainDO);
return countPlanMainMapper.updateById(mainDO);
}
@ -256,4 +277,85 @@ public class CountPlanMainServiceImpl implements CountPlanMainService {
return countPlanMainMapper.updateById(mainDO);
}
/**
* 生成盘点申请
* @param mainDO 盘点申请主
*/
private void generateRequest(CountPlanMainDO mainDO) {
List<CountPlanDetailDO> detailDOList = countPlanDetailMapper.selectList(mainDO.getId());
List<BalanceDO> balanceDOList = this.getBalanceDOList(detailDOList);
CountRequestMainCreateReqVO countRequestMainCreateReqVO = new CountRequestMainCreateReqVO();
countRequestMainCreateReqVO.setPlanNumber(mainDO.getNumber());
countRequestMainCreateReqVO.setStage("INITIAL_COUNT");//初盘
countRequestMainCreateReqVO.setWarehouseCode("");
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CountRequest");
countRequestMainCreateReqVO.setBusinessType(businesstypeDO.getCode());
countRequestMainCreateReqVO.setRequestTime(LocalDateTime.now());
countRequestMainCreateReqVO.setDueTime(LocalDateTime.now());
List<CountRequestDetailCreateReqVO> subList = new ArrayList<>();
for(BalanceDO balanceDO : balanceDOList) {
CountRequestDetailCreateReqVO countRequestDetailCreateReqVO = new CountRequestDetailCreateReqVO();
BeanUtils.copyProperties(balanceDO, countRequestDetailCreateReqVO);
ItembasicDO itembasicDO = itembasicService.selectItembasic(balanceDO.getItemCode());
countRequestDetailCreateReqVO.setItemName(itembasicDO.getName());
countRequestDetailCreateReqVO.setItemDesc1(itembasicDO.getDesc1());
countRequestDetailCreateReqVO.setItemDesc2(itembasicDO.getDesc2());
subList.add(countRequestDetailCreateReqVO);
}
countRequestMainCreateReqVO.setSubList(subList);
countRequestMainService.createCountRequestMain(countRequestMainCreateReqVO);
}
/**
* 根据盘点计划范围获取库存余额
* @param detailDOList 盘点计划范围
* @return
*/
private List<BalanceDO> getBalanceDOList(List<CountPlanDetailDO> detailDOList) {
QueryWrapper<BalanceDO> queryWrapper = new QueryWrapper<>();
//组装库存余额查询条件
for(CountPlanDetailDO countPlanDetailDO : detailDOList) {
List<String> paramList = new ArrayList<>(Arrays.asList(countPlanDetailDO.getValue().split(",")));
String inParams = "'" + countPlanDetailDO.getValue() + "'";
inParams = inParams.replace(",", "','");
switch (countPlanDetailDO.getType()) {
case "LOCATION_CODE" ://库位编码
queryWrapper.in("location_code", paramList);
break;
case "LOCATIONGROUP_CODE" :
queryWrapper.in("location_group_code", paramList);
break;
case "AREABASIC_CODE" :
queryWrapper.in("area_code", paramList);
break;
case "WAREHOUSE_CODE" :
queryWrapper.in("warehouse_code", paramList);
break;
case "ITEMS_CODE" :
queryWrapper.in("item_code", paramList);
break;
case "OWNER" :
queryWrapper.in("owner_code", paramList);
break;
case "PROJECT" :
queryWrapper.inSql("item_code", "SELECT `code` FROM basic_itembasic WHERE project IN(" + inParams + ") AND available='TRUE'");
break;
case "ITEMS_GROUP" :
queryWrapper.inSql("item_code", "SELECT `code` FROM basic_itembasic WHERE item_group IN(" + inParams + ") AND available='TRUE'");
break;
case "ITEMS_TYPE" :
queryWrapper.inSql("item_code", "SELECT `code` FROM basic_itembasic WHERE `type` IN(" + inParams + ") AND available='TRUE'");
break;
case "ABC" :
queryWrapper.inSql("item_code", "SELECT `code` FROM basic_itembasic WHERE abc_class IN(" + inParams + ") AND available='TRUE'");
break;
case "SUPPLIER" :
queryWrapper.inSql("item_code", "SELECT item_code FROM basic_supplieritem WHERE supplier_code IN(" + inParams + ") AND available='TRUE'");
break;
case "CUSTOMER" :
break;
}
}
return balanceMapper.selectList(queryWrapper);
}
}

37
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countRequest/CountRequestMainServiceImpl.java

@ -9,7 +9,11 @@ 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.enums.serialNumber.RuleCodeEnum;
import com.win.module.wms.controller.countRecord.vo.CountRecordDetailCreateReqVO;
import com.win.module.wms.controller.countRecord.vo.CountRecordMainCreateReqVO;
import com.win.module.wms.controller.countRequest.vo.*;
import com.win.module.wms.convert.countRecord.CountRecordDetailConvert;
import com.win.module.wms.convert.countRecord.CountRecordMainConvert;
import com.win.module.wms.convert.countRequest.CountRequestDetailConvert;
import com.win.module.wms.convert.countRequest.CountRequestMainConvert;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
@ -18,6 +22,8 @@ import com.win.module.wms.dal.dataobject.countRequest.CountRequestMainDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO;
import com.win.module.wms.dal.mysql.countJob.CountJobMainMapper;
import com.win.module.wms.dal.mysql.countRecord.CountRecordDetailMapper;
import com.win.module.wms.dal.mysql.countRecord.CountRecordMainMapper;
import com.win.module.wms.dal.mysql.countRequest.CountRequestDetailMapper;
import com.win.module.wms.dal.mysql.countRequest.CountRequestMainMapper;
import com.win.module.wms.enums.request.RequestStatusEnum;
@ -29,6 +35,7 @@ import com.win.module.wms.service.requestsetting.RequestsettingService;
import com.win.module.wms.service.shift.ShiftService;
import com.win.module.wms.service.supplieritem.SupplieritemService;
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.transaction.interceptor.TransactionAspectSupport;
@ -74,6 +81,10 @@ public class CountRequestMainServiceImpl implements CountRequestMainService {
private TrendsApi trendsApi;
@Resource
private CountJobMainMapper countJobMainMapper;
@Resource
private CountRecordMainMapper countRecordMainMapper;
@Resource
private CountRecordDetailMapper countRecordDetailMapper;
@Override
@Transactional
@ -310,12 +321,30 @@ public class CountRequestMainServiceImpl implements CountRequestMainService {
}
/**
* 生成盘点任务不要改动事务传播方式否则会有事务问题
* @param mainDO 采购收货
* @param detailDOList 采购收货
* 生成盘点任务
* @param mainDO 盘点申请
* @param detailDOList 盘点申请
*/
private void generateJob(CountRequestMainDO mainDO, List<CountRequestDetailDO> detailDOList) {
//跳过任务直接生成记录
if("TRUE".equals(mainDO.getDirectCreateRecord())) {
CountRecordMainCreateReqVO countRecordMainCreateReqVO = new CountRecordMainCreateReqVO();
BeanUtils.copyProperties(mainDO, countRecordMainCreateReqVO);
countRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber());
String number = serialNumberApi.generateCode(RuleCodeEnum.COUNT_RECORD.getCode());
countRecordMainCreateReqVO.setNumber(number);
//增加业务类型
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CountRecord");
countRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode());
countRecordMainMapper.insert(CountRecordMainConvert.INSTANCE.convert(countRecordMainCreateReqVO));
for(CountRequestDetailDO countRequestDetailDO : detailDOList) {
CountRecordDetailCreateReqVO countRecordDetailCreateReqVO = new CountRecordDetailCreateReqVO();
BeanUtils.copyProperties(countRequestDetailDO, countRecordDetailCreateReqVO);
countRecordDetailCreateReqVO.setNumber(number);
countRecordDetailMapper.insert(CountRecordDetailConvert.INSTANCE.convert(countRecordDetailCreateReqVO));
}
return;
}
}
/**

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/deliverPlan/DeliverPlanMainServiceImpl.java

@ -276,7 +276,7 @@ public class DeliverPlanMainServiceImpl implements DeliverPlanMainService {
// 校验存在存在下级单据
DeliverPlanMainDO mainDO = validateDeliverPlanMainExists(id);
PlanStatusState planStatusState = new PlanStatusState(mainDO.getStatus());
boolean flag = planStatusState.execute();
boolean flag = planStatusState.publish();
if(!flag) {
throw new ServiceException(DELIVER_PLAN_CANNOT_PUBLISH);
}

Loading…
Cancel
Save