订单管理相关
This commit is contained in:
@@ -14,5 +14,5 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_001, "采购订单不存在");
|
ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_008_000_001, "采购订单不存在");
|
||||||
ErrorCode ORDER_ID_NOT_EXISTS = new ErrorCode(1_008_000_010, "订单id不能为空");
|
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 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, "非法的订单状态");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ public class PurchaseOrderController implements BusinessControllerMarker {
|
|||||||
@PostMapping("/submit-erp061")
|
@PostMapping("/submit-erp061")
|
||||||
@Operation(summary = "推送ERP订单", description = "061')")
|
@Operation(summary = "推送ERP订单", description = "061')")
|
||||||
@PreAuthorize("@ss.hasPermission('bse:purchase-order:update')")
|
@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));
|
return success( purchaseOrderService.submitErp061(ids));
|
||||||
}
|
}
|
||||||
@PostMapping("/submit-erp062")
|
@PostMapping("/submit-erp062")
|
||||||
@@ -145,9 +145,17 @@ public class PurchaseOrderController implements BusinessControllerMarker {
|
|||||||
}
|
}
|
||||||
//根据订单id修改订单状态
|
//根据订单id修改订单状态
|
||||||
@PutMapping("/update-order-status")
|
@PutMapping("/update-order-status")
|
||||||
@Operation(summary = "根据订单id修改订单状态", description = "sts取值于字典名称'采购订单状态',字典类型'PRCH_ORD_STS'`")
|
@Operation(summary = "批量修改订单状态", description = "sts取值于字典名称'采购订单状态',字典类型'PRCH_ORD_STS' 可以根据订单号和订单id修改")
|
||||||
public CommonResult<Boolean> updateOrderStatus(@RequestParam("orderId") Long orderId, @RequestParam("sts") String sts){
|
public CommonResult<Boolean> updateOrderStatus(@RequestBody @Validated PurchaseOrderStsReqVO req){
|
||||||
return success(purchaseOrderService.updateOrderStatus(orderId,sts));
|
purchaseOrderService.updateOrderStatusByIdOrOrderNo(req);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询物料接口
|
||||||
|
@GetMapping("/material")
|
||||||
|
@Operation(summary = "查询物料接口")
|
||||||
|
public CommonResult<MaterialRespVO> getMaterialList(@RequestParam @Validated @NotEmpty(message = "采购订单号不能为空") String orderNo){
|
||||||
|
return purchaseOrderService.getMaterial(orderNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -89,7 +89,7 @@ public class PrchOrdDtlDO extends BusinessBaseDO {
|
|||||||
* 计量单位;推送ERP(必须)
|
* 计量单位;推送ERP(必须)
|
||||||
*/
|
*/
|
||||||
@TableField("UNT")
|
@TableField("UNT")
|
||||||
private BigDecimal unt;
|
private String unt;
|
||||||
/**
|
/**
|
||||||
* 含税单价;推送ERP(必须)
|
* 含税单价;推送ERP(必须)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -238,6 +238,11 @@ public class PurchaseOrderDO extends BusinessBaseDO {
|
|||||||
@TableField("IS_PUSH")
|
@TableField("IS_PUSH")
|
||||||
private int isPush;
|
private int isPush;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计量单位
|
||||||
|
*/
|
||||||
|
@TableField("UNT")
|
||||||
|
private String unt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 物料字典
|
* 物料字典
|
||||||
|
|||||||
@@ -75,4 +75,6 @@ public interface PrchOrdDtlService {
|
|||||||
* @param ordIds 编号
|
* @param ordIds 编号
|
||||||
*/
|
*/
|
||||||
void deletePrchOrdDtlListByOrdIds(List<Long> ordIds);
|
void deletePrchOrdDtlListByOrdIds(List<Long> ordIds);
|
||||||
|
|
||||||
|
List<PrchOrdDtlDO> getDetailsByOrderId(Long ordId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,4 +113,10 @@ public class PrchOrdDtlServiceImpl implements PrchOrdDtlService {
|
|||||||
deletePrchOrdDtlListByIds(convertList(prchOrdDtlDOS, PrchOrdDtlDO::getId));
|
deletePrchOrdDtlListByIds(convertList(prchOrdDtlDOS, PrchOrdDtlDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PrchOrdDtlDO> getDetailsByOrderId(Long ordId) {
|
||||||
|
|
||||||
|
return prchOrdDtlMapper.selectList(new LambdaQueryWrapper<>(PrchOrdDtlDO.class).eq(PrchOrdDtlDO::getOrdId, ordId));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.zt.plat.module.contractorder.service.purchaseorder;
|
|||||||
|
|
||||||
import java.util.*;
|
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.controller.admin.purchaseorder.vo.*;
|
||||||
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
||||||
import jakarta.validation.*;
|
import jakarta.validation.*;
|
||||||
@@ -83,4 +84,7 @@ public interface PurchaseOrderService {
|
|||||||
List<PurchaseOrderDetailsRespVO> getOrderByOrderNo(List<String> orderNo);
|
List<PurchaseOrderDetailsRespVO> getOrderByOrderNo(List<String> orderNo);
|
||||||
|
|
||||||
void setOrderDetails(PurchaseOrderRespVO purchaseOrderRespVO);
|
void setOrderDetails(PurchaseOrderRespVO purchaseOrderRespVO);
|
||||||
|
void updateOrderStatusByIdOrOrderNo(PurchaseOrderStsReqVO reqVO);
|
||||||
|
|
||||||
|
CommonResult<MaterialRespVO> getMaterial(String orderNo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
|
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
|
||||||
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
|
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
|
||||||
@@ -125,6 +127,12 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
prchOrdDtlService.deletePrchOrdDtlListByOrdIds(ids);
|
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) {
|
private void validatePurchaseOrderExists(List<Long> ids) {
|
||||||
List<PurchaseOrderDO> list = purchaseOrderMapper.selectByIds(ids);
|
List<PurchaseOrderDO> list = purchaseOrderMapper.selectByIds(ids);
|
||||||
@@ -317,6 +325,62 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
purchaseOrderRespVO.setPrchOrdDtlRespVOS(BeanUtils.toBean(prchOrdDtlDOS, PrchOrdDtlRespVO.class));
|
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) {
|
private void setValue(ErpOrderUpdateReqVO erpOrderUpdateReqVO, PurchaseOrderWithDetailsVO purchaseOrderWithDetailsVO) {
|
||||||
//head
|
//head
|
||||||
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectById(purchaseOrderWithDetailsVO.getPurchaseOrder().getId());
|
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectById(purchaseOrderWithDetailsVO.getPurchaseOrder().getId());
|
||||||
@@ -328,13 +392,9 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
//itex
|
//itex
|
||||||
setItex(erpOrderUpdateReqVO, purchaseOrderWithDetailsVO);
|
setItex(erpOrderUpdateReqVO, purchaseOrderWithDetailsVO);
|
||||||
//acct
|
//acct
|
||||||
// 使用FastJSON2直接将List转换为JSONArray
|
|
||||||
// acct部分:转换List为JSONArray
|
|
||||||
List<JSONObject> actsCtgrDtlList = purchaseOrderWithDetailsVO.getOrderDetails().stream()
|
List<JSONObject> actsCtgrDtlList = purchaseOrderWithDetailsVO.getOrderDetails().stream()
|
||||||
.map(PrchOrdDtlDO::getActsCtgrDtl).map(JSONObject::parseObject)
|
.map(PrchOrdDtlDO::getActsCtgrDtl).map(JSONObject::parseObject)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
// 直接使用FastJSON2将List转换为JSONArray(关键优化点)
|
|
||||||
JSONArray jsonArray = JSONArray.from(actsCtgrDtlList);
|
JSONArray jsonArray = JSONArray.from(actsCtgrDtlList);
|
||||||
|
|
||||||
// 设置到对象中
|
// 设置到对象中
|
||||||
@@ -374,7 +434,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
|
|||||||
});
|
});
|
||||||
erpOrderUpdateReqVO.setItexs(itexs);
|
erpOrderUpdateReqVO.setItexs(itexs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String generateOrderNumber(String materialType) {
|
private String generateOrderNumber(String materialType) {
|
||||||
return sequenceApi.getNextSequence("PURCHASE_ORDER_NUMBER", null, null).getData();
|
return sequenceApi.getNextSequence("PURCHASE_ORDER_NUMBER", null, null).getData();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,7 +221,7 @@
|
|||||||
|
|
||||||
<select id="selectByOrderId"
|
<select id="selectByOrderId"
|
||||||
resultType="com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO">
|
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>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public class ErpOrderSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "计量单位")
|
@Schema(description = "计量单位")
|
||||||
@NotNull(message = "计量单位不能为空")
|
@NotNull(message = "计量单位不能为空")
|
||||||
private BigDecimal poUnit; // MEINS UNIT3
|
private String poUnit; // MEINS UNIT3
|
||||||
|
|
||||||
@Schema(description = "含税单价")
|
@Schema(description = "含税单价")
|
||||||
@NotNull(message = "含税单价不能为空")
|
@NotNull(message = "含税单价不能为空")
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class ErpOrderUpdateReqVO {
|
|||||||
@Schema(description = "计量单位(MEINS),必须与该物料基本计量单位一致", requiredMode = Schema.RequiredMode.REQUIRED, example = "PC")
|
@Schema(description = "计量单位(MEINS),必须与该物料基本计量单位一致", requiredMode = Schema.RequiredMode.REQUIRED, example = "PC")
|
||||||
@NotEmpty(message = "计量单位不能为空")
|
@NotEmpty(message = "计量单位不能为空")
|
||||||
@ExcelProperty("计量单位")
|
@ExcelProperty("计量单位")
|
||||||
private BigDecimal po_unit;
|
private String po_unit;
|
||||||
|
|
||||||
@Schema(description = "含税单价(NETPR),保留2位小数", requiredMode = Schema.RequiredMode.REQUIRED, example = "199.99")
|
@Schema(description = "含税单价(NETPR),保留2位小数", requiredMode = Schema.RequiredMode.REQUIRED, example = "199.99")
|
||||||
@NotNull(message = "含税单价不能为空")
|
@NotNull(message = "含税单价不能为空")
|
||||||
|
|||||||
Reference in New Issue
Block a user