|
|
@ -1,23 +1,59 @@ |
|
|
|
package com.win.module.wms.service.productdismantleRecord; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
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.productdismantleRecord.vo.ProductdismantleRecordMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productdismantleRecord.vo.ProductdismantleRecordMainExportReqVO; |
|
|
|
import com.win.module.wms.controller.productdismantleRecord.vo.ProductdismantleRecordMainPageReqVO; |
|
|
|
import com.win.module.wms.controller.productdismantleRecord.vo.ProductdismantleRecordMainUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; |
|
|
|
import com.win.module.wms.convert.productdismantleRecord.ProductdismantleRecordDetailaConvert; |
|
|
|
import com.win.module.wms.convert.productdismantleRecord.ProductdismantleRecordMainConvert; |
|
|
|
import com.win.module.wms.convert.repleinshRecord.RepleinshRecordDetailConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productdismantleRecord.ProductdismantleRecordDetailaDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productdismantleRecord.ProductdismantleRecordDetailbDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productdismantleRecord.ProductdismantleRecordMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productdismantleRequest.ProductdismantleRequestDetailaDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productdismantleRequest.ProductdismantleRequestDetailbDO; |
|
|
|
import com.win.module.wms.dal.dataobject.recordsetting.RecordsettingDO; |
|
|
|
import com.win.module.wms.dal.dataobject.repleinshRecord.RepleinshRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; |
|
|
|
import com.win.module.wms.dal.mysql.productdismantleRecord.ProductdismantleRecordDetailaMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productdismantleRecord.ProductdismantleRecordDetailbMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productdismantleRecord.ProductdismantleRecordMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.productdismantleRequest.ProductdismantleRequestDetailbMapper; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
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.service.workstation.WorkstationService; |
|
|
|
import com.win.module.wms.util.JobUtils; |
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTDISMANTLE_RECORD_MAIN_NOT_EXISTS; |
|
|
|
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* 制品拆解记录主 Service 实现类 |
|
|
@ -28,16 +64,140 @@ import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTDISMANTLE_RECOR |
|
|
|
@Validated |
|
|
|
public class ProductdismantleRecordMainServiceImpl implements ProductdismantleRecordMainService { |
|
|
|
|
|
|
|
@Resource |
|
|
|
private ProductdismantleRecordDetailbMapper productdismantleRecordDetailbMapper; |
|
|
|
@Resource |
|
|
|
private WorkstationService workstationService; |
|
|
|
@Resource |
|
|
|
private ProductdismantleRequestDetailbMapper productdismantleRequestDetailbMapper; |
|
|
|
@Resource |
|
|
|
private ProductdismantleRecordDetailaMapper productdismantleRecordDetailaMapper; |
|
|
|
@Resource |
|
|
|
private TransactionService transactionService; |
|
|
|
@Resource |
|
|
|
private ItembasicService itembasicService; |
|
|
|
@Resource |
|
|
|
private LocationService locationService; |
|
|
|
@Resource |
|
|
|
private RecordsettingService recordsettingService; |
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
@Resource |
|
|
|
private JobUtils jobUtils; |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
@Resource |
|
|
|
private AdminUserApi userApi; |
|
|
|
@Resource |
|
|
|
private ProductdismantleRecordMainMapper productdismantleRecordMainMapper; |
|
|
|
|
|
|
|
@Override |
|
|
|
public Long createProductdismantleRecordMain(ProductdismantleRecordMainCreateReqVO createReqVO) { |
|
|
|
@Transactional |
|
|
|
public String createProductdismantleRecordMain(ProductdismantleRecordMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
|
ProductdismantleRecordMainDO productdismantleRecordMain = ProductdismantleRecordMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
productdismantleRecordMainMapper.insert(productdismantleRecordMain); |
|
|
|
AdminUserRespDTO userRespDTO = userApi.getUser(getLoginUserId()); |
|
|
|
ProductdismantleRecordMainDO mainDO = ProductdismantleRecordMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
List<ProductdismantleRecordDetailaDO> subDOList = ProductdismantleRecordDetailaConvert.INSTANCE.convertList03(createReqVO.getSubList()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.REPLEINMENT_RECORD.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
mainDO.setDepartmentCode(String.valueOf(userRespDTO.getDeptId())); |
|
|
|
mainDO.setExecuteTime(LocalDateTime.now()); |
|
|
|
mainDO.setActiveDate(LocalDateTime.now()); |
|
|
|
mainDO.setAvailable("TRUE"); |
|
|
|
// 业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductDisassemble"); |
|
|
|
mainDO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
mainDO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
mainDO.setOutTransactionType(businesstypeDO.getOutTransactionType()); |
|
|
|
mainDO.setInTransactionType(businesstypeDO.getInTransactionType()); |
|
|
|
mainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
// 接口类型
|
|
|
|
RecordsettingDO recordsettingDO = recordsettingService.selectRecordsettingExist("ProductDisassembleRecord"); |
|
|
|
mainDO.setInterfaceType(recordsettingDO.getInterfaceType()); |
|
|
|
productdismantleRecordMainMapper.insert(mainDO); |
|
|
|
//库存事务
|
|
|
|
List<TransactionCreateReqVO> transactionCreateReqVOList = new ArrayList<>(); |
|
|
|
// 子表b 集合
|
|
|
|
List<ProductdismantleRecordDetailbDO> detailbDOList = new ArrayList<>(); |
|
|
|
for(ProductdismantleRecordDetailaDO productdismantleRecordDetailaDO : subDOList) { |
|
|
|
LocationDO locationDO = locationService.selectLocation(productdismantleRecordDetailaDO.getFromLocationCode()); |
|
|
|
productdismantleRecordDetailaDO.setFromAreaCode(locationDO.getAreaCode()); |
|
|
|
productdismantleRecordDetailaDO.setFromLocationGroupCode(locationDO.getLocationGroupCode()); |
|
|
|
productdismantleRecordDetailaDO.setMasterId(mainDO.getId()); |
|
|
|
productdismantleRecordDetailaMapper.insert(productdismantleRecordDetailaDO); |
|
|
|
//添加库存事务list
|
|
|
|
// 出动作
|
|
|
|
TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(productdismantleRecordDetailaDO, 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(mainDO.getBusinessType()); |
|
|
|
transactionCreateReqVOOut.setOwnerCode(productdismantleRecordDetailaDO.getFromOwnerCode()); |
|
|
|
transactionCreateReqVOOut.setRecordNumber(number); |
|
|
|
transactionCreateReqVOOut.setId(null); |
|
|
|
transactionCreateReqVOOut.setPackingNumber(productdismantleRecordDetailaDO.getPackingNumber()); |
|
|
|
transactionCreateReqVOOut.setBatch(productdismantleRecordDetailaDO.getBatch()); |
|
|
|
transactionCreateReqVOOut.setContainerNumber(productdismantleRecordDetailaDO.getContainerNumber()); |
|
|
|
transactionCreateReqVOOut.setAmount(BigDecimal.ZERO); |
|
|
|
transactionCreateReqVOOut.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVOOut.setLocationCode(productdismantleRecordDetailaDO.getFromLocationCode()); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVOOut); |
|
|
|
// 根据申请子表a id 查询 申请 子表b
|
|
|
|
QueryWrapper queryWrapper = new QueryWrapper(); |
|
|
|
queryWrapper.eq("master_id", productdismantleRecordDetailaDO.getId().toString()); |
|
|
|
List<ProductdismantleRequestDetailbDO> productdismantleRequestDetailbDOList = productdismantleRequestDetailbMapper.selectList(queryWrapper); |
|
|
|
for(ProductdismantleRequestDetailbDO productdismantleRequestDetailbDO:productdismantleRequestDetailbDOList) { |
|
|
|
ProductdismantleRecordDetailbDO productdismantleRecordDetailbDO = new ProductdismantleRecordDetailbDO(); |
|
|
|
BeanUtils.copyProperties(productdismantleRequestDetailbDO, productdismantleRecordDetailbDO); |
|
|
|
productdismantleRecordDetailbDO.setMasterId(productdismantleRecordDetailaDO.getId()); |
|
|
|
productdismantleRecordDetailbDO.setNumber(productdismantleRecordDetailaDO.getNumber()); |
|
|
|
productdismantleRecordDetailbDO.setBatch("000000"); |
|
|
|
productdismantleRecordDetailbDO.setPackingNumber(""); |
|
|
|
productdismantleRecordDetailbDO.setInventoryStatus("OK"); |
|
|
|
// 根据成品物品 对应工位 查询 原料库位
|
|
|
|
WorkstationDO workstationDO = workstationService.selectWorkstationExist(productdismantleRecordDetailaDO.getWorkStationCode(),mainDO.getWorkshopCode(),productdismantleRecordDetailaDO.getProductionLineCode()); |
|
|
|
productdismantleRecordDetailbDO.setToLocationCode(workstationDO.getRawLocationCode()); |
|
|
|
LocationDO locationDODetailb = locationService.selectLocation(workstationDO.getRawLocationCode()); |
|
|
|
productdismantleRecordDetailbDO.setToAreaCode(locationDODetailb.getAreaCode()); |
|
|
|
productdismantleRecordDetailbDO.setToLocationGroupCode(locationDODetailb.getLocationGroupCode()); |
|
|
|
productdismantleRecordDetailbDO.setId(null); |
|
|
|
productdismantleRecordDetailbDO.setCreateTime(null); |
|
|
|
productdismantleRecordDetailbDO.setCreator(null); |
|
|
|
productdismantleRecordDetailbDO.setUpdateTime(null); |
|
|
|
productdismantleRecordDetailbDO.setUpdater(null); |
|
|
|
detailbDOList.add(productdismantleRecordDetailbDO); |
|
|
|
//添加库存事务list
|
|
|
|
// 入动作
|
|
|
|
TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(productdismantleRecordDetailbDO, 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(mainDO.getBusinessType()); |
|
|
|
transactionCreateReqVO.setOwnerCode(""); |
|
|
|
transactionCreateReqVO.setRecordNumber(number); |
|
|
|
transactionCreateReqVO.setId(null); |
|
|
|
transactionCreateReqVO.setPackingNumber(productdismantleRecordDetailbDO.getPackingNumber()); |
|
|
|
transactionCreateReqVO.setBatch(productdismantleRecordDetailbDO.getBatch()); |
|
|
|
transactionCreateReqVO.setContainerNumber(""); |
|
|
|
transactionCreateReqVO.setAmount(BigDecimal.ZERO); |
|
|
|
transactionCreateReqVO.setWarehouseCode(mainDO.getFromWarehouseCode()); |
|
|
|
transactionCreateReqVO.setLocationCode(productdismantleRecordDetailbDO.getToLocationCode()); |
|
|
|
transactionCreateReqVOList.add(transactionCreateReqVO); |
|
|
|
} |
|
|
|
} |
|
|
|
if (detailbDOList != null && detailbDOList.size() > 0) { |
|
|
|
productdismantleRecordDetailbMapper.insertBatch(detailbDOList); |
|
|
|
} |
|
|
|
//增加库存事务
|
|
|
|
transactionService.createTransaction(transactionCreateReqVOList); |
|
|
|
//增加操作记录
|
|
|
|
trendsApi.createTrends(mainDO.getId(), "productdismantleRecordMain", "增加了制品拆解记录", TrendsTypeEnum.CREATE); |
|
|
|
// 返回
|
|
|
|
return productdismantleRecordMain.getId(); |
|
|
|
return mainDO.getNumber(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|