|
|
@ -1,27 +1,55 @@ |
|
|
|
package com.win.module.wms.service.productputawayJob; |
|
|
|
|
|
|
|
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.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.productputawayJob.vo.ProductputawayJobMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayJob.vo.ProductputawayJobMainExportReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayJob.vo.ProductputawayJobMainPageReqVO; |
|
|
|
import com.win.module.wms.controller.productputawayJob.vo.ProductputawayJobMainUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; |
|
|
|
import com.win.module.wms.convert.productputawayJob.ProductputawayJobMainConvert; |
|
|
|
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.issueRecord.IssueRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productputawayJob.ProductputawayJobDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productputawayJob.ProductputawayJobMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productputawayRecord.ProductputawayRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productputawayRecord.ProductputawayRecordMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; |
|
|
|
import com.win.module.wms.dal.mysql.productputawayJob.ProductputawayJobMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productputawayRecord.ProductputawayRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productputawayRecord.ProductputawayRecordMainMapper; |
|
|
|
import com.win.module.wms.enums.job.JobStatusState; |
|
|
|
import com.win.module.wms.service.expectin.ExpectinService; |
|
|
|
import com.win.module.wms.service.expectout.ExpectoutService; |
|
|
|
import com.win.module.wms.service.location.LocationService; |
|
|
|
import com.win.module.wms.service.recordsetting.RecordsettingService; |
|
|
|
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.module.wms.enums.ErrorCodeConstants.PRODUCTPUTAWAY_JOB_MAIN_NOT_EXISTS; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTPUTAWAY_JOB_MAIN_STATUS_ERROR; |
|
|
|
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* 制品上架任务主 Service 实现类 |
|
|
@ -32,6 +60,30 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTPUTAWAY_JOB_MAI |
|
|
|
@Validated |
|
|
|
public class ProductputawayJobMainServiceImpl implements ProductputawayJobMainService { |
|
|
|
|
|
|
|
@Resource |
|
|
|
private ExpectinService expectinService; |
|
|
|
@Resource |
|
|
|
private ExpectoutService expectoutService; |
|
|
|
@Resource |
|
|
|
private TransactionService transactionService; |
|
|
|
@Resource |
|
|
|
private ProductputawayRecordDetailMapper productputawayRecordDetailMapper; |
|
|
|
@Resource |
|
|
|
private LocationService locationService; |
|
|
|
@Resource |
|
|
|
private ProductputawayRecordMainMapper productputawayRecordMainMapper; |
|
|
|
@Resource |
|
|
|
private JobUtils jobUtils; |
|
|
|
@Resource |
|
|
|
private RecordsettingService recordsettingService; |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
@Resource |
|
|
|
private ProductputawayJobDetailService productputawayJobDetailService; |
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
|
private AdminUserApi userApi; |
|
|
|
@Resource |
|
|
|
private ProductputawayJobMainMapper productputawayJobMainMapper; |
|
|
|
|
|
|
@ -61,10 +113,12 @@ public class ProductputawayJobMainServiceImpl implements ProductputawayJobMainSe |
|
|
|
productputawayJobMainMapper.deleteById(id); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateProductputawayJobMainExists(Long id) { |
|
|
|
if (productputawayJobMainMapper.selectById(id) == null) { |
|
|
|
private ProductputawayJobMainDO validateProductputawayJobMainExists(Long id) { |
|
|
|
ProductputawayJobMainDO productputawayJobMainDO = productputawayJobMainMapper.selectById(id); |
|
|
|
if (productputawayJobMainDO == null) { |
|
|
|
throw exception(PRODUCTPUTAWAY_JOB_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
return productputawayJobMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -112,4 +166,183 @@ public class ProductputawayJobMainServiceImpl implements ProductputawayJobMainSe |
|
|
|
map.put("count", l.intValue()); |
|
|
|
return map; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<ProductputawayJobMainDO> getProductputawayJobMainList(CustomConditions conditions) { |
|
|
|
return productputawayJobMainMapper.selectSeniorList(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer acceptProductputawayJobMain(Long id) { |
|
|
|
ProductputawayJobMainDO productputawayJobMainDO = this.validateProductputawayJobMainExists(id); |
|
|
|
JobStatusState jobStatusState = new JobStatusState(productputawayJobMainDO.getStatus()); |
|
|
|
if(!jobStatusState.accept()) { |
|
|
|
throw exception(PRODUCTPUTAWAY_JOB_MAIN_STATUS_ERROR); |
|
|
|
} |
|
|
|
Long userId = getLoginUserId(); |
|
|
|
AdminUserRespDTO userRespDTO = userApi.getUser(userId); |
|
|
|
productputawayJobMainDO.setStatus(jobStatusState.getState().getCode()); |
|
|
|
productputawayJobMainDO.setAcceptUserId(String.valueOf(userId)); |
|
|
|
productputawayJobMainDO.setAcceptUserName(userRespDTO.getNickname()); |
|
|
|
productputawayJobMainDO.setAcceptTime(LocalDateTime.now()); |
|
|
|
trendsApi.createTrends(id, "productputawayJob", "承接了制品上架任务", TrendsTypeEnum.UPDATE); |
|
|
|
return productputawayJobMainMapper.updateById(productputawayJobMainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer abandonProductputawayJobMain(Long id) { |
|
|
|
ProductputawayJobMainDO productputawayJobMainDO = this.validateProductputawayJobMainExists(id); |
|
|
|
JobStatusState jobStatusState = new JobStatusState(productputawayJobMainDO.getStatus()); |
|
|
|
if(!jobStatusState.cancelAccept()) { |
|
|
|
throw exception(PRODUCTPUTAWAY_JOB_MAIN_STATUS_ERROR); |
|
|
|
} |
|
|
|
productputawayJobMainDO.setStatus(jobStatusState.getState().getCode()); |
|
|
|
productputawayJobMainDO.setAcceptUserId(null); |
|
|
|
productputawayJobMainDO.setAcceptUserName(null); |
|
|
|
productputawayJobMainDO.setAcceptTime(null); |
|
|
|
trendsApi.createTrends(id, "productputawayJob", "取消了制品上架任务", TrendsTypeEnum.UPDATE); |
|
|
|
return productputawayJobMainMapper.updateById(productputawayJobMainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer closeProductputawayJobMain(Long id) { |
|
|
|
ProductputawayJobMainDO productputawayJobMainDO = this.validateProductputawayJobMainExists(id); |
|
|
|
JobStatusState jobStatusState = new JobStatusState(productputawayJobMainDO.getStatus()); |
|
|
|
if(!jobStatusState.close()) { |
|
|
|
throw exception(PRODUCTPUTAWAY_JOB_MAIN_STATUS_ERROR); |
|
|
|
} |
|
|
|
productputawayJobMainDO.setStatus(jobStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, "productputawayJob", "关闭了制品上架任务", TrendsTypeEnum.UPDATE); |
|
|
|
return productputawayJobMainMapper.updateById(productputawayJobMainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public String executeProductputawayJobMain(ProductputawayJobMainUpdateReqVO updateReqVO) { |
|
|
|
//查询数据
|
|
|
|
ProductputawayJobMainDO productputawayJobMainDO = this.validateProductputawayJobMainExists(updateReqVO.getId()); |
|
|
|
List<ProductputawayJobDetailDO> subList = productputawayJobDetailService.selectList(productputawayJobMainDO.getId()); |
|
|
|
JobStatusState jobStatusState = new JobStatusState(productputawayJobMainDO.getStatus()); |
|
|
|
boolean flag = jobStatusState.execute(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(PRODUCTPUTAWAY_JOB_MAIN_STATUS_ERROR); |
|
|
|
} |
|
|
|
//更新完成信息
|
|
|
|
Long userId = getLoginUserId(); |
|
|
|
AdminUserRespDTO userRespDTO = userApi.getUser(userId); |
|
|
|
productputawayJobMainDO.setStatus(jobStatusState.getState().getCode()); |
|
|
|
productputawayJobMainDO.setCompletetime(LocalDateTime.now()); |
|
|
|
productputawayJobMainDO.setCompleteUserId(String.valueOf(userRespDTO.getId())); |
|
|
|
productputawayJobMainDO.setCompleteUserName(userRespDTO.getNickname()); |
|
|
|
//更新任务表状态
|
|
|
|
int result = productputawayJobMainMapper.updateById(productputawayJobMainDO); |
|
|
|
// 创建 记录 主表
|
|
|
|
ProductputawayRecordMainDO productputawayRecordMainDO = new ProductputawayRecordMainDO(); |
|
|
|
BeanUtils.copyProperties(productputawayJobMainDO, productputawayRecordMainDO); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PRODUCT_RECEIPT_RECORD.getCode()); |
|
|
|
productputawayRecordMainDO.setNumber(number); |
|
|
|
productputawayRecordMainDO.setJobNumber(productputawayJobMainDO.getNumber()); |
|
|
|
productputawayRecordMainDO.setRequestNumber(productputawayJobMainDO.getRequestNumber()); |
|
|
|
productputawayRecordMainDO.setExecuteTime(LocalDateTime.now()); |
|
|
|
productputawayRecordMainDO.setActiveDate(LocalDateTime.now()); |
|
|
|
productputawayRecordMainDO.setAvailable("TRUE"); |
|
|
|
productputawayRecordMainDO.setDueTime(productputawayJobMainDO.getRequestDueTime()); |
|
|
|
// 接口类型
|
|
|
|
productputawayRecordMainDO.setInterfaceType(recordsettingService.selectRecordsettingExist("MaterialReturnRecord").getInterfaceType()); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductPutawayRecord"); |
|
|
|
productputawayRecordMainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
|
productputawayRecordMainDO.setInTransactionType(businesstypeDO.getInTransactionType()); |
|
|
|
productputawayRecordMainDO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
productputawayRecordMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
productputawayRecordMainDO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
productputawayRecordMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
productputawayRecordMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
productputawayRecordMainDO.setId(null); |
|
|
|
productputawayRecordMainDO.setCreator(null); |
|
|
|
productputawayRecordMainDO.setCreateTime(null); |
|
|
|
productputawayRecordMainDO.setUpdater(null); |
|
|
|
productputawayRecordMainDO.setUpdateTime(null); |
|
|
|
productputawayRecordMainMapper.insert(productputawayRecordMainDO); |
|
|
|
//记录子
|
|
|
|
List<ProductputawayRecordDetailDO> productputawayRecordDetailDOList = new ArrayList<>(); |
|
|
|
//库存事务
|
|
|
|
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>(); |
|
|
|
for(ProductputawayJobDetailDO productputawayJobDetailDO :subList) { |
|
|
|
ProductputawayRecordDetailDO productputawayRecordDetailDO = new ProductputawayRecordDetailDO(); |
|
|
|
BeanUtils.copyProperties(productputawayJobDetailDO, productputawayRecordDetailDO); |
|
|
|
productputawayRecordDetailDO.setFromPackingNumber(productputawayJobDetailDO.getPackingNumber()); |
|
|
|
productputawayRecordDetailDO.setToPackingNumber(productputawayJobDetailDO.getPackingNumber()); |
|
|
|
productputawayRecordDetailDO.setFromBatch(productputawayJobDetailDO.getBatch()); |
|
|
|
productputawayRecordDetailDO.setToBatch(productputawayJobDetailDO.getBatch()); |
|
|
|
productputawayRecordDetailDO.setFromContainerNumber(productputawayJobDetailDO.getContainerNumber()); |
|
|
|
productputawayRecordDetailDO.setToContainerNumber(productputawayJobDetailDO.getContainerNumber()); |
|
|
|
// 根据 to库位 查询 库位组 库区
|
|
|
|
LocationDO locationDO = locationService.selectLocation(productputawayJobDetailDO.getToLocationCode()); |
|
|
|
productputawayRecordDetailDO.setToLocationGroupCode(locationDO.getLocationGroupCode()); |
|
|
|
productputawayRecordDetailDO.setToAreaCode(locationDO.getAreaCode()); |
|
|
|
// 根据 from库位 查询 库位组 库区
|
|
|
|
LocationDO locationDOFrom = locationService.selectLocation(productputawayJobDetailDO.getFromLocationCode()); |
|
|
|
productputawayRecordDetailDO.setFromLocationGroupCode(locationDOFrom.getLocationGroupCode()); |
|
|
|
productputawayRecordDetailDO.setFromAreaCode(locationDOFrom.getAreaCode()); |
|
|
|
productputawayRecordDetailDO.setId(null); |
|
|
|
productputawayRecordDetailDO.setCreator(null); |
|
|
|
productputawayRecordDetailDO.setCreateTime(null); |
|
|
|
productputawayRecordDetailDO.setUpdater(null); |
|
|
|
productputawayRecordDetailDO.setUpdateTime(null); |
|
|
|
productputawayRecordDetailDOList.add(productputawayRecordDetailDO); |
|
|
|
//添加库存事务list
|
|
|
|
// 入动作
|
|
|
|
TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(productputawayRecordDetailDO, 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(productputawayRecordMainDO.getBusinessType()); |
|
|
|
transactionCreateReqVO.setOwnerCode(productputawayRecordDetailDO.getToOwnerCode()); |
|
|
|
transactionCreateReqVO.setRecordNumber(number); |
|
|
|
transactionCreateReqVO.setId(null); |
|
|
|
transactionCreateReqVO.setPackingNumber(productputawayRecordDetailDO.getToPackingNumber()); |
|
|
|
transactionCreateReqVO.setBatch(productputawayRecordDetailDO.getToBatch()); |
|
|
|
transactionCreateReqVO.setContainerNumber(productputawayRecordDetailDO.getToContainerNumber()); |
|
|
|
transactionCreateReqVO.setAmount(BigDecimal.ZERO); |
|
|
|
transactionCreateReqVO.setWarehouseCode(productputawayRecordMainDO.getToWarehouseCode()); |
|
|
|
transactionCreateReqVO.setLocationCode(productputawayRecordDetailDO.getToLocationCode()); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVO); |
|
|
|
// 出动作
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(productputawayRecordDetailDO, transactionCreateReqVOOut); |
|
|
|
TransactiontypeDO transactiontypeDOOut = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
|
transactionCreateReqVOOut.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId())); |
|
|
|
transactionCreateReqVOOut.setInventoryAction(transactiontypeDOOut.getInventoryAction()); |
|
|
|
transactionCreateReqVOOut.setTransactionType(transactiontypeDOOut.getCode()); |
|
|
|
transactionCreateReqVOOut.setBusinessType(productputawayRecordMainDO.getBusinessType()); |
|
|
|
transactionCreateReqVOOut.setOwnerCode(productputawayRecordDetailDO.getFromOwnerCode()); |
|
|
|
transactionCreateReqVOOut.setRecordNumber(number); |
|
|
|
transactionCreateReqVOOut.setId(null); |
|
|
|
transactionCreateReqVOOut.setPackingNumber(productputawayRecordDetailDO.getFromPackingNumber()); |
|
|
|
transactionCreateReqVOOut.setBatch(productputawayRecordDetailDO.getFromBatch()); |
|
|
|
transactionCreateReqVOOut.setContainerNumber(productputawayRecordDetailDO.getFromContainerNumber()); |
|
|
|
transactionCreateReqVOOut.setAmount(BigDecimal.ZERO); |
|
|
|
transactionCreateReqVOOut.setWarehouseCode(productputawayRecordMainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOOut.setLocationCode(productputawayRecordDetailDO.getFromLocationCode()); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOOut); |
|
|
|
} |
|
|
|
if(productputawayRecordDetailDOList != null && productputawayRecordDetailDOList.size() > 0) { |
|
|
|
productputawayRecordDetailMapper.insertBatch(productputawayRecordDetailDOList); |
|
|
|
} |
|
|
|
//增加库存事务
|
|
|
|
transactionService.createTransaction(transactionCreateReqVOList); |
|
|
|
//移除预计入
|
|
|
|
expectinService.deleteExpectinByJobNumber(productputawayJobMainDO.getNumber()); |
|
|
|
//移除预计出
|
|
|
|
expectoutService.deleteExpectoutByJobNumber(productputawayJobMainDO.getNumber()); |
|
|
|
//变更记录
|
|
|
|
trendsApi.createTrends(productputawayJobMainDO.getId(), "productputawayJob", "执行了制品上架任务", TrendsTypeEnum.UPDATE); |
|
|
|
return number; |
|
|
|
} |
|
|
|
} |
|
|
|