订单管理相关

This commit is contained in:
潘荣晟
2025-10-15 17:28:53 +08:00
parent 979acacd27
commit e5acac8fe3
13 changed files with 155 additions and 14 deletions

View File

@@ -14,5 +14,5 @@ public interface ErrorCodeConstants {
ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_001, "采购订单不存在");
ErrorCode ORDER_ID_NOT_EXISTS = new ErrorCode(1_008_000_010, "订单id不能为空");
ErrorCode PRCH_ORD_DTL_NOT_EXISTS = new ErrorCode(1_008_001_001, "采购订单明细不存在");
ErrorCode PURCHASE_ORDER_STATUS_ERROR = new ErrorCode(1_008_001_020, "订单状态不存在");
ErrorCode PURCHASE_ORDER_STATUS_ERROR = new ErrorCode(1_008_001_020, "非法的订单状态");
}

View File

@@ -127,7 +127,7 @@ public class PurchaseOrderController implements BusinessControllerMarker {
@PostMapping("/submit-erp061")
@Operation(summary = "推送ERP订单", description = "061')")
@PreAuthorize("@ss.hasPermission('bse:purchase-order:update')")
public CommonResult<?> submitErp061(@RequestBody @Validated @NotNull(message = "采购订单id不能为空") List<Long> ids) {
public CommonResult<?> submitErp061(@RequestBody @Validated @NotEmpty(message = "采购订单id不能为空") List<Long> ids) {
return success( purchaseOrderService.submitErp061(ids));
}
@PostMapping("/submit-erp062")
@@ -145,9 +145,17 @@ public class PurchaseOrderController implements BusinessControllerMarker {
}
//根据订单id修改订单状态
@PutMapping("/update-order-status")
@Operation(summary = "根据订单id修改订单状态", description = "sts取值于字典名称'采购订单状态',字典类型'PRCH_ORD_STS'`")
public CommonResult<Boolean> updateOrderStatus(@RequestParam("orderId") Long orderId, @RequestParam("sts") String sts){
return success(purchaseOrderService.updateOrderStatus(orderId,sts));
@Operation(summary = "批量修改订单状态", description = "sts取值于字典名称'采购订单状态',字典类型'PRCH_ORD_STS' 可以根据订单号和订单id修改")
public CommonResult<Boolean> updateOrderStatus(@RequestBody @Validated PurchaseOrderStsReqVO req){
purchaseOrderService.updateOrderStatusByIdOrOrderNo(req);
return success(true);
}
//查询物料接口
@GetMapping("/material")
@Operation(summary = "查询物料接口")
public CommonResult<MaterialRespVO> getMaterialList(@RequestParam @Validated @NotEmpty(message = "采购订单号不能为空") String orderNo){
return purchaseOrderService.getMaterial(orderNo);
}
}

View File

@@ -0,0 +1,34 @@
package com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@Schema(description = "管理后台 - 物料响应 VO")
public class MaterialRespVO {
@Schema(description = "订单号")
private String orderNo;
@Schema(description = "订单id")
private String id;
@Schema(description = "物料类型")
private String materialType;
@Schema(description = "物料单位")
private String materialUnit;
@Schema(description = "物料明细")
private List<MaterialDetails> materialDetails;
@Data
public static class MaterialDetails {
@Schema(description = "物料名称")
private String materialName;
@Schema(description = "物料编码")
private String materialCode;
@Schema(description = "物料类型")
private String materialType;
@Schema(description = "物料单位")
private String materialUnit;
}
}

View File

@@ -0,0 +1,23 @@
package com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 采购订单状态 Request VO")
@Data
@ExcelIgnoreUnannotated
public class PurchaseOrderStsReqVO {
@Schema(description = "采购订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26419")
private List<Long> ids;
@Schema(description = "采购订单状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotEmpty(message = "采购订单状态不能为空")
private String sts;
@Schema(description = "采购订单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private List<String> orderNos;
}

View File

@@ -89,7 +89,7 @@ public class PrchOrdDtlDO extends BusinessBaseDO {
* 计量单位;推送ERP必须
*/
@TableField("UNT")
private BigDecimal unt;
private String unt;
/**
* 含税单价;推送ERP必须
*/

View File

@@ -238,6 +238,11 @@ public class PurchaseOrderDO extends BusinessBaseDO {
@TableField("IS_PUSH")
private int isPush;
/**
* 计量单位
*/
@TableField("UNT")
private String unt;
/**
* 物料字典

View File

@@ -75,4 +75,6 @@ public interface PrchOrdDtlService {
* @param ordIds 编号
*/
void deletePrchOrdDtlListByOrdIds(List<Long> ordIds);
List<PrchOrdDtlDO> getDetailsByOrderId(Long ordId);
}

View File

@@ -113,4 +113,10 @@ public class PrchOrdDtlServiceImpl implements PrchOrdDtlService {
deletePrchOrdDtlListByIds(convertList(prchOrdDtlDOS, PrchOrdDtlDO::getId));
}
@Override
public List<PrchOrdDtlDO> getDetailsByOrderId(Long ordId) {
return prchOrdDtlMapper.selectList(new LambdaQueryWrapper<>(PrchOrdDtlDO.class).eq(PrchOrdDtlDO::getOrdId, ordId));
}
}

View File

@@ -2,6 +2,7 @@ package com.zt.plat.module.contractorder.service.purchaseorder;
import java.util.*;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.*;
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
import jakarta.validation.*;
@@ -83,4 +84,7 @@ public interface PurchaseOrderService {
List<PurchaseOrderDetailsRespVO> getOrderByOrderNo(List<String> orderNo);
void setOrderDetails(PurchaseOrderRespVO purchaseOrderRespVO);
void updateOrderStatusByIdOrOrderNo(PurchaseOrderStsReqVO reqVO);
CommonResult<MaterialRespVO> getMaterial(String orderNo);
}

View File

@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
@@ -125,6 +127,12 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
prchOrdDtlService.deletePrchOrdDtlListByOrdIds(ids);
}
private void validatePurchaseOrderNosExists(List<String> orderNos){
List<PurchaseOrderDO> list = purchaseOrderMapper.selectList(new LambdaQueryWrapper<PurchaseOrderDO>().in(PurchaseOrderDO::getSystemOrderNumber, orderNos));
if (CollUtil.isEmpty(list) || list.size() != orderNos.size()) {
throw exception(PURCHASE_ORDER_NOT_EXISTS);
}
}
private void validatePurchaseOrderExists(List<Long> ids) {
List<PurchaseOrderDO> list = purchaseOrderMapper.selectByIds(ids);
@@ -317,6 +325,62 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
purchaseOrderRespVO.setPrchOrdDtlRespVOS(BeanUtils.toBean(prchOrdDtlDOS, PrchOrdDtlRespVO.class));
}
@Override
public void updateOrderStatusByIdOrOrderNo(PurchaseOrderStsReqVO reqVO) {
// 校验存在
if (reqVO.getIds()!=null){
validatePurchaseOrderExists(reqVO.getIds());
}
if (reqVO.getOrderNos()!=null){
validatePurchaseOrderNosExists(reqVO.getOrderNos());
}
PurchaseOrderStatusEnum byCode = PurchaseOrderStatusEnum.getByCode(reqVO.getSts());
if (byCode == null) {
throw exception(PURCHASE_ORDER_STATUS_ERROR);
}
purchaseOrderMapper.update(new LambdaUpdateWrapper<PurchaseOrderDO>().in(reqVO.getOrderNos()!=null,PurchaseOrderDO::getSystemOrderNumber, reqVO.getOrderNos()).in(reqVO.getIds()!=null,PurchaseOrderDO::getId, reqVO.getIds()).set(PurchaseOrderDO::getStatus, reqVO.getSts()));
}
@Override
public CommonResult<MaterialRespVO> getMaterial(String orderNo) {
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(new LambdaQueryWrapper<PurchaseOrderDO>().eq(PurchaseOrderDO::getSystemOrderNumber, orderNo));
if (purchaseOrderDO == null){
throw exception(PURCHASE_ORDER_NOT_EXISTS);
}
String mtrlTp = purchaseOrderDO.getMtrlTp();
if ("RAW".equals(mtrlTp)){
//原料
MaterialRespVO materialRespVO = new MaterialRespVO();
materialRespVO.setMaterialType(mtrlTp);
materialRespVO.setMaterialUnit(purchaseOrderDO.getUnt());
materialRespVO.setOrderNo(purchaseOrderDO.getSystemOrderNumber());
MaterialRespVO.MaterialDetails materialDetails = new MaterialRespVO.MaterialDetails();
materialDetails.setMaterialCode(purchaseOrderDO.getMaterialNumber());
materialDetails.setMaterialName(purchaseOrderDO.getMaterialName());
materialDetails.setMaterialUnit(purchaseOrderDO.getUnt());
materialDetails.setMaterialType(purchaseOrderDO.getMtrlTp());
materialRespVO.setMaterialDetails(List.of(materialDetails));
return CommonResult.success(materialRespVO);
}else {
List<PrchOrdDtlDO> detailsByOrderIds = prchOrdDtlService.getDetailsByOrderId(purchaseOrderDO.getId());
MaterialRespVO materialRespVO = new MaterialRespVO();
materialRespVO.setMaterialType(mtrlTp);
materialRespVO.setMaterialUnit(purchaseOrderDO.getUnt());
materialRespVO.setId(String.valueOf(purchaseOrderDO.getId()));
materialRespVO.setOrderNo(purchaseOrderDO.getSystemOrderNumber());
materialRespVO.setMaterialDetails(detailsByOrderIds.stream().map(prchOrdDtlDO -> {
MaterialRespVO.MaterialDetails materialDetails = new MaterialRespVO.MaterialDetails();
materialDetails.setMaterialCode(prchOrdDtlDO.getMtrlNum());
materialDetails.setMaterialName(prchOrdDtlDO.getMtrlName());
materialDetails.setMaterialUnit(prchOrdDtlDO.getUnt());
materialDetails.setMaterialType(purchaseOrderDO.getMtrlTp());
return materialDetails;
}).toList());
return CommonResult.success(materialRespVO);
}
}
private void setValue(ErpOrderUpdateReqVO erpOrderUpdateReqVO, PurchaseOrderWithDetailsVO purchaseOrderWithDetailsVO) {
//head
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectById(purchaseOrderWithDetailsVO.getPurchaseOrder().getId());
@@ -328,13 +392,9 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
//itex
setItex(erpOrderUpdateReqVO, purchaseOrderWithDetailsVO);
//acct
// 使用FastJSON2直接将List转换为JSONArray
// acct部分转换List为JSONArray
List<JSONObject> actsCtgrDtlList = purchaseOrderWithDetailsVO.getOrderDetails().stream()
.map(PrchOrdDtlDO::getActsCtgrDtl).map(JSONObject::parseObject)
.toList();
// 直接使用FastJSON2将List转换为JSONArray关键优化点
JSONArray jsonArray = JSONArray.from(actsCtgrDtlList);
// 设置到对象中
@@ -374,7 +434,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
});
erpOrderUpdateReqVO.setItexs(itexs);
}
private String generateOrderNumber(String materialType) {
return sequenceApi.getNextSequence("PURCHASE_ORDER_NUMBER", null, null).getData();
}

View File

@@ -221,7 +221,7 @@
<select id="selectByOrderId"
resultType="com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO">
select * from bse_prch_ord;
select * from bse_prch_ord where sys_ord_num =#{orderId};
</select>