|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|