Merge branch 'refs/heads/dev' into test

This commit is contained in:
liss
2025-10-16 10:31:49 +08:00
25 changed files with 214 additions and 24 deletions

View File

@@ -29,5 +29,5 @@ public interface CompanyRelativityMapper extends BaseMapperX<CompanyRelativityDO
List<CompanyRelaDeptDO> getPageByReq(CompanyRelativityPageReqVO pageReqVO);
void removeByIds(@Param("ids")List<Long> ids);
void removeByIds(@Param("ids") List<Long> ids);
}

View File

@@ -46,7 +46,7 @@
<delete id="removeByIds">
delete from SPLY_CPN_REL where ID in
<foreach item="ids" collection="list" separator="," open="(" close=")">
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>

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

@@ -98,11 +98,11 @@ public class ContractController implements BusinessControllerMarker {
return success(contractService.delete(ids));
}
// TODO
@PostMapping("/download")
@Operation(summary = "下载文件 TODO")
@Operation(summary = "下载文件")
@PreAuthorize("@ss.hasPermission('base:contract:download')")
public void download() {
public void download(@RequestBody List<Long> ids) {
contractService.download(ids);
}
// TODO

View File

@@ -32,7 +32,7 @@ public class ContractSaveReqVO {
// 基础信息
@Schema(description = "附件对象存储")
private String fileObject;
private JSONArray fileObject;
@Schema(description = "其它附件对象存储")
private JSONArray fileObjectOther;

View File

@@ -5,6 +5,7 @@ import com.zt.plat.module.contractorder.api.dto.PurchaseOrderWithDetailsDTO;
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.service.purchaseorder.PurchaseOrderService;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -127,7 +128,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 +146,21 @@ 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
@Schema(description = "采购订单号")
@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

@@ -42,7 +42,7 @@ public class PrchOrdDtlPageReqVO extends PageParam {
private String qty;
@Schema(description = "计量单位;推送ERP必须")
private BigDecimal unt;
private String unt;
@Schema(description = "含税单价;推送ERP必须")
private BigDecimal inTaxUprc;

View File

@@ -55,7 +55,7 @@ public class PrchOrdDtlRespVO {
@Schema(description = "计量单位;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("计量单位;推送ERP必须")
private BigDecimal unt;
private String unt;
@Schema(description = "含税单价;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("含税单价;推送ERP必须")

View File

@@ -51,8 +51,8 @@ public class PrchOrdDtlSaveReqVO {
private String qty;
@Schema(description = "计量单位;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "计量单位;推送ERP必须不能为空")
private BigDecimal unt;
@NotEmpty(message = "计量单位;推送ERP必须不能为空")
private String unt;
@Schema(description = "含税单价;推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "含税单价;推送ERP必须不能为空")

View File

@@ -54,6 +54,9 @@ public class PurchaseOrderPageReqVO extends PageParam {
@Schema(description = "采购组编码(字典:PRCH_GRP_TP);推送ERP必须")
private String purchaseGroup;
@Schema(description = "计量单位")
private String unt;
@Schema(description = "货币码(字典:CUR);推送ERP必须")
private String currencyNumber;

View File

@@ -65,6 +65,9 @@ public class PurchaseOrderRespVO {
@ExcelProperty("收货库位编码;推送ERP")
private String receiveWarehouseNumber;
@Schema(description = "计量单位")
private String unt;
@Schema(description = "采购组编码(字典:PRCH_GRP_TP);推送ERP必须", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("采购组编码(字典:PRCH_GRP_TP);推送ERP必须")
private String purchaseGroup;

View File

@@ -99,6 +99,11 @@ public class PurchaseOrderSaveReqVO {
// @NotEmpty(message = "订单编码不能为空")
// private String orderNumber;
@Schema(description = "计量单位")
@NotEmpty(message = "计量单位(unt)不能为空")
private String unt;
@Schema(description = "系统合同编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "系统合同编号不能为空")
private String contractNumber;

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

@@ -159,4 +159,11 @@ public interface ContractService {
* @return 关联结果
*/
Boolean relation(RelationReqVo reqVo);
/**
* 下载文件
*
* @param ids 合同ID集合
*/
void download(List<Long> ids);
}

View File

@@ -1,7 +1,9 @@
package com.zt.plat.module.contractorder.service.contract;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -29,6 +31,8 @@ import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractSaveReqVO;
import com.zt.plat.module.erp.dal.dataobject.erp.ErpContractDO;
import com.zt.plat.module.erp.service.erp.ErpCompanyService;
import com.zt.plat.module.erp.service.erp.ErpContractService;
import com.zt.plat.module.infra.api.file.FileApi;
import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
import com.zt.plat.module.system.api.user.AdminUserApi;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
@@ -96,6 +100,8 @@ public class ContractServiceImpl implements ContractService {
private ErpContractService erpContractService;
@Resource
private SystemRelativityMapper systemRelativityMapper;
@Resource
private FileApi fileApi;
@Override
public PageResult<ContractMainDO> getContractPage(ContractPageReqVO pageReqVO) {
@@ -1352,6 +1358,24 @@ public class ContractServiceImpl implements ContractService {
return insert > 0;
}
@Override
public void download(List<Long> ids) {
try {
// 遍历合同ID集合
ids.forEach(id -> {
// 查询合同信息
ContractMainDO contractMainDO = contractMainMapper.selectById(id);
JSONArray fileObjectOther = new JSONArray(contractMainDO.getFileObjectOther());
System.out.println(fileObjectOther);
CommonResult<FileRespDTO> fileRespDTOResult = fileApi
.getFile(fileObjectOther.getJSONObject(0).getLong("id"));
});
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 校验合同内容
*

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

@@ -56,6 +56,7 @@
po.UPDATE_TIME,
po.CREATOR,
po.UPDATER,
po.UNT,
po.DELETED,
pod.ID as pod_id,
pod.ORD_ID,
@@ -137,6 +138,7 @@
po.PPR_CTRT_NUM,
po.AGR_NUM,
po.RMK,
po.UNT,
po.AGT_NUM,
po.AGT_NAME,
po.CTRT_NUM,
@@ -221,7 +223,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>

View File

@@ -78,7 +78,7 @@ public class ErpOrderSaveReqVO {
@Schema(description = "计量单位")
@NotNull(message = "计量单位不能为空")
private BigDecimal poUnit; // MEINS UNIT3
private String poUnit; // MEINS UNIT3
@Schema(description = "含税单价")
@NotNull(message = "含税单价不能为空")

View File

@@ -97,7 +97,7 @@ public class ErpOrderUpdateReqVO {
@Schema(description = "计量单位MEINS必须与该物料基本计量单位一致", requiredMode = Schema.RequiredMode.REQUIRED, example = "PC")
@NotEmpty(message = "计量单位不能为空")
@ExcelProperty("计量单位")
private BigDecimal po_unit;
private String po_unit;
@Schema(description = "含税单价NETPR保留2位小数", requiredMode = Schema.RequiredMode.REQUIRED, example = "199.99")
@NotNull(message = "含税单价不能为空")