【需求】完善逻辑

dev
zengchenxi 5 months ago
parent fa09b5cba6
commit 656114307a

@ -65,6 +65,7 @@ public interface ErrorCodeConstants {
ErrorCode STORAGE_LOG_NOT_EXISTS = new ErrorCode(1_003_006, "库存日志不存在");
ErrorCode STORAGE_CHECK_NOT_EXISTS = new ErrorCode(1_003_007, "库存盘点不存在");
ErrorCode STORAGE_CHECK_MAT_NOT_EXISTS = new ErrorCode(1_003_008, "盘点物料不存在");
ErrorCode STORAGE_STOCK_QUANTITY_LACK = new ErrorCode(1_003_009, "库存数量不足");
/************订单管理***********/
ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在");

@ -25,14 +25,14 @@ public enum ChanjetInterfaceEnum {
QUERY_SALE_ORDER("/tplus/api/v2/SaleOrderOpenApi/GetVoucherDTO", "查询销售订单", QuerySaleOrderReqVO.class, ResultResVO.class),
CREATE_REPORT("/tplus/api/v2/ManufactureReportOpenApi/Create", "创建报工记录", CreateReportReqVO.class, ResultResVO.class),
DELETE_REPORT("/tplus/api/v2/ManufactureReportOpenApi/Create", "删除报工记录", DeleteReportReqVO.class, ResultResVO.class),
CREATE_STOCK_IN_ORDER("/tplus/api/v2/AdjustCostInOpenApi/Create", "创建入库单", CreateStorageReqVO.class, ResultResVO.class),
CREATE_STOCK_OUT_ORDER("/tplus/api/v2/AdjustCostOutOpenApi/Create", "创建出库单", CreateStockOutOrderReqVO.class, ResultResVO.class),
CREATE_STOCK_IN_ORDER("/tplus/api/v2/productReceive/Create", "创建入库单", CreateStorageReqVO.class, ResultResVO.class),
CREATE_STOCK_OUT_ORDER("/tplus/api/v2/materialDispatch/Create", "创建出库单", CreateStockOutOrderReqVO.class, ResultResVO.class),
CREATE_PRODUCTION_ORDER("/tplus/api/v2/ManufactureOrderOpenApi/Create", "创建生产加工单", CreateProductionOrderReqVO.class, ResultResVO.class),
AUDIT_PRODUCTION_ORDER("/tplus/api/v2/ManufactureOrderOpenApi/Audit", "审核生产加工单", AuditProductionOrderReqVO.class, ResultResVO.class),
QUERY_PRODUCTION_ORDER_LIST("/tplus/api/v2/ManufactureOrderOpenApi/FindVoucherList", "查询生产加工单", ListProductionOrderReqVO.class, ListResultResVO.class),
QUERY_BOM("/tplus/api/v2/bom/Query", "查询物料清单列表", QueryBomReqVO.class, QueryBomResVO.class),
QUERY_CURRENT_STOCK("/tplus/api/v2/currentStock/Query", "查询存货", QueryCurrentStockReqVO.class, QueryCurrentStockResVO.class),
QUERY_WAREHOUSE("/tplus/api/v2/warehouse/Query", "查询存货", QueryWarehouseReqVO.class, QueryWarehouseResVO.class),
QUERY_WAREHOUSE("/tplus/api/v2/warehouse/Query", "查询仓库", QueryWarehouseReqVO.class, QueryWarehouseResVO.class),
;
private String uri;

@ -3,7 +3,9 @@ package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author chenxi
@ -11,14 +13,18 @@ import java.util.List;
*/
@Data
@Accessors(chain = true)
public class CreateStorageInDTO {
public class CreateStockInDTO {
private Warehouse Warehouse;
private String ExternalCode;
private String VoucherDate;
private Boolean IsModifiedCode;
private String Code;
private Partner Partner;
private Map<String, String> VoucherType = new HashMap<String, String>(2){{
put("Code", "ST1002");
}};
private Map<String, String> BusiType = new HashMap<String, String>(2){{
put("Code", "03");
}};
private Warehouse Warehouse;
private String Memo;
private List<AdjustCostDetails> AdjustCostDetails;
private String ExternalCode;
private List<RDRecordDetail> RDRecordDetails;
}

@ -0,0 +1,36 @@
/**
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Auto-generated: 2024-04-20 16:43:39
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
@Accessors(chain = true)
public class CreateStockOutDTO {
private String ExternalCode;
private String VoucherDate;
private Map<String, String> VoucherType = new HashMap<String, String>(2){{
put("Code", "ST1022");
}};
private Map<String, String> BusiType = new HashMap<String, String>(2){{
put("Code", "41");
}};
private Warehouse Warehouse;
private List<RDRecordDetail> RDRecordDetails;
private String Memo;
}

@ -2,11 +2,11 @@
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.List;
import java.math.BigDecimal;
/**
* Auto-generated: 2024-04-20 16:43:39
@ -16,13 +16,8 @@ import java.util.List;
*/
@Data
@Accessors(chain = true)
public class CreateStockOutOrderDto {
private String ExternalCode;
private Date VoucherDate;
private String Memo;
private Warehouse Warehouse;
private List<AdjustCostDetails> AdjustCostDetails;
public class RDRecordDetail {
private Inventory Inventory;
private BigDecimal BaseQuantity;
}

@ -1,7 +1,7 @@
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateStockOutOrderDto;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateStockOutDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -40,5 +40,5 @@ import lombok.Data;
@AllArgsConstructor
public class CreateStockOutOrderReqVO extends AbstractChanjetContent {
private CreateStockOutOrderDto dto;
private CreateStockOutDTO dto;
}

@ -1,7 +1,7 @@
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateStorageInDTO;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateStockInDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -40,5 +40,5 @@ import lombok.Data;
@AllArgsConstructor
public class CreateStorageReqVO extends AbstractChanjetContent {
private CreateStorageInDTO dto;
private CreateStockInDTO dto;
}

@ -126,7 +126,7 @@ public class ProcessDesignRespVO {
@Schema(description = "项目状态")
private Integer planStatus;
@Schema(description = "项目状态")
private Integer spec;
@Schema(description = "规格型号")
private String spec;
}

@ -1041,25 +1041,25 @@ public class ChanjetManager {
List<StorageMatDO> matList = storageMatService.getStorageMatListByStockId(id);
if(matList.isEmpty()) return;
WarehouseDO aDo = warehouseMapper.selectById(storage.getId());
WarehouseDO aDo = warehouseMapper.selectById(storage.getWhId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
CreateStorageInDTO dto = new CreateStorageInDTO();
ArrayList<AdjustCostDetails> detailList = new ArrayList<>();
CreateStockOutDTO dto = new CreateStockOutDTO();
ArrayList<RDRecordDetail> detailList = new ArrayList<>();
dto.setExternalCode(storage.getStockNo())
.setVoucherDate(sdf.format(new Date()))
.setAdjustCostDetails(detailList)
.setRDRecordDetails(detailList)
.setWarehouse(new Warehouse(aDo.getWhNo()))
;
matList.forEach(mat -> {
AdjustCostDetails detail = new AdjustCostDetails();
detail.setAmount(mat.getStorageOkQty().intValue())
RDRecordDetail detail = new RDRecordDetail();
detail.setBaseQuantity(mat.getStorageOkQty())
.setInventory(new Inventory(mat.getProjectSubCode()));
detailList.add(detail);
});
CommonResult<ResultResVO> result = chanjetSpi.invoke(CREATE_STOCK_OUT_ORDER, new CreateStorageReqVO(dto), ResultResVO.class);
CommonResult<ResultResVO> result = chanjetSpi.invoke(CREATE_STOCK_OUT_ORDER, new CreateStockOutOrderReqVO(dto), ResultResVO.class);
if(!result.isSuccess()){
throw exception(CALL_API_ERROR);
}
@ -1079,17 +1079,17 @@ public class ChanjetManager {
WarehouseDO aDo = warehouseMapper.selectById(storage.getWhId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
CreateStorageInDTO dto = new CreateStorageInDTO();
ArrayList<AdjustCostDetails> detailList = new ArrayList<>();
CreateStockInDTO dto = new CreateStockInDTO();
ArrayList<RDRecordDetail> detailList = new ArrayList<>();
dto.setExternalCode(storage.getStockNo())
.setVoucherDate(sdf.format(new Date()))
.setAdjustCostDetails(detailList)
.setRDRecordDetails(detailList)
.setWarehouse(new Warehouse(aDo.getWhNo()))
;
matList.forEach(mat -> {
AdjustCostDetails detail = new AdjustCostDetails();
detail.setAmount(mat.getStorageOkQty().intValue())
RDRecordDetail detail = new RDRecordDetail();
detail.setBaseQuantity(mat.getStorageOkQty())
.setInventory(new Inventory(mat.getProjectSubCode()));
detailList.add(detail);
});
@ -1213,7 +1213,9 @@ public class ChanjetManager {
aDo.setWhNo(queryData.getCode())
.setWhName(queryData.getName())
.setId(queryData.getID())
.setWhStatus(queryData.getDisabled() ? ValidStatusEnum.INVALID.getCode() : ValidStatusEnum.VALID.getCode());
.setWhStatus(queryData.getDisabled() ? ValidStatusEnum.INVALID.getCode() : ValidStatusEnum.VALID.getCode())
.setCreator("1")
;
insertList.add(aDo);
}
});

@ -1,30 +1,37 @@
package com.chanko.yunxi.mes.module.biz.service.storage;
import cn.hutool.core.collection.CollUtil;
import com.chanjet.openapi.sdk.java.exception.ChanjetApiException;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.biz.controller.admin.storage.vo.StoragePageReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.storage.vo.StorageSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.storagemat.vo.StorageMatPageReqVO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.biz.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.biz.enums.CodeEnum;
import com.chanko.yunxi.mes.module.biz.enums.StockTypeEnum;
import com.chanko.yunxi.mes.module.biz.enums.StorageStatusEnum;
import com.chanko.yunxi.mes.module.biz.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.biz.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.biz.service.storagemat.StorageMatService;
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.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.biz.enums.CodeEnum.STOCK_IN;
import static com.chanko.yunxi.mes.module.biz.enums.CodeEnum.STOCK_OUT;
import static com.chanko.yunxi.mes.module.biz.enums.ErrorCodeConstants.STORAGE_NOT_EXISTS;
import static com.chanko.yunxi.mes.module.biz.enums.ErrorCodeConstants.*;
/**
* / Service
@ -44,6 +51,9 @@ public class StorageServiceImpl implements StorageService {
@Resource
private CrossOrderManager crossOrderManager;
@Resource
private StorageMatService storageMatService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createStorage(StorageSaveReqVO createReqVO) {
@ -79,6 +89,7 @@ public class StorageServiceImpl implements StorageService {
public void updateStorage(StorageSaveReqVO updateReqVO) {
// 校验存在
validateStorageExists(updateReqVO.getId());
// 更新
StorageDO updateObj = BeanUtils.toBean(updateReqVO, StorageDO.class);
storageMapper.updateById(updateObj);
@ -88,6 +99,22 @@ public class StorageServiceImpl implements StorageService {
if(updateObj.getStatus() == StorageStatusEnum.SUBMIT.getCode()){
// 数据校验
StorageMatPageReqVO reqVO = new StorageMatPageReqVO();
reqVO.setStockId(updateReqVO.getId())
.setWhId(updateReqVO.getWhId());
List<StorageMatDO> storageMatList = storageMatService.getStorageMatPage(reqVO);
if(CollUtil.isEmpty(storageMatList)) {
throw exception(STORAGE_MAT_NOT_EXISTS);
}
for (StorageMatDO storageMatDO : storageMatList) {
if(storageMatDO.getStorageOkQty().compareTo(new BigDecimal(0)) == 0
|| storageMatDO.getStockQuantity().compareTo(storageMatDO.getStorageOkQty()) < 0){
throw exception(STORAGE_STOCK_QUANTITY_LACK);
}
}
try {
crossOrderManager.createStockOutOrder(updateObj.getId());
} catch (ChanjetApiException e) {

Loading…
Cancel
Save