diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java index ff342323e..6889c728b 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java @@ -3,6 +3,7 @@ package com.mhd.system.api; import com.mhd.common.core.constant.ServiceNameConstants; import com.mhd.common.core.domain.dto.BusinessDataPushDTO; import com.mhd.common.core.web.domain.AjaxResult; +import com.mhd.system.api.domain.BusinessDocumentFeign; import com.mhd.system.api.factory.RemoteBmsFeignFallbackFactory; import com.mhd.system.api.feign.FeignAutoConfiguration; import org.springframework.cloud.openfeign.FeignClient; @@ -18,7 +19,7 @@ import java.util.Set; /** * bms财务结算系统feign调用接口 */ -@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.109:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class) public interface BmsServiceFeign { @@ -68,4 +69,17 @@ public interface BmsServiceFeign { */ @PostMapping("/businessDocumentApi/wholeRentSynchronizationZXF") public AjaxResult wholeRentSynchronizationZXF(@RequestBody BusinessDataPushDTO businessDataPushDTO); + + @PostMapping("/businessDocumentApi/feignSave") + public AjaxResult feignSaveBusinessDocument(@RequestBody BusinessDocumentFeign businessDocumentFeign); + + /** + * 根据结算对象id查询结算对象参数列表 + */ + @GetMapping("/settlementCustomersParametersApi/getListBySettlementCustomersId") + AjaxResult getListBySettlementCustomersId(@RequestParam("settlementCustomersId") Long settlementCustomersId); + + @PostMapping("/settlementCustomersApi/updatePushContractManageJobId") + AjaxResult updatePushContractManageJobId(@RequestParam("settlementCustomersId") Long settlementCustomersId, + @RequestParam("jobId") Integer jobId); } \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java index e9418197a..8a7006304 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java @@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody; import java.util.List; import java.util.concurrent.CompletableFuture; -@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class) public interface OmsServiceFeign { diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java index f9abbe1f6..1105c8faa 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java @@ -12,6 +12,8 @@ import com.mhd.common.core.domain.entity.R; import com.mhd.common.core.domain.po.SysMultistageDictPo; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.system.api.domain.ContainerFeignPO; +import com.mhd.system.api.domain.ContractManageFeignDTO; +import com.mhd.system.api.domain.ContractManageParametersFeign; import com.mhd.system.api.domain.SysDictData; import com.mhd.system.api.factory.RemoteSystemFeignFallbackFactory; import com.mhd.system.api.feign.FeignAutoConfiguration; @@ -390,4 +392,13 @@ public interface SystemServiceFeign { public AjaxResult matchForMaterialImport(@RequestParam("keyword") String keyword, @RequestParam("organizationId") Long organizationId); + + @ApiOperation("保存临时合同管理") + @PostMapping("/contractManageApi/feignSave") + public AjaxResult feignSave(@RequestBody ContractManageFeignDTO contractManageFeignDTO); + + @ApiOperation("Feign保存合约信息规则维护") + @PostMapping("/contractManageParametersApi/feignSave") + public AjaxResult feignSaveContractParameters(@RequestBody ContractManageParametersFeign contractManageParametersFeign); + } \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java index e4a817238..ba9a45148 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java @@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; -@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.30:8014",configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class) public interface WlhyServiceFeign { /** diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java index 25fd6bf71..ceaf3780b 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java @@ -21,7 +21,7 @@ import java.util.Map; * @description: TODO * @date 2024/5/10 8:58 **/ -@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE,url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class) public interface WmsServiceFeign { /** @@ -92,11 +92,11 @@ public interface WmsServiceFeign { /** - * oms下发单保存 + * oms下发单保存(返回执行结果,失败时OMS据此回滚下发标记,避免"OMS已下发/WMS无数据"的阻断) */ @ApiOperation("oms下发单保存") @PostMapping(value = "/stockInOrderApi/omsInOrderAdd") - public void omsInOrderAdd(@RequestBody StockInOrder stockInOrder); + public AjaxResult omsInOrderAdd(@RequestBody StockInOrder stockInOrder); @ApiOperation("oms取消下发单保存") @PostMapping(value = "/stockOutOrderApi/cancelExecutionOrder") @@ -119,11 +119,19 @@ public interface WmsServiceFeign { public AjaxResult checkOmsAssignInventory(@RequestBody List outMaterialDetails); /** - * oms下发单明细保存 + * oms下发单明细保存(返回执行结果,明细保存含自动审核链路,失败时OMS据此回滚) */ @ApiOperation("oms下发单明细保存") @PostMapping(value = "/stockInOrderApi/omsInOrderAddDetail") - public void omsInOrderAddDetail(@RequestBody List inMaterialDetails); + public AjaxResult omsInOrderAddDetail(@RequestBody List inMaterialDetails); + + /** + * oms取消下发入库执行单:WMS侧一个事务内逻辑删除下发链路产生的全部数据 + * (入库单/明细、收货单/明细、收货任务、收货作业单/明细、质检单),已开始收货则报错拦截 + */ + @ApiOperation("oms取消下发入库单清理") + @PostMapping(value = "/stockInOrderApi/omsCancelInOrder") + public AjaxResult omsCancelInOrder(@RequestBody StockInOrder stockInOrder); @ApiOperation("oms查询物料列表") @GetMapping("/materialBaseInfoApi/queryList") diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java index 12571141a..beba5b1af 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java @@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; -@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class) public interface YmsServiceFeign { /** diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/BusinessDocumentFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/BusinessDocumentFeign.java new file mode 100644 index 000000000..d460e8f3f --- /dev/null +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/BusinessDocumentFeign.java @@ -0,0 +1,203 @@ +package com.mhd.system.api.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + + +/** + * 业务单据对象 business_document + * + * @author gen + * @date 2024-06-21 + */ + +@Data +public class BusinessDocumentFeign extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("业务单据记录id") + @TableId(type = IdType.AUTO) + private Long businessDocumentId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("业务流水") + @Excel(name = "业务流水") + private String businessFlow; + + @ApiModelProperty("状态(1-未生效,2-已生效,3-已计费,4-已驳回,5-已作废") + @Excel(name = "状态", readConverterExp = "状态(1-未生效,2-已生效,3-已计费,4-已驳回,5-已作废") + private Integer businessState; + + @ApiModelProperty("来源模块") + @Excel(name = "来源模块") + private String belongModule; + + @ApiModelProperty("来源模块code") + @Excel(name = "来源模块code") + private String belongModuleCode; + + @ApiModelProperty("数据来源(1-系统生成,2-手工录入)") + @Excel(name = "数据来源", readConverterExp = "1=-系统生成,2-手工录入") + private Integer dataSources; + + @ApiModelProperty("单据类型id") + @Excel(name = "单据类型id") + private Long documentTypeId; + + @ApiModelProperty("单据类型code") + @Excel(name = "单据类型code") + private String documentTypeCode; + + @ApiModelProperty("单据类型") + @Excel(name = "单据类型") + private String documentType; + + @ApiModelProperty("原始业务单号") + @Excel(name = "原始业务单号") + private String originalBusinessNum; + + @ApiModelProperty("项目编码") + @Excel(name = "项目编码") + private String projectCode; + + @ApiModelProperty("项目名称") + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("账单金额") + @Excel(name = "账单金额") + private BigDecimal billAmount; + + @ApiModelProperty("预计费金额") + @Excel(name = "预计费金额") + private BigDecimal estimatedCost; + + @ApiModelProperty("一级费用科目code") + @Excel(name = "一级费用科目code") + private String firstSubjectCode; + + @ApiModelProperty("一级费用科目(结算项)") + @Excel(name = "一级费用科目") + private String firstSubjectName; + + @ApiModelProperty("二级费用科目code") + @Excel(name = "二级费用科目code") + private String secondSubjectCode; + + @ApiModelProperty("二级费用科目(结算项)") + @Excel(name = "二级费用科目") + private String secondSubjectName; + + @ApiModelProperty("结算对象id") + @Excel(name = "结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("结算对象code") + @Excel(name = "结算对象code") + private String settlementCustomersCode; + + @ApiModelProperty("结算对象") + @Excel(name = "结算对象") + private String settlementEntity; + + @ApiModelProperty("计费时间") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "计费时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date billingTime; + + @ApiModelProperty("单据表单json数据") + @Excel(name = "单据表单json数据") + private String documentFormJson; + + @ApiModelProperty("合同管理id") + @Excel(name = "合同管理id", readConverterExp = "合同管理id") + private Long contractManageId; + + @ApiModelProperty("项目管理id") + @Excel(name = "项目管理id", readConverterExp = "项目管理id") + private Long projectManageId; + + @ApiModelProperty("原始流水号") + @Excel(name = "原始流水号") + private String originalSerialNumber; + + @ApiModelProperty("费用类型code(服务项)") + @Excel(name = "费用类型code(服务项)") + private String serviceItemsCode; + + @ApiModelProperty("费用类型") + @Excel(name = "费用类型") + private String serviceItemsName; + + @ApiModelProperty("费用类型id(服务项)") + @Excel(name = "费用类型id(服务项)") + private Long serviceItemsManageId; + + @ApiModelProperty("单据备注") + @Excel(name = "单据备注") + private String remark; + + @ApiModelProperty("审核备注") + @Excel(name = "审核备注") + private String reviewRemarks; + + @ApiModelProperty("结算方式(1-现金,2-油卡)") + private Integer settlementWay; + + @ApiModelProperty("结算币种") + private String settlementCurrency; + @ApiModelProperty("业务员ID") + private String salesmanId; + @ApiModelProperty("业务员名称") + private String salesmanName; + @ApiModelProperty("税率") + private Double taxRate; + @ApiModelProperty("收款帐户") + private String paymentAccountId; + @ApiModelProperty("收款帐户名称") + private String paymentAccountName; + + @ApiModelProperty("计费单位") + private String billingUnit; + @ApiModelProperty("计费单位2") + private String billingUnit2; + @ApiModelProperty("计费数量") + private BigDecimal billingNum; + @ApiModelProperty("计费单价") + private BigDecimal billingUnitPrice; + @ApiModelProperty("nc科目编码") + private String ncSubjectCode; + + @ApiModelProperty("是否推送") + private Integer isPush; + + @ApiModelProperty("仓库类型") + private String warehouseType; +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageDetailFeignDTO.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageDetailFeignDTO.java new file mode 100644 index 000000000..621f28c83 --- /dev/null +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageDetailFeignDTO.java @@ -0,0 +1,110 @@ +package com.mhd.system.api.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 合同管理详情对象 contract_manage_detail + * + * @author gen + * @date 2024-06-07 + */ + +@Data +public class ContractManageDetailFeignDTO extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理详情id") + private Long contractManageDetailId; + + @ApiModelProperty("合同管理id") + @Excel(name = "合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("结算科目类型(1-通用,2-临时)") + @Excel(name = "结算科目类型", readConverterExp = "1=-通用,2-临时") + private Integer subjectType; + + @ApiModelProperty("一级费用科目code") + @Excel(name = "一级费用科目code") + private String firstSubjectCode; + + @ApiModelProperty("一级费用科目") + @Excel(name = "一级费用科目") + private String firstSubjectName; + + @ApiModelProperty("二级费用科目code") + @Excel(name = "二级费用科目code") + private String secondSubjectCode; + + @ApiModelProperty("二级费用科目") + @Excel(name = "二级费用科目") + private String secondSubjectName; + + @ApiModelProperty("计费策略id") + @Excel(name = "计费策略id") + private Long accountingStrategyId; + + @ApiModelProperty("计费策略") + @Excel(name = "计费策略") + private String accountingStrategy; + + @ApiModelProperty("计费策略编码") + @Excel(name = "计费策略编码") + private String accountingStrategyCode; + + @ApiModelProperty("计费周期") + @Excel(name = "计费周期") + private String billingAttributes; + + @ApiModelProperty("计费周期编码") + @Excel(name = "计费周期编码") + private String billingAttributesCode; + + @ApiModelProperty("合同有效日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同有效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date subjectEffectiveDate; + + @ApiModelProperty("合同到期日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同到期日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date subjectExpirationDate; + + + @ApiModelProperty(name = "组织ID集合") + private List organizationIdList; + + @ApiModelProperty(name = "权限菜单ID") + private Long permissionMenuId; + + @ApiModelProperty("单据类型code") + private String documentTypeCode; + + @ApiModelProperty("单据类型") + private String documentType; + + @ApiModelProperty("费用类别编码") + private String serviceItemsCode; + + @ApiModelProperty("费用类别名称") + private String serviceItemsName; +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageFeignDTO.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageFeignDTO.java new file mode 100644 index 000000000..626bc8ea9 --- /dev/null +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageFeignDTO.java @@ -0,0 +1,228 @@ +package com.mhd.system.api.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 合同管理对象 contract_manage + * + * @author gen + * @date 2024-06-07 + */ + +@Data +public class ContractManageFeignDTO extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("原始合同编号") + @Excel(name = "原始合同编号") + private String originalContractNumber; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("是否通用合同(1-是,2-否)") + @Excel(name = "是否通用合同", readConverterExp = "1=-是,2-否") + private Integer commonContractFlag; + + @ApiModelProperty("合同类型(1-仓储,2-运输,3-其他)") + @Excel(name = "合同类型", readConverterExp = "1=-仓储,2-运输,3=-其他") + private Integer contractType; + + @ApiModelProperty("合同状态(1-未生效,2-使用中,3-已过期,4-已作废)") + @Excel(name = "合同状态", readConverterExp = "1=-未生效,2-使用中,3-已过期,4-已作废") + private Integer contractState; + + @ApiModelProperty("签订单位") + @Excel(name = "签订单位") + private String signingUnit; + + @ApiModelProperty("结算主体") + @Excel(name = "结算主体") + private String settlementCustomers; + + @ApiModelProperty("结算主体id") + @Excel(name = "结算主体id") + private Long settlementCustomersId; + + @ApiModelProperty("结算主体code") + @Excel(name = "结算主体code") + private String settlementCustomersCode; + + @ApiModelProperty("我司身份(1-甲方,2-乙方)") + @Excel(name = "我司身份", readConverterExp = "1=-甲方,2-乙方") + private Integer ourIdentity; + + @ApiModelProperty("账期(1-每月,2-双月,3-季度)") + @Excel(name = "账期", readConverterExp = "1=-每月,2-双月,3-季度") + private Integer accountingPeriod; + + @ApiModelProperty("合同签订日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同签订日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date signingDate; + + @ApiModelProperty("合同生效日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同生效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date effectiveDate; + + @ApiModelProperty("合同到期日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同到期日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + + @ApiModelProperty("备注") + @Excel(name = "备注") + private String remark; + + @ApiModelProperty("合同正本附件地址") + @Excel(name = "合同正本附件地址") + private String contractOriginalUrl; + + @ApiModelProperty("廉政协议附件地址") + @Excel(name = "廉政协议附件地址") + private String integrityAgreementUrl; + + @ApiModelProperty("安全协议附件地址") + @Excel(name = "安全协议附件地址") + private String securityProtocolUrl; + + @ApiModelProperty("其他附件地址") + @Excel(name = "其他附件地址") + private String otherAttachmentsUrl; + + @ApiModelProperty("合同正本附件原始文件名") + private String contractOriginalName; + + @ApiModelProperty("廉政协议附件原始文件名") + private String integrityAgreementName; + + @ApiModelProperty("安全协议附件原始文件名") + private String securityProtocolName; + + @ApiModelProperty("其他附件原始文件名(多文件时与 otherAttachmentsUrl 同分隔符、同顺序)") + private String otherAttachmentsName; + + @ApiModelProperty("我司签订人") + @Excel(name = "我司签订人") + private String ourSinged; + + @ApiModelProperty("我司签订人联系方式") + @Excel(name = "我司签订人联系方式") + private String ourSingedPhone; + + @ApiModelProperty("我司经办人") + @Excel(name = "我司经办人") + private String ourOperator; + + @ApiModelProperty("我司经办人联系方式") + @Excel(name = "我司经办人联系方式") + private String ourOperatorPhone; + + @ApiModelProperty("对方签订人") + @Excel(name = "对方签订人") + private String theySinged; + + @ApiModelProperty("对方签订人联系方式") + @Excel(name = "对方签订人联系方式") + private String theySingedPhone; + + @ApiModelProperty("对方经办人") + @Excel(name = "对方经办人") + private String theyOperator; + + @ApiModelProperty("对方经办人联系方式") + @Excel(name = "对方经办人联系方式") + private String theyOperatorPhone; + + @ApiModelProperty(name = "组织ID集合") + private List organizationIdList; + + @ApiModelProperty(name = "权限菜单ID") + private Long permissionMenuId; + + @ApiModelProperty(name = "合同科目详情列表") + private List contractManageDetailDTOList; + + @ApiModelProperty("合同管理ids") + private String contractManageIds; + + @ApiModelProperty(name = "合同签订查询条件开始日期") + private String signingDateStart; + @ApiModelProperty(name = "合同签订查询条件结束日期") + private String signingDateEnd; + + @ApiModelProperty(name = "合同生效查询条件开始日期") + private String effectiveDateStart; + @ApiModelProperty(name = "合同生效查询条件结束日期") + private String effectiveDateEnd; + + @ApiModelProperty(name = "合同到期查询条件开始日期") + private String expirationDateStart; + @ApiModelProperty(name = "合同到期查询条件结束日期") + private String expirationDateEnd; + + @ApiModelProperty(name = "结算主体基础数据id(可以是用户id也可以是企业id)") + private String settlementId; + + @ApiModelProperty(name = "是否自动出账(1-是,2-否)") + private Integer automaticFlag; + + @ApiModelProperty("出账日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date paymentDate; + + @ApiModelProperty(name = "出账天数") + private Integer billDays; + + @ApiModelProperty(name = "主体类型(1-货主,2-客户,3-承运商)") + private Integer principalType; + + @ApiModelProperty("客户类型") + private String customerType; + + @ApiModelProperty("客户类型编码") + private String customerTypeCode; + + @ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)") + private Integer transportationCosts; + + @ApiModelProperty("客户类型") + private String contractRentType; + + @ApiModelProperty("客户类型编码") + private String contractRentTypeName; + + @ApiModelProperty("仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("仓库温层类型编码") + private String warehouseTempLayerTypeName; +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageParametersFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageParametersFeign.java new file mode 100644 index 000000000..77018b8dc --- /dev/null +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/ContractManageParametersFeign.java @@ -0,0 +1,52 @@ +package com.mhd.system.api.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 合约信息规则维护表 + * + * @author gen + * @date 2024-06-07 + */ + +@Data +public class ContractManageParametersFeign extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理id") + @TableId(type = IdType.AUTO) + private Long id; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("合约信息规则维护") + @Excel(name = "合约信息规则维护表") + private String parametersJson; +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java index 2d70d66e6..a8ec289af 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java @@ -250,4 +250,20 @@ public class MaterialBaseInfoFeign extends BaseVOEntity{ @ApiModelProperty(name = "是否正常物料: 0-是 1-否") private Integer isNormalMaterial; + + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteBmsFeignFallbackFactory.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteBmsFeignFallbackFactory.java index 1ff15b40c..a851b12d8 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteBmsFeignFallbackFactory.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteBmsFeignFallbackFactory.java @@ -6,6 +6,7 @@ import com.mhd.common.core.domain.po.OrganizationPo; import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.system.api.BmsServiceFeign; import com.mhd.system.api.ProductServiceFeign; +import com.mhd.system.api.domain.BusinessDocumentFeign; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -66,6 +67,21 @@ public class RemoteBmsFeignFallbackFactory implements FallbackFactory inMaterialDetails) { + public AjaxResult omsInOrderAddDetail(List inMaterialDetails) { + //返回错误而非静默成功:明细保存(含自动审核)失败必须让OMS感知并回滚下发标记 + return AjaxResult.error("WMS入库单明细保存失败(服务降级):" + cause.getMessage()); + } + + @Override + public AjaxResult omsCancelInOrder(StockInOrder stockInOrder) { + //返回错误而非静默成功,让OMS侧取消下发能感知清理失败并整体回滚(取消下发可重试,WMS清理幂等) + return AjaxResult.error("WMS取消下发清理失败:" + cause.getMessage()); } @Override diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersPO.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersPO.java index 21ab2187d..77887fb9b 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersPO.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersPO.java @@ -88,5 +88,10 @@ public class SettlementCustomersPO extends BaseVOEntity{ private String settlementObject; - -} + @ApiModelProperty(name = "散租推送计费单据/流水任务id") + private Integer pushBillingRecordJobId; + @ApiModelProperty(name = "整租推送计费单据/流水任务id") + private Integer pushContractManageToBmsJobId; + @ApiModelProperty(name = "生成应收账单任务id") + private Integer pushBillManageJobId; +} \ No newline at end of file diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersParametersPO.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersParametersPO.java new file mode 100644 index 000000000..8acbc4c9c --- /dev/null +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/SettlementCustomersParametersPO.java @@ -0,0 +1,58 @@ +package com.mhd.common.core.domain.po; + +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "结算对象参数对象", description = "结算对象参数响应对象") +public class SettlementCustomersParametersPO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("结算对象编码") + @Excel(name = "结算对象编码") + private String settlementCustomersCode; + + @ApiModelProperty("结算主体id") + @Excel(name = "结算主体id") + private Long settlementEntityId; + + @ApiModelProperty("结算主体") + @Excel(name = "结算主体") + private String settlementEntity; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("参数内容") + @Excel(name = "参数内容") + private String content; + + @ApiModelProperty("参数名称") + @Excel(name = "参数名称") + private String parametersName; +} \ No newline at end of file diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java index ea8419ac1..b8db7365f 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java @@ -26,7 +26,7 @@ import java.io.InputStream; import java.util.List; import java.util.Map; -@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012",configuration = FeignAutoConfiguration.class) +@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012", configuration = FeignAutoConfiguration.class) public interface ThirdPartyServiceFeign { //查询当前组织所有三方接口信息 diff --git a/mhd-modules/mhd-system/pom.xml b/mhd-modules/mhd-system/pom.xml index 505d9822a..b88cb5ba2 100644 --- a/mhd-modules/mhd-system/pom.xml +++ b/mhd-modules/mhd-system/pom.xml @@ -111,6 +111,16 @@ 2.24 + + com.xuxueli + xxl-job-core + 2.4.0 + + + org.jsoup + jsoup + 1.17.2 + diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java index 9013a1f84..ddb3e309d 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -11,16 +12,26 @@ import com.mhd.basic.domain.contractManage.entity.ContractManage; import com.mhd.basic.domain.contractManage.repository.mapper.ContractManageMapper; import com.mhd.basic.domain.contractManage.repository.po.ContractManagePO; import com.mhd.basic.domain.contractManage.repository.todo.ContractManageDO; +import com.mhd.basic.domain.contractManage.repository.util.HttpWebServiceUtil; +import com.mhd.basic.domain.contractManage.repository.util.XxlJobOpenApiUtil; import com.mhd.basic.domain.contractManage.service.ContractManageDomainService; import com.mhd.basic.domain.contractManageDetail.entity.ContractManageDetail; import com.mhd.basic.domain.contractManageDetail.repository.mapper.ContractManageDetailMapper; import com.mhd.basic.domain.contractManageDetail.repository.po.ContractManageDetailPO; import com.mhd.basic.domain.contractManageDetail.repository.todo.ContractManageDetailDO; import com.mhd.basic.domain.contractManageDetail.service.ContractManageDetailDomainService; +import com.mhd.basic.domain.contractManageParameters.entity.ContractManageParameters; +import com.mhd.basic.domain.contractManageParameters.repository.facade.IContractManageParametersService; +import com.mhd.basic.domain.contractManageParameters.repository.mapper.ContractManageParametersMapper; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import com.mhd.basic.domain.contractManageParameters.service.ContractManageParametersDomainService; import com.mhd.basic.domain.expenseAccount.repository.po.ExpenseAccountPO; import com.mhd.basic.domain.expenseAccount.service.ExpenseAccountDomainService; import com.mhd.basic.interfaces.dto.contractManage.*; +import com.mhd.basic.interfaces.assember.contractManageParameters.ContractManageParametersAssembler; import com.mhd.basic.interfaces.dto.contractManageDetail.ContractManageDetailDTO; +import com.mhd.basic.interfaces.dto.contractManageParameters.ContractManageParametersDTO; import com.mhd.common.core.domain.po.*; import com.mhd.common.core.enums.DictCode; import com.mhd.common.core.exception.ServiceException; @@ -32,18 +43,23 @@ import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.BmsServiceFeign; import com.mhd.system.api.SystemServiceFeign; +import com.mhd.system.api.domain.BusinessDocumentFeign; +import com.mhd.system.api.domain.MaterialInventoryPO; import com.mhd.system.api.domain.SysDictData; import com.mhd.system.api.model.LoginUser; import com.mhd.system.service.ISysDictTypeService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -75,6 +91,20 @@ public class ContractManageApplicationService { @Autowired private SystemServiceFeign systemServiceFeign; + @Autowired + private ContractManageParametersDomainService contractManageParametersDomainService; + + @Autowired + private ContractManageParametersAssembler contractManageParametersAssembler; + @Autowired + private ContractManageParametersMapper contractManageParametersMapper; + @Autowired + private IContractManageParametersService contractManageParametersService; + @Resource + private XxlJobOpenApiUtil apiUtil; + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + private static final String token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjozNTYzLCJ0b3BPcmdhbml6YXRpb25JZCI6MjgyNywidXNlcl9rZXkiOiI0N2MzY2U4My0wMmFjLTQ0NTQtOTdiYS1lYmQwMDc2MzNiNDMiLCJ1c2VybmFtZSI6ImNhbmdtYSJ9.tnZyywwburfBo3Kizdhfk5eYdXbrrZ9976Z0W7GrS6UqSpKwfI2RwdRwfYx7DbD7Ri1Fdj_eOVxBkjvdFF226Q"; /** * 分页查询合同管理列表 @@ -126,7 +156,21 @@ public class ContractManageApplicationService { contractManageDO.setTopOrganizationId(2827L); } } - return contractManageDomainService.queryList(contractManageDO); + List list = contractManageDomainService.queryList(contractManageDO); + + if (!list.isEmpty()) { + List contractManageIds = list.stream() + .map(ContractManagePO::getContractManageId) + .collect(Collectors.toList()); + List allParams = contractManageParametersDomainService.queryListByManageIds(contractManageIds); + Map> paramsMap = allParams.stream() + .collect(Collectors.groupingBy(ContractManageParametersPO::getContractManageId)); + for (ContractManagePO po : list) { + po.setContractManageParametersList(paramsMap.getOrDefault(po.getContractManageId(), new ArrayList<>())); + } + } + + return list; } // public BigDecimal getAmount(List subjectAndPriceReturnList) { @@ -610,6 +654,7 @@ public class ContractManageApplicationService { */ //20260702取消同一时间段不能有相同合同校验 //checkContract(contractManageDO); + checkUniqueActiveContract(contractManageDO); handleData(contractManageDO); handleDict(contractManageDO); contractManageDO.setContractNumber(OrderSequence.getOrderCode("HT")); @@ -618,9 +663,42 @@ public class ContractManageApplicationService { contractManageDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); boolean flag = contractManageDomainService.insert(contractManageDO); handleDetils(contractManageDO, true); + handleParameters(contractManageDO); return flag; } + /** + * 新增合同管理 + */ + @Transactional + public ContractManageDO insertFeign(ContractManageDO contractManageDO) { + //获取当前登录人信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + validateContractType(contractManageDO.getContractType()); + /* + 通用合同:同一时间段、同一合同类型,只能存在一个 + 特殊合同:同一结算主体、同一时间段、同一合同类型,只能存在一个 + */ + //20260702取消同一时间段不能有相同合同校验 + //checkContract(contractManageDO); + checkUniqueActiveContract(contractManageDO); + handleData(contractManageDO); + handleDict(contractManageDO); + contractManageDO.setContractNumber(OrderSequence.getOrderCode("HT")); + contractManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + contractManageDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + contractManageDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + boolean flag = contractManageDomainService.insert(contractManageDO); + if (!flag) { + throw new ServiceException("新增合同管理失败,请检查数据"); + } + handleDetils(contractManageDO, true); + return contractManageDO; + } + /** * 处理数据字典 */ @@ -748,6 +826,26 @@ public class ContractManageApplicationService { } } + private void checkUniqueActiveContract(ContractManageDO contractManageDO) { + if (contractManageDO.getContractState() != null && contractManageDO.getContractState() != 2) { + return; + } + if (contractManageDO.getSettlementCustomersId() == null + || StringUtils.isEmpty(contractManageDO.getWarehouseTempLayerType()) + || StringUtils.isEmpty(contractManageDO.getContractRentType())) { + return; + } + long count = contractManageDomainService.countByUniqueKey( + contractManageDO.getSettlementCustomersId(), + contractManageDO.getWarehouseTempLayerType(), + contractManageDO.getContractRentType(), + contractManageDO.getContractManageId() + ); + if (count > 0) { + throw new ServiceException("同一结算客户、同一温层、同一租赁类型只能存在一个使用中的合同"); + } + } + /** * 处理合同详情 */ @@ -846,6 +944,111 @@ public class ContractManageApplicationService { } } + private void handleParameters(ContractManageDO contractManageDO) { + List existingList = contractManageParametersDomainService.queryListByManageId(contractManageDO.getContractManageId()); + if (!existingList.isEmpty()) { + Long[] ids = existingList.stream().map(ContractManageParametersPO::getId).toArray(Long[]::new); + contractManageParametersDomainService.delete(ids); + } + if (StringUtils.isNotEmpty(contractManageDO.getParametersJson())) { + ContractManageParametersDTO dto = new ContractManageParametersDTO(); + dto.setContractManageId(contractManageDO.getContractManageId()); + dto.setContractNumber(contractManageDO.getContractNumber()); + dto.setContractName(contractManageDO.getContractName()); + dto.setParametersJson(contractManageDO.getParametersJson()); + dto.setOrganizationId(contractManageDO.getOrganizationId()); + dto.setOrganizationName(contractManageDO.getOrganizationName()); + dto.setTopOrganizationId(contractManageDO.getTopOrganizationId()); + ContractManageParametersDO parametersDO = contractManageParametersAssembler.toDO(dto); + contractManageParametersDomainService.insert(parametersDO); + if(StringUtils.isNotEmpty(contractManageDO.getSettlementCustomersCode())){ + AjaxResult ajaxResult = bmsServiceFeign.getCustomersInfoByCode(contractManageDO.getSettlementCustomersCode()); + if (!"200".equals(String.valueOf(ajaxResult.get("code")))){ + throw new ServiceException("获取结算客户信息失败"); + } + SettlementCustomersPO settlementCustomersPO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), SettlementCustomersPO.class); + if(null == settlementCustomersPO){ + throw new ServiceException("结算客户信息未找到"); + } + Long settlementEntityId = settlementCustomersPO.getSettlementEntityId(); + if(null != settlementEntityId){ + Integer pushContractManageToBmsJobId = settlementCustomersPO.getPushContractManageToBmsJobId(); + if (null != pushContractManageToBmsJobId) { + stopXxlJob(pushContractManageToBmsJobId); + } + Integer jobId = addXxlJob(settlementEntityId.toString()); + settlementCustomersPO.setPushContractManageToBmsJobId(jobId); + AjaxResult updateResult = bmsServiceFeign.updatePushContractManageJobId(settlementCustomersPO.getSettlementCustomersId(), jobId); + if (!"200".equals(String.valueOf(updateResult.get("code")))) { + throw new ServiceException("更新结算对象定时任务ID失败"); + } + } + } + } + } + + /** + * 创建夜间23点定时任务 + * @param shipperId 结算对象id,作为任务参数 + * @return xxlJobId 保存到业务表,后续用于删除/暂停 + */ + public Integer addXxlJob(String shipperId) { + XxlJobOpenApiUtil.JobInfoAddReq req = new XxlJobOpenApiUtil.JobInfoAddReq(); + req.setJobGroup(5); + //生成唯一业务流水号拼接至JobDesc,保证本次新建任务的JobDesc唯一,据此查询jobId不会命中历史任务 + String xxlJobBizNo = generateXxlJobBizNo(); + req.setJobDesc("整租推送计费单据/流水任务,结算对象id:" + shipperId + ",业务流水号:" + xxlJobBizNo); + req.setAuthor("system"); + req.setAlarmEmail(""); + req.setScheduleType("CRON"); + // 每天晚上23点执行 + req.setScheduleConf("0 0 1 * * ?"); + req.setGlueType("BEAN"); + req.setExecutorHandler("pushContractManageToBms"); + req.setExecutorParam(shipperId); + req.setGlueRemark(""); + req.setGlueSource(""); + req.setExecutorRouteStrategy("FIRST"); + req.setChildJobId(null); + req.setMisfireStrategy("DO_NOTHING"); + req.setExecutorBlockStrategy("SERIAL_EXECUTION"); + req.setExecutorTimeout(0); + req.setExecutorFailRetryCount(0); + + boolean addOk = apiUtil.addJob(req); + if (!addOk) { + throw new RuntimeException("创建夜间定时任务失败"); + } + Integer xxlJobId = apiUtil.queryJobIdByDescAndParam(req.getJobDesc(), shipperId,"5"); + if (xxlJobId == null) { + throw new RuntimeException("定时任务创建成功,但查询jobId失败"); + } + return xxlJobId; + } + + + public void stopXxlJob(Integer shipperId) { + //1.实例化工具类,建议交给Spring管理 + XxlJobOpenApiUtil apiUtil = new XxlJobOpenApiUtil(adminAddresses,token); + //3.调用创建任务接口 ,返回任务ID + apiUtil.pauseJob(shipperId); + } + + private static final DateTimeFormatter JOB_BIZ_NO_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); + private static final Random RANDOM = new Random(); + + /** + * 生成xxl-job任务业务流水号:JOB + 当天yyMMddHHmmssSSS + 6位随机数字,保证每次创建的JobDesc唯一 + * 示例:JOB260905102030123123456 + * @return 业务流水号字符串 + */ + private static String generateXxlJobBizNo() { + String dateTimeStr = LocalDateTime.now().format(JOB_BIZ_NO_FORMATTER); + int randomNum = RANDOM.nextInt(1_000_000); + String randomStr = String.format("%06d", randomNum); + return "JOB" + dateTimeStr + randomStr; + } + /** * 修改合同管理 */ @@ -853,8 +1056,10 @@ public class ContractManageApplicationService { public Boolean update(ContractManageDO contractManageDO) { validateContractType(contractManageDO.getContractType()); //checkContract(contractManageDO); + checkUniqueActiveContract(contractManageDO); handleData(contractManageDO); handleDetils(contractManageDO, false); + handleParameters(contractManageDO); handleDict(contractManageDO); return contractManageDomainService.update(contractManageDO); } @@ -880,6 +1085,8 @@ public class ContractManageApplicationService { ContractManagePO result = contractManageDomainService.getInfo(contractManageId); List contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(result.getContractManageId()); result.setContractManageDetailPOList(contractManageDetailPOList); + List paramsList = contractManageParametersDomainService.queryListByManageId(result.getContractManageId()); + result.setContractManageParametersList(paramsList); return result; } @@ -1171,4 +1378,296 @@ public class ContractManageApplicationService { } return exportList; } + + /* + * 获取结算对象 + * */ + public SettlementCustomersPO getSettlementCustomers(Long shipperId) { + try { + Long topOrganizationId = null; + AjaxResult ajaxResult = bmsServiceFeign.getCustomersInfoBySettlementEntityId(shipperId, topOrganizationId); + if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code"))) || ajaxResult.get("data") == null) { + log.warn("按 settlementEntityId 查询结算对象未成功:shipperId={}, code={}", shipperId, ajaxResult != null ? ajaxResult.get("code") : null); + return null; + } + return JSON.parseObject(JSON.toJSONString(ajaxResult.get("data")), SettlementCustomersPO.class); + } catch (Exception e) { + log.warn("按 settlementEntityId 查询结算对象异常,shipperId={}", shipperId, e); + return null; + } + } + + /* + * 根据结算对象id获取结算对象参数列表 + * */ + public List getSettlementCustomersParameters(Long settlementCustomersId) { + try { + AjaxResult ajaxResult = bmsServiceFeign.getListBySettlementCustomersId(settlementCustomersId); + if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code"))) || ajaxResult.get("data") == null) { + log.warn("按 settlementCustomersId 查询结算对象参数未成功:settlementCustomersId={}, code={}", settlementCustomersId, ajaxResult != null ? ajaxResult.get("code") : null); + return null; + } + return JSON.parseArray(JSON.toJSONString(ajaxResult.get("data")), SettlementCustomersParametersPO.class); + } catch (Exception e) { + log.warn("按 settlementCustomersId 查询结算对象参数异常,settlementCustomersId={}", settlementCustomersId, e); + return null; + } + } + + public void pushContractManageToBms(String shipperId) { + SettlementCustomersPO settlementCustomers = getSettlementCustomers(Long.valueOf(shipperId)); + if (settlementCustomers == null) { + log.warn("pushContractManageToBms 未找到结算对象,shipperId={}", shipperId); + return; + } + Long settlementCustomersId = settlementCustomers.getSettlementCustomersId(); + List parametersList = getSettlementCustomersParameters(settlementCustomersId); + if (parametersList == null || parametersList.isEmpty()) { + log.warn("pushContractManageToBms 未找到结算对象参数,settlementCustomersId={}", settlementCustomersId); + return; + } + + for (SettlementCustomersParametersPO param : parametersList) { + String parametersName = param.getParametersName(); + String content = param.getContent(); + if (StringUtils.isEmpty(content)) { + log.warn("结算对象参数 content 为空,parametersName={}, settlementCustomersId={}", parametersName, settlementCustomersId); + continue; + } + Map contentMap = JSON.parseObject(content, new TypeReference>() {}); + Integer sfzdcz = Integer.valueOf(contentMap.get("sfzdcz").toString()); + if (sfzdcz != 1) { + log.info("结算对象参数 sfzdcz 不为1,跳过推送,parametersName={}, sfzdcz={}", parametersName, sfzdcz); + continue; + } + + String warehouseTempLayerType; + String serviceItemsName; + Boolean isGc = false; + if ("冻仓计费配置".equals(parametersName)) { + warehouseTempLayerType = "DC"; + serviceItemsName = "冻仓仓租费用"; + } else if ("干仓计费配置".equals(parametersName)) { + warehouseTempLayerType = "GC"; + serviceItemsName = "干仓仓租费用"; + isGc=true; + } else { + log.warn("未知的结算对象参数类型,parametersName={}", parametersName); + continue; + } + + List contractManages = contractManageMapper.selectList(new LambdaQueryWrapper() + .eq(ContractManage::getContractRentType, "NORMAL") + .eq(ContractManage::getContractState, 2) + .eq(ContractManage::getDelFlag, 1) + .eq(ContractManage::getSettlementCustomersId, settlementCustomersId) + .eq(ContractManage::getWarehouseTempLayerType, warehouseTempLayerType)); + if (contractManages == null || contractManages.isEmpty()) { + log.warn("未找到正式合同,warehouseTempLayerType={}, settlementCustomersId={}", warehouseTempLayerType, settlementCustomersId); + continue; + } + for (ContractManage contractManage : contractManages) { + Long contractManageId = contractManage.getContractManageId(); + ContractManageParameters contractManageParameters = contractManageParametersService.getOne(new LambdaQueryWrapper() + .eq(ContractManageParameters::getContractManageId, contractManageId), false); + if (contractManageParameters == null) { + continue; + } + String parametersJson = contractManageParameters.getParametersJson(); + Map parametersMap = JSON.parseObject(parametersJson, new TypeReference>() {}); + BigDecimal hyj = (BigDecimal) parametersMap.get("hyj"); + buildBusinessDocument(hyj, settlementCustomers, contractManage, "0D01", "租金(固定租)", warehouseTempLayerType, serviceItemsName); + } + } + } + + private void buildBusinessDocument(BigDecimal fee, SettlementCustomersPO settlementCustomers, ContractManage contractManage, String code, String name, String warehouseType, String serviceItemsName) { + + Long settlementCustomersId = settlementCustomers.getSettlementCustomersId(); + Long settlementEntityId = settlementCustomers.getSettlementEntityId(); + String settlementEntity = settlementCustomers.getSettlementEntity(); + String settlementCustomersCode = settlementCustomers.getSettlementCustomersCode(); + BusinessDocumentFeign businessDocumentFeign = new BusinessDocumentFeign(); + businessDocumentFeign.setBillAmount(fee); + businessDocumentFeign.setOrganizationId(contractManage.getOrganizationId()); + businessDocumentFeign.setOrganizationName(contractManage.getOrganizationName()); + businessDocumentFeign.setTopOrganizationId(contractManage.getTopOrganizationId()); + businessDocumentFeign.setBelongModuleCode("wms"); + businessDocumentFeign.setBelongModule("WMS"); + businessDocumentFeign.setDataSources(1); + businessDocumentFeign.setSettlementEntity(settlementEntity); + businessDocumentFeign.setSettlementCustomersId(settlementCustomersId); + businessDocumentFeign.setSettlementCustomersCode(settlementCustomersCode); + businessDocumentFeign.setDocumentTypeId(4l); + businessDocumentFeign.setDocumentTypeCode("CM_ZL"); + businessDocumentFeign.setDocumentType("仓库租赁单"); + businessDocumentFeign.setFirstSubjectCode(code); + businessDocumentFeign.setFirstSubjectName(name); + businessDocumentFeign.setBillingTime(new Date()); + businessDocumentFeign.setServiceItemsCode("GC_CZ"); + businessDocumentFeign.setServiceItemsName(serviceItemsName); + businessDocumentFeign.setSettlementWay(1); + businessDocumentFeign.setOriginalBusinessNum(contractManage.getContractNumber()); + businessDocumentFeign.setWarehouseType(warehouseType); + String contractName = contractManage.getContractName(); + String contractNumber = contractManage.getContractNumber(); + Long contractManageId = contractManage.getContractManageId(); + businessDocumentFeign.setContractName(contractName); + businessDocumentFeign.setContractNumber(contractNumber); + businessDocumentFeign.setContractManageId(contractManageId); + businessDocumentFeign.setBusinessFlow(OrderSequence.getOrderCode("LS")); + businessDocumentFeign.setIsPush(1); + AjaxResult ajaxResult = bmsServiceFeign.feignSaveBusinessDocument(businessDocumentFeign); + if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) { + log.error("保存业务单据失败: {}", ajaxResult != null ? ajaxResult.get("msg") : "feign调用异常"); + } + } + + + private static final String WEBSERVICE_URL = "http://10.33.0.116:8080/sys/webservice/ngLegalByFindWebserviceService"; + + public List getContractNosByCompanyName(String companyName, int pageNum, int pageSize) { + List contractList = new ArrayList<>(); + + try { + log.info("=== 开始查询合同列表 ==="); + log.info("查询公司: {}, 页码: {}, 每页数量: {}", companyName, pageNum, pageSize); + + String httpRequest = buildXmlRequest(companyName, pageNum, pageSize); + log.info("XML请求: {}", httpRequest); + log.info("XML请求生成完成,长度: {} 字符", httpRequest.length()); + + log.info("正在调用WebService..."); + String httpResponse = HttpWebServiceUtil.callWebService(httpRequest, WEBSERVICE_URL); + + String jsonData = extractJsonFromResponse(httpResponse); + + log.info("正在解析JSON..."+jsonData); + + if (jsonData == null || jsonData.trim().isEmpty()) { + log.warn("未提取到JSON数据,返回空列表"); + return contractList; + } + + log.info("提取到JSON数据,长度: {} 字符", jsonData.length()); + + List result = parseContractListFromJson(jsonData); + contractList.addAll(result); + + log.info("=== 查询完成 ==="); + log.info("找到 {} 个合同", contractList.size()); + + } catch (Exception e) { + log.error("查询合同列表失败", e); + throw new RuntimeException("查询合同列表失败: " + e.getMessage(), e); + } + + return contractList; + } + + /** + * 构建XML请求 - 动态分页 + */ + private String buildXmlRequest(String companyName, int pageNum, int pageSize) { + String jsonParam = "{\"fdName\":\"" + companyName + "\"}"; + + return "" + + "" + + "" + + "" + + "" + + "" + pageNum + "" + + "" + pageSize + "" + + "" + + "" + + "NA0301" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + } + + /** + * 从SOAP响应中提取JSON + */ + private String extractJsonFromResponse(String soapResponse) { + if (soapResponse == null || soapResponse.isEmpty()) { + return null; + } + + // 直接查找JSON部分 + int jsonStart = soapResponse.indexOf("{\"returnState\":"); + int jsonEnd = soapResponse.indexOf("}"); + + if (jsonStart != -1 && jsonEnd != -1) { + // 找到JSON结束位置 + jsonEnd = jsonEnd + 1; // 包含右大括号 + + String json = soapResponse.substring(jsonStart, jsonEnd); + log.info("直接提取JSON成功"); + return json; + } + + // 备用方法:查找标签 + int start = soapResponse.indexOf(""); + int end = soapResponse.indexOf(""); + + if (start != -1 && end != -1) { + start += "".length(); + String json = soapResponse.substring(start, end); + + // 解码XML实体 + json = json.replace("<", "<") + .replace(">", ">") + .replace("&", "&") + .replace(""", "\"") + .replace("'", "'"); + + log.info("从标签提取JSON成功"); + return json.trim(); + } + + log.warn("无法从响应中提取JSON"); + return null; + } + + /** + * 解析JSON获取完整合同列表 + */ + private List parseContractListFromJson(String jsonData) { + List contractList = new ArrayList<>(); + + try { + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(jsonData); + + String returnState = jsonObject.getString("returnState"); + if (!"2".equals(returnState)) { + log.warn("返回状态异常: {}", returnState); + return contractList; + } + + JSONArray dataArray = jsonObject.getJSONArray("data"); + if (dataArray == null || dataArray.isEmpty()) { + log.info("查询成功,但未找到合同数据"); + return contractList; + } + + log.info("找到 {} 个合同", dataArray.size()); + + for (int i = 0; i < dataArray.size(); i++) { + com.alibaba.fastjson.JSONObject contract = dataArray.getJSONObject(i); + contractList.add(contract); + } + + } catch (Exception e) { + log.error("JSON解析失败", e); + log.error("原始JSON: {}", jsonData); + } + + return contractList; + } } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManageParameters/ContractManageParametersApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManageParameters/ContractManageParametersApplicationService.java new file mode 100644 index 000000000..1b1ad2aa9 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManageParameters/ContractManageParametersApplicationService.java @@ -0,0 +1,72 @@ +package com.mhd.basic.application.service.contractManageParameters; + +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import com.mhd.basic.domain.contractManageParameters.service.ContractManageParametersDomainService; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; +/** + * 合约信息规则维护表ApplicationService + * + * @author gen + * @date 2024-06-07 + */ +@Service +@Slf4j +public class ContractManageParametersApplicationService { + @Autowired + private ContractManageParametersDomainService contractManageParametersDomainService; + + + /** + * 分页查询合约信息规则维护表列表 + */ + + public List queryList(ContractManageParametersDO contractManageParametersDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser != null){ + Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); + if (topOrganizationId != null && topOrganizationId != 1){ + contractManageParametersDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + } + } + return contractManageParametersDomainService.queryList(contractManageParametersDO); + } + + + /** + * 新增合约信息规则维护表 + */ + public Boolean insert(ContractManageParametersDO contractManageParametersDO) { + + return contractManageParametersDomainService.insert(contractManageParametersDO); + } + + /** + * 修改合约信息规则维护表 + */ + public Boolean update(ContractManageParametersDO contractManageParametersDO) { + return contractManageParametersDomainService.update(contractManageParametersDO); + } + + /** + * 批量删除合约信息规则维护表 + */ + public boolean delete(Long[] ids) { + return contractManageParametersDomainService.delete(ids); + } + + /** + * 获取合约信息规则维护表详细信息 + */ + public ContractManageParametersPO getInfo(Long id) + { + return contractManageParametersDomainService.getInfo(id); + } + + +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/entity/ContractManage.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/entity/ContractManage.java index b4e248dc5..da25eac0a 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/entity/ContractManage.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/entity/ContractManage.java @@ -192,4 +192,30 @@ public class ContractManage extends BaseVOEntity{ @ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)") private Integer transportationCosts; + @ApiModelProperty("合同租赁类型") + private String contractRentType; + + @ApiModelProperty("合同租赁类型") + private String contractRentTypeName; + + @ApiModelProperty("仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("仓库温层类型") + private String warehouseTempLayerTypeName; + + @ApiModelProperty("续期提前天数") + private Integer renewalAdvanceDays; + + @ApiModelProperty("标的物") + private String subjectMatter; + + @ApiModelProperty("性质") + private String nature; + + @ApiModelProperty("合同最初起始日") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同最初起始日", width = 30, dateFormat = "yyyy-MM-dd") + private Date initialStartDate; + } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/po/ContractManagePO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/po/ContractManagePO.java index f7adaad29..83d580820 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/po/ContractManagePO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/po/ContractManagePO.java @@ -1,6 +1,7 @@ package com.mhd.basic.domain.contractManage.repository.po; import com.mhd.basic.domain.contractManageDetail.repository.po.ContractManageDetailPO; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; import com.mhd.basic.interfaces.dto.contractManageDetail.ContractManageDetailDTO; import com.mhd.common.core.annotation.Excel; import lombok.Data; @@ -195,5 +196,35 @@ public class ContractManagePO extends BaseVOEntity{ @ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)") private Integer transportationCosts; + + @ApiModelProperty("客户类型") + private String contractRentType; + + @ApiModelProperty("客户类型编码") + private String contractRentTypeName; + + @ApiModelProperty("仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("仓库温层类型编码") + private String warehouseTempLayerTypeName; + private String isMany; + + @ApiModelProperty("合约信息规则维护列表") + private List contractManageParametersList; + + @ApiModelProperty("续期提前天数") + private Integer renewalAdvanceDays; + + @ApiModelProperty("标的物") + private String subjectMatter; + + @ApiModelProperty("性质") + private String nature; + + @ApiModelProperty("合同最初起始日") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同最初起始日", width = 30, dateFormat = "yyyy-MM-dd") + private Date initialStartDate; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java index 245d09958..3eec53c8a 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java @@ -226,6 +226,34 @@ public class ContractManageDO extends BaseVOEntity{ @ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)") private Integer transportationCosts; + @ApiModelProperty("客户类型") + private String contractRentType; + + @ApiModelProperty("客户类型编码") + private String contractRentTypeName; + + @ApiModelProperty("仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("仓库温层类型编码") + private String warehouseTempLayerTypeName; + @ApiModelProperty("一级费用科目code") private String firstSubjectCode; + + @ApiModelProperty("合约信息规则维护JSON") + private String parametersJson; + + @ApiModelProperty("续期提前天数") + private Integer renewalAdvanceDays; + + @ApiModelProperty("标的物") + private String subjectMatter; + + @ApiModelProperty("性质") + private String nature; + + @ApiModelProperty("合同最初起始日") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date initialStartDate; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/HttpWebServiceUtil.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/HttpWebServiceUtil.java new file mode 100644 index 000000000..e3294b304 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/HttpWebServiceUtil.java @@ -0,0 +1,96 @@ +package com.mhd.basic.domain.contractManage.repository.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.*; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.zip.GZIPInputStream; + +@Slf4j +@Component +public class HttpWebServiceUtil { + + /** + * 调用HTTP WebService + */ + public static String callWebService(String requestBody, String endpointUrl) { + try { + // 创建RestTemplate + RestTemplate restTemplate = new RestTemplate(); + + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.TEXT_XML); +// headers.setAccept(Collections.singletonList(MediaType.TEXT_XML)); + headers.setContentType(MediaType.parseMediaType("text/xml; charset=UTF-8")); // 核心修复 + headers.setAccept(Collections.singletonList(MediaType.ALL)); + headers.set("SOAPAction", ""); + headers.set("User-Agent", "PostmanRuntime/7.26.10"); + headers.set("Cache-Control", "no-cache"); + headers.set("Accept-Encoding", "gzip, deflate"); + headers.set("Connection", "keep-alive"); + + // 创建请求实体 + HttpEntity entity = new HttpEntity<>(requestBody, headers); + + log.info("发送请求到: {}", endpointUrl); + + // 发送请求 + ResponseEntity response = restTemplate.exchange( + endpointUrl, + HttpMethod.POST, + entity, + byte[].class + ); + + log.info("响应状态: {}", response.getStatusCode()); + + // 处理响应 + byte[] rawResponse = response.getBody(); + if (rawResponse == null) { + return ""; + } + + // 检查是否gzip压缩 + String contentEncoding = response.getHeaders().getFirst("Content-Encoding"); + String responseBody; + + if ("gzip".equalsIgnoreCase(contentEncoding)) { + responseBody = decompressGzip(rawResponse); + log.info("已解压gzip响应,长度: {} 字符", responseBody.length()); + } else { + responseBody = new String(rawResponse, StandardCharsets.UTF_8); + log.info("响应长度: {} 字符", responseBody.length()); + } + + return responseBody; + + } catch (Exception e) { + log.error("WebService调用失败", e); + throw new RuntimeException("WebService调用失败: " + e.getMessage(), e); + } + } + + /** + * 解压缩GZIP内容 + */ + private static String decompressGzip(byte[] compressedData) throws IOException { + try (GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(compressedData)); + InputStreamReader reader = new InputStreamReader(gis, StandardCharsets.UTF_8)) { + + StringBuilder sb = new StringBuilder(); + char[] buffer = new char[1024]; + int len; + while ((len = reader.read(buffer)) != -1) { + sb.append(buffer, 0, len); + } + return sb.toString(); + } + } +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/XxlJobBusinessConfig.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/XxlJobBusinessConfig.java new file mode 100644 index 000000000..3e4e6508e --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/XxlJobBusinessConfig.java @@ -0,0 +1,20 @@ +package com.mhd.basic.domain.contractManage.repository.util; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class XxlJobBusinessConfig { + + @Value("${xxl.job.admin.address}") + private String adminAddress; + + @Value("${xxl.job.admin.cookie}") + private String adminCookie; + + @Bean + public XxlJobOpenApiUtil xxlJobOpenApiUtil() { + return new XxlJobOpenApiUtil(adminAddress, adminCookie); + } +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/XxlJobOpenApiUtil.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/XxlJobOpenApiUtil.java new file mode 100644 index 000000000..1fd942871 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/util/XxlJobOpenApiUtil.java @@ -0,0 +1,218 @@ +package com.mhd.basic.domain.contractManage.repository.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; + +/** + * 调用XXL‑JOB后台页面接口 + * 列表接口返回JSON,不再返回HTML + */ +@Slf4j +public class XxlJobOpenApiUtil { + + private final String adminUrl; + private final String cookie; + + public XxlJobOpenApiUtil(String adminUrl, String cookie) { + this.adminUrl = StrUtil.removeSuffix(adminUrl, "/"); + this.cookie = cookie; + } + + /** + * 新增定时任务 POST /jobinfo/add + * @param addReq 请求实体,与浏览器payload字段完全对齐 + * @return true=新增成功,false=失败 + */ + public boolean addJob(JobInfoAddReq addReq) { + String url = adminUrl + "/jobinfo/add"; + try { + Map formMap = BeanUtil.beanToMap(addReq); + HttpResponse response = HttpRequest.post(url) + .header("Cookie", cookie) + .form(formMap) + .execute(); + int status = response.getStatus(); + log.info("[XxlJob] addJob status:{}", status); + // 新增成功200重定向到列表页 + return status == 200; + } catch (Exception e) { + log.error("[XxlJob] addJob异常", e); + return false; + } + } + + /** + * 根据【任务描述+执行器参数】查询jobId + * 适配返回JSON格式的pageList接口 + * @param jobDesc 任务描述 + * @param executorParam 任务参数(业务shipperId) + * @return jobId,查不到返回null + */ + public Integer queryJobIdByDescAndParam(String jobDesc, String executorParam,String jobGroup) { + StringBuilder querySb = new StringBuilder(); + // start length必须 + querySb.append("start=0&length=10"); + + // jobGroup:为空就不拼接这个参数!!不要 jobGroup="" + // 你们业务固定jobGroup=3,直接写死3,不用传空 + if(StrUtil.isNotBlank(jobGroup)){ + querySb.append("&jobGroup=").append(jobGroup); + } + + // jobDesc + if(StrUtil.isNotBlank(jobDesc)){ + querySb.append("&jobDesc=").append(cn.hutool.core.net.URLEncodeUtil.encode(jobDesc)); + } + // executorParam + if(StrUtil.isNotBlank(executorParam)){ + querySb.append("&executorParam=").append(cn.hutool.core.net.URLEncodeUtil.encode(executorParam)); + } + // executorHandler为空,直接不携带 + // triggerStatus=-1 + querySb.append("&triggerStatus=-1"); + + String url = adminUrl + "/jobinfo/pageList?" + querySb; + log.info("[XxlJob] pageList请求url:{}",url); + try { + HttpResponse response = HttpRequest.get(url) + .header("Authorization", cookie) + .execute(); + + String jsonStr = response.body(); + log.info("[XxlJob] pageList响应:{}",jsonStr); + if (StrUtil.isBlank(jsonStr)) { + log.warn("[XxlJob] pageList返回空响应"); + return null; + } + JSONObject jsonObj = JSON.parseObject(jsonStr); + JSONArray jsonArray = jsonObj.getJSONArray("data"); + if(jsonArray == null){ + return null; + } + List dataList = jsonArray.toList(JobPageItem.class); + if (dataList == null || dataList.isEmpty()) { + return null; + } + for (JobPageItem item : dataList) { + if (StrUtil.equals(item.jobDesc, jobDesc) && StrUtil.equals(item.executorParam, executorParam)) { + return item.id; + } + } + return null; + } catch (Exception e) { + log.error("[XxlJob] queryJobId异常", e); + return null; + } + } + + + /** + * 暂停任务 POST /jobinfo/pause + * @param jobId xxl任务id + * @return true成功 + */ + public boolean pauseJob(Integer jobId) { + if (jobId == null) { + return false; + } + String url = adminUrl + "/jobinfo/pause"; + try { + HttpResponse response = HttpRequest.post(url) + .header("Cookie", cookie) + .form("id", jobId) + .execute(); + return response.getStatus() == 200; + } catch (Exception e) { + log.error("[XxlJob] pauseJob jobId:{}异常", jobId, e); + return false; + } + } + + /** + * 开启任务 POST /jobinfo/start + * @param jobId xxl任务id + * @return true成功 + */ + public boolean startJob(Integer jobId) { + if (jobId == null) { + return false; + } + String url = adminUrl + "/jobinfo/start"; + try { + HttpResponse response = HttpRequest.post(url) + .header("Cookie", cookie) + .form("id", jobId) + .execute(); + return response.getStatus() == 200; + } catch (Exception e) { + log.error("[XxlJob] startJob jobId:{}异常", jobId, e); + return false; + } + } + + /** + * 删除任务 POST /jobinfo/remove + * @param jobId xxl任务id + * @return true成功 + */ + public boolean removeJob(Integer jobId) { + if (jobId == null) { + return false; + } + String url = adminUrl + "/jobinfo/remove"; + try { + HttpResponse response = HttpRequest.post(url) + .header("Cookie", cookie) + .form("id", jobId) + .execute(); + return response.getStatus() == 200; + } catch (Exception e) { + log.error("[XxlJob] removeJob jobId:{}异常", jobId, e); + return false; + } + } + + /** + * pageList 返回data数组中每一项实体 + */ + @Data + public static class JobPageItem { + private Integer id; + private String jobDesc; + private String executorParam; + } + + /** + * add接口请求实体,与浏览器F12抓包payload字段一一对应 + */ + @Data + public static class JobInfoAddReq { + private Integer jobGroup; + private String jobDesc; + private String author; + private String alarmEmail; + private String scheduleType; + private String scheduleConf; + private String glueType; + private String executorHandler; + private String executorParam; + private String glueRemark; + private String glueSource; + private String executorRouteStrategy; + private Integer childJobId; + private String misfireStrategy; + private String executorBlockStrategy; + private Integer executorTimeout; + private Integer executorFailRetryCount; + } +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java index d4b05c992..d48b02d9e 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/service/ContractManageDomainService.java @@ -23,10 +23,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -193,6 +190,22 @@ public class ContractManageDomainService { } + /** + * 同结算客户+同温层+同租赁类型+使用中 的合同数量(用于唯一性校验) + */ + public long countByUniqueKey(Long settlementCustomersId, String warehouseTempLayerType, String contractRentType, Long excludeId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ContractManage::getSettlementCustomersId, settlementCustomersId); + wrapper.eq(ContractManage::getWarehouseTempLayerType, warehouseTempLayerType); + wrapper.eq(ContractManage::getContractRentType, contractRentType); + wrapper.eq(ContractManage::getContractState, 2); + wrapper.eq(ContractManage::getDelFlag, 1); + if (excludeId != null) { + wrapper.ne(ContractManage::getContractManageId, excludeId); + } + return contractManageService.count(wrapper); + } + public ContractManagePO getGeneralContract() { ContractManagePO contractManagePO = new ContractManagePO(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -228,4 +241,6 @@ public class ContractManageDomainService { } return contractManagePO; } + + } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/entity/ContractManageParameters.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/entity/ContractManageParameters.java new file mode 100644 index 000000000..428f32365 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/entity/ContractManageParameters.java @@ -0,0 +1,52 @@ +package com.mhd.basic.domain.contractManageParameters.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.mhd.common.core.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; +import lombok.Data; + + +/** + * 合约信息规则维护表 + * + * @author gen + * @date 2024-06-07 + */ + +@Data +public class ContractManageParameters extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理id") + @TableId(type = IdType.AUTO) + private Long id; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("合约信息规则维护") + @Excel(name = "合约信息规则维护表") + private String parametersJson; +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/facade/IContractManageParametersService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/facade/IContractManageParametersService.java new file mode 100644 index 000000000..f335cc106 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/facade/IContractManageParametersService.java @@ -0,0 +1,47 @@ +package com.mhd.basic.domain.contractManageParameters.repository.facade; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mhd.basic.domain.contractManageParameters.entity.ContractManageParameters; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; + +import java.util.List; + +/** + * 合约信息规则维护表Service接口 + * + * @author gen + * @date 2024-06-07 + */ +public interface IContractManageParametersService extends IService +{ + /** + * 分页查询合约信息规则维护表列表 + */ + public List queryList(ContractManageParametersDO contractManageParametersDO); + + /** + * 新增合约信息规则维护表 + */ + public Boolean insert(ContractManageParametersDO contractManageParametersDO); + + /** + * 修改合约信息规则维护表 + */ + public Boolean update(ContractManageParametersDO contractManageParametersDO); + + /** + * 批量删除合约信息规则维护表 + */ + public Boolean delete(Long[] ids); + + /** + * 查询合约信息规则维护表 + */ + public ContractManageParametersPO getInfo(Long id); + + /** + * 根据合同管理id查询合约信息规则维护列表 + */ + List getListByContractManageId(Long contractManageId); +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/mapper/ContractManageParametersMapper.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/mapper/ContractManageParametersMapper.java new file mode 100644 index 000000000..70d1f8cec --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/mapper/ContractManageParametersMapper.java @@ -0,0 +1,26 @@ +package com.mhd.basic.domain.contractManageParameters.repository.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mhd.basic.domain.contractManageParameters.entity.ContractManageParameters; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import org.apache.ibatis.annotations.Param; +/** + * 合约信息规则维护表Mapper接口 + * + * @author gen + * @date 2024-06-07 + */ +public interface ContractManageParametersMapper extends BaseMapper +{ + /** + * 查询合约信息规则维护表列表 + */ + public List queryList(@Param("contractManageParametersDO") ContractManageParametersDO contractManageParametersDO); + + /** + * 根据合同管理id查询合约信息规则维护列表 + */ + List getListByContractManageId(@Param("contractManageId") Long contractManageId); +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/persistence/ContractManageParametersImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/persistence/ContractManageParametersImpl.java new file mode 100644 index 000000000..83523bfda --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/persistence/ContractManageParametersImpl.java @@ -0,0 +1,86 @@ +package com.mhd.basic.domain.contractManageParameters.repository.persistence; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mhd.basic.domain.contractManageParameters.entity.ContractManageParameters; +import com.mhd.basic.domain.contractManageParameters.repository.facade.IContractManageParametersService; +import com.mhd.basic.domain.contractManageParameters.repository.mapper.ContractManageParametersMapper; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 合约信息规则维护表Service业务层处理 + * + * @author gen + * @date 2024-06-07 + */ +@Service +public class ContractManageParametersImpl extends ServiceImpl implements IContractManageParametersService{ + @Autowired + private ContractManageParametersMapper contractManageParametersMapper; + + /** + * 查询合约信息规则维护表列表 + */ + @Override + public List queryList(ContractManageParametersDO contractManageParametersDO) + { + return contractManageParametersMapper.queryList(contractManageParametersDO); + } + + /** + * 新增合约信息规则维护表 + */ + @Override + public Boolean insert(ContractManageParametersDO contractManageParametersDO) { + ContractManageParameters contractManageParameters = new ContractManageParameters(); + BeanUtils.copyProperties(contractManageParametersDO,contractManageParameters); + return this.save(contractManageParameters); + } + + /** + * 修改合约信息规则维护表 + */ + @Override + public Boolean update(ContractManageParametersDO contractManageParametersDO) { + ContractManageParameters contractManageParameters = new ContractManageParameters(); + BeanUtils.copyProperties(contractManageParametersDO,contractManageParameters); + return this.updateById(contractManageParameters); + } + + /** + * 批量删除合约信息规则维护表 + */ + @Override + public Boolean delete(Long[] ids ) { + List list = new ArrayList<>(); + for (Long id : ids) { + ContractManageParameters contractManageParameters = new ContractManageParameters(); + contractManageParameters.setId(id); + contractManageParameters.setDelFlag(2); + list.add(contractManageParameters); + } + return this.updateBatchById(list); + } + + /** + * 查询合约信息规则维护表 + */ + @Override + public ContractManageParametersPO getInfo(Long id) { + ContractManageParameters contractManageParameters = this.getById(id); + ContractManageParametersPO contractManageParametersPO = new ContractManageParametersPO(); + BeanUtils.copyProperties(contractManageParameters,contractManageParametersPO); + return contractManageParametersPO; + } + + @Override + public List getListByContractManageId(Long contractManageId) { + return contractManageParametersMapper.getListByContractManageId(contractManageId); + } +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/po/ContractManageParametersPO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/po/ContractManageParametersPO.java new file mode 100644 index 000000000..6c76a08a2 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/po/ContractManageParametersPO.java @@ -0,0 +1,51 @@ +package com.mhd.basic.domain.contractManageParameters.repository.po; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + + +/** + * 合约信息规则维护表对象 contract_manage_parameters + * + * @author gen + * @date 2024-06-07 + */ + +@Data +@ApiModel(value = "合约信息规则维护表对象", description = "合约信息规则维护表响应对象") +public class ContractManageParametersPO extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理id") + private Long id; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("合约信息规则维护") + @Excel(name = "合约信息规则维护表") + private String parametersJson; +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/todo/ContractManageParametersDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/todo/ContractManageParametersDO.java new file mode 100644 index 000000000..dc4a0d8a1 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/repository/todo/ContractManageParametersDO.java @@ -0,0 +1,49 @@ +package com.mhd.basic.domain.contractManageParameters.repository.todo; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + + +/** + * 合约信息规则维护表对象 contract_manage_parameters + * + * @author gen + * @date 2024-06-07 + */ + +@Data +public class ContractManageParametersDO extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理id") + private Long id; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("合约信息规则维护") + @Excel(name = "合约信息规则维护表") + private String parametersJson; +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/service/ContractManageParametersDomainService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/service/ContractManageParametersDomainService.java new file mode 100644 index 000000000..c8cfe039b --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManageParameters/service/ContractManageParametersDomainService.java @@ -0,0 +1,105 @@ +package com.mhd.basic.domain.contractManageParameters.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.mhd.basic.domain.contractManageParameters.entity.ContractManageParameters; +import com.mhd.basic.domain.contractManageParameters.repository.facade.IContractManageParametersService; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +/** + * 合约信息规则维护表 + * + * @author gen + * @date 2024-06-07 + */ +@Service +@Slf4j +public class ContractManageParametersDomainService { + + @Autowired + private IContractManageParametersService contractManageParametersService; + + + /** + * 分页查询合约信息规则维护表列表 + */ + public List queryList(ContractManageParametersDO contractManageParametersDO) { + return contractManageParametersService.queryList(contractManageParametersDO); + } + + + /** + * 新增合约信息规则维护表 + */ + public Boolean insert(ContractManageParametersDO contractManageParametersDO) { + + return contractManageParametersService.insert(contractManageParametersDO); + } + + /** + * 修改合约信息规则维护表 + */ + public Boolean update(ContractManageParametersDO contractManageParametersDO) { + return contractManageParametersService.update(contractManageParametersDO); + } + + /** + * 批量删除合约信息规则维护表 + */ + public Boolean delete(Long[] ids) { + return contractManageParametersService.delete(ids); + } + + /** + * 获取合约信息规则维护表详细信息 + */ + public ContractManageParametersPO getInfo(Long id) + { + return contractManageParametersService.getInfo(id); + } + + /** + * 根据合同管理id查询合约信息规则维护列表 + * @param contractManageId + * @return + */ + public List queryListByManageId(Long contractManageId) { + List resultList = new ArrayList<>(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ContractManageParameters::getContractManageId,contractManageId); + queryWrapper.eq(ContractManageParameters::getDelFlag,1); + List contractManageParametersList = contractManageParametersService.list(queryWrapper); + if(contractManageParametersList.size()>0){ + for (ContractManageParameters contractManageParameters : contractManageParametersList) { + ContractManageParametersPO contractManageParametersPO = new ContractManageParametersPO(); + BeanUtils.copyProperties(contractManageParameters,contractManageParametersPO); + resultList.add(contractManageParametersPO); + } + } + return resultList; + } + + public List queryListByManageIds(Collection contractManageIds) { + List resultList = new ArrayList<>(); + if (contractManageIds == null || contractManageIds.isEmpty()) { + return resultList; + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ContractManageParameters::getContractManageId, contractManageIds); + queryWrapper.eq(ContractManageParameters::getDelFlag, 1); + List entityList = contractManageParametersService.list(queryWrapper); + for (ContractManageParameters entity : entityList) { + ContractManageParametersPO po = new ContractManageParametersPO(); + BeanUtils.copyProperties(entity, po); + resultList.add(po); + } + return resultList; + } +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java index 95a81b9dd..0fa2435d5 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java @@ -413,4 +413,20 @@ public class MaterialBaseInfo extends BaseVOEntity{ @ApiModelProperty(name = "是否正常物料: 0-是 1-否") private Integer isNormalMaterial; + + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java index b876cb1c2..b07470a04 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java @@ -399,4 +399,20 @@ public class MaterialBaseInfoPO extends BaseVOEntity{ @ApiModelProperty(name = "是否正常物料: 0-是 1-否") private Integer isNormalMaterial; + + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java index d1e95243e..98e8e43d3 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java @@ -405,4 +405,20 @@ public class MaterialBaseInfoDO extends BaseVOEntity{ @ApiModelProperty(name = "是否正常物料: 0-是 1-否") private Integer isNormalMaterial; + + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/entity/MaterialClassify.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/entity/MaterialClassify.java index 081c81727..1fe580b67 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/entity/MaterialClassify.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/entity/MaterialClassify.java @@ -82,4 +82,20 @@ public class MaterialClassify extends BaseVOEntity{ @Excel(name = "单位") private String unit; + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; + } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/po/MaterialClassifyPO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/po/MaterialClassifyPO.java index 276e24432..4968f3cf1 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/po/MaterialClassifyPO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/po/MaterialClassifyPO.java @@ -89,4 +89,20 @@ public class MaterialClassifyPO extends BaseVOEntity{ @Excel(name = "单位") private String unit; + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; + } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/todo/MaterialClassifyDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/todo/MaterialClassifyDO.java index 9cc61a2fa..e325f813f 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/todo/MaterialClassifyDO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialClassify/repository/todo/MaterialClassifyDO.java @@ -89,4 +89,20 @@ public class MaterialClassifyDO extends BaseVOEntity{ @ApiModelProperty("单位") @Excel(name = "单位") private String unit; + + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/contractManageParameters/ContractManageParametersAssembler.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/contractManageParameters/ContractManageParametersAssembler.java new file mode 100644 index 000000000..f68062690 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/contractManageParameters/ContractManageParametersAssembler.java @@ -0,0 +1,65 @@ +package com.mhd.basic.interfaces.assember.contractManageParameters; + +import cn.hutool.core.util.ObjectUtil; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import com.mhd.basic.interfaces.dto.contractManageParameters.ContractManageParametersDTO; +import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; +import com.mhd.common.core.exception.digitalLogisticsException.UserError; +import com.mhd.common.core.utils.bean.BeanUtils; +import com.mhd.common.core.utils.IgnoreNullUtil; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 合约信息规则维护表Assembler + * + * @author gen + * @date 2024-06-07 + */ +@Component +public class ContractManageParametersAssembler { + + /** + * 转换实体 + */ + public ContractManageParametersDO toDO(ContractManageParametersDTO contractManageParametersDTO) { + ContractManageParametersDO contractManageParametersDO = new ContractManageParametersDO(); + // 拷贝 + BeanUtils.copyProperties(contractManageParametersDTO, contractManageParametersDO, IgnoreNullUtil.getNullPropertyNames(contractManageParametersDTO)); + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + String userName = loginUser.getUsername(); + // 获取登录人id + Long userId = loginUser.getUserid(); + if(contractManageParametersDTO.getId() != null){ + if(userId != null){ + contractManageParametersDO.setUpdateBy(userId); + }else { + contractManageParametersDO.setUpdateBy(new Long("0")); + } + contractManageParametersDO.setUpdateByName(userName); + contractManageParametersDO.setUpdateTime(new Date()); + + }else { + if(userId != null){ + contractManageParametersDO.setCreateBy(userId); + contractManageParametersDO.setUpdateBy(userId); + }else { + contractManageParametersDO.setCreateBy(new Long("0")); + contractManageParametersDO.setUpdateBy(new Long("0")); + } + contractManageParametersDO.setCreateByName(userName); + contractManageParametersDO.setUpdateByName(userName); + contractManageParametersDO.setCreateTime(new Date()); + contractManageParametersDO.setUpdateTime(new Date()); + contractManageParametersDO.setDelFlag(1); + } + return contractManageParametersDO; + } + +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManage/ContractManageDTO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManage/ContractManageDTO.java index 3a6b1900b..229340afd 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManage/ContractManageDTO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManage/ContractManageDTO.java @@ -216,4 +216,33 @@ public class ContractManageDTO extends BaseVOEntity{ @ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)") private Integer transportationCosts; + + @ApiModelProperty("合同租赁类型code") + private String contractRentType; + + @ApiModelProperty("合同租赁类型名称") + private String contractRentTypeName; + + @ApiModelProperty("仓库温层类型code") + private String warehouseTempLayerType; + + @ApiModelProperty("仓库温层类型编码名称") + private String warehouseTempLayerTypeName; + + @ApiModelProperty("合约信息规则维护JSON") + private String parametersJson; + + @ApiModelProperty("续期提前天数") + private Integer renewalAdvanceDays; + + @ApiModelProperty("标的物") + private String subjectMatter; + + @ApiModelProperty("性质") + private String nature; + + @ApiModelProperty("合同最初起始日") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "合同最初起始日", width = 30, dateFormat = "yyyy-MM-dd") + private Date initialStartDate; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManageParameters/ContractManageParametersDTO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManageParameters/ContractManageParametersDTO.java new file mode 100644 index 000000000..a67e8840a --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/contractManageParameters/ContractManageParametersDTO.java @@ -0,0 +1,48 @@ +package com.mhd.basic.interfaces.dto.contractManageParameters; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 合约信息规则维护表对象 contract_manage_parameters + * + * @author gen + * @date 2024-06-07 + */ + +@Data +public class ContractManageParametersDTO extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("合同管理id") + private Long id; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同名称") + @Excel(name = "合同名称") + private String contractName; + + @ApiModelProperty("合约信息规则维护") + @Excel(name = "合约信息规则维护表") + private String parametersJson; +} diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java index 9ab26e7a9..c3d8800d4 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java @@ -385,4 +385,19 @@ public class MaterialBaseInfoDTO extends BaseVOEntity{ @ApiModelProperty(name = "是否正常物料: 0-是 1-否") private Integer isNormalMaterial; + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialClassify/MaterialClassifyDTO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialClassify/MaterialClassifyDTO.java index 36a18c532..f33082987 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialClassify/MaterialClassifyDTO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialClassify/MaterialClassifyDTO.java @@ -89,4 +89,20 @@ public class MaterialClassifyDTO extends BaseVOEntity{ @ApiModelProperty("单位") @Excel(name = "单位") private String unit; + + @ApiModelProperty("每月仓租") + @Excel(name = "每月仓租") + private BigDecimal monthlyWarehouseRent; + + @ApiModelProperty("半月仓租") + @Excel(name = "半月仓租") + private BigDecimal halfMonthWarehouseRent; + + @ApiModelProperty("每月仓租单位") + @Excel(name = "每月仓租单位") + private String monthlyWarehouseRentUnit; + + @ApiModelProperty("半月仓租单位") + @Excel(name = "半月仓租单位") + private String halfMonthWarehouseRentUnit; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java index 139de36e1..e1138dd51 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java @@ -1,5 +1,7 @@ package com.mhd.basic.interfaces.facade.contractManage; +import com.alibaba.fastjson.JSONObject; + import java.io.IOException; import java.net.URLEncoder; import java.util.List; @@ -8,6 +10,10 @@ import com.mhd.basic.interfaces.assember.contractManage.ContractManageAssembler; import com.mhd.basic.interfaces.dto.contractManage.ContractManageExportVO; import com.mhd.basic.interfaces.dto.contractManage.SubjectAndPriceDTO; import com.mhd.basic.interfaces.dto.contractManage.SubjectAndPriceReturn; +import com.mhd.common.core.utils.sms.Result; +import com.mhd.system.api.domain.ContractManageFeignDTO; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -119,6 +125,25 @@ public class ContractManageApi extends BaseController{ } } + /** + * 保存合同管理 + */ + @ApiOperation("保存临时合同管理") + @PostMapping("/feignSave") + public AjaxResult feignSave(@RequestBody ContractManageFeignDTO contractManageFeignDTO) + { + try { + //转换实体 + ContractManageDTO contractManageDTO = new ContractManageDTO(); + BeanUtils.copyProperties(contractManageFeignDTO, contractManageDTO); + ContractManageDO contractManageDO = contractManageAssembler.toDO(contractManageDTO); + ContractManageDO insert = contractManageApplicationService.insertFeign(contractManageDO); + return AjaxResult.success(insert); + }catch (Exception e){ + return AjaxResult.error(e.getMessage()); + } + } + /** * 批量删除合同管理 */ @@ -230,4 +255,45 @@ public class ContractManageApi extends BaseController{ util.exportExcel(response, list, "合同导出"); } + + /** + * 1. 简单任务示例(Bean模式) + * 这里的 demoJobHandler 必须和调度中心配置一致 + */ + @XxlJob("pushContractManageToBms") + public void pushContractManageToBms() { + // 获取任务参数(货主id) + String shipperId = XxlJobHelper.getJobParam(); + logger.info("XXL-JOB 开始入库业务单推送bms计费流水,货主id参数:{}", shipperId); + try { + contractManageApplicationService.pushContractManageToBms(shipperId); + // 设置任务执行结果 + XxlJobHelper.handleSuccess("入库业务单推送bms计费流水执行成功"); + } catch (Exception e) { + logger.error("XXL-JOB 执行失败", e); + XxlJobHelper.handleFail("入库业务单推送bms计费流水执行失败:" + e.getMessage()); + } + } + + + + /** + * 根据公司名称获取合同列表(完整合同内容,支持分页) + * @param companyName 公司名称 + * @param pageNum 页码 + * @param pageSize 每页数量 + * @return 合同列表 + */ + @GetMapping("/contractNos") + public TableDataInfo getContractNosByCompanyName( + @RequestParam String companyName, + @RequestParam(defaultValue = "1") int pageNum, + @RequestParam(defaultValue = "10") int pageSize) { + List list = contractManageApplicationService.getContractNosByCompanyName(companyName, pageNum, pageSize); + TableDataInfo tableDataInfo = new TableDataInfo(list, list.size()); + tableDataInfo.setCode(200); + tableDataInfo.setMsg("查询成功"); + return tableDataInfo; + } + } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManageParameters/ContractManageParametersApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManageParameters/ContractManageParametersApi.java new file mode 100644 index 000000000..761a0d5dd --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManageParameters/ContractManageParametersApi.java @@ -0,0 +1,105 @@ +package com.mhd.basic.interfaces.facade.contractManageParameters; + +import java.util.List; + +import com.mhd.basic.interfaces.assember.contractManageParameters.ContractManageParametersAssembler; +import com.mhd.system.api.domain.ContractManageParametersFeign; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.mhd.basic.interfaces.dto.contractManageParameters.ContractManageParametersDTO; +import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; +import com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO; +import com.mhd.basic.application.service.contractManageParameters.ContractManageParametersApplicationService; +import javax.annotation.Resource; +import com.mhd.common.core.web.controller.BaseController; +import com.mhd.common.core.web.domain.AjaxResult; +import com.mhd.common.core.web.page.TableDataInfo; + +/** + * 合约信息规则维护表Api + * + * @author gen + * @date 2024-06-07 + */ +@RestController +@RequestMapping("/contractManageParametersApi") +public class ContractManageParametersApi extends BaseController{ + @Autowired + private ContractManageParametersApplicationService contractManageParametersApplicationService; + + @Resource + private ContractManageParametersAssembler contractManageParametersAssembler; + + /** + * 分页查询合约信息规则维护表列表 + */ + @ApiOperation("查询合约信息规则维护表列表") + @GetMapping("/list") + public TableDataInfo list(ContractManageParametersDTO contractManageParametersDTO) + { + //转换实体 + ContractManageParametersDO contractManageParametersDO = contractManageParametersAssembler.toDO(contractManageParametersDTO); + startPage(); + List list = contractManageParametersApplicationService.queryList(contractManageParametersDO); + return getDataTable(list); + } + + /** + * 编辑合约信息规则维护表 + */ + @ApiOperation("编辑合约信息规则维护表") + @PostMapping("/edit") + public AjaxResult edit(@RequestBody ContractManageParametersDTO contractManageParametersDTO) + { + //转换实体 + ContractManageParametersDO contractManageParametersDO = contractManageParametersAssembler.toDO(contractManageParametersDTO); + if(contractManageParametersDTO.getId() != null){ + return toAjax(contractManageParametersApplicationService.update(contractManageParametersDO)); + }else { + return toAjax(contractManageParametersApplicationService.insert(contractManageParametersDO)); + } + } + + /** + * 批量删除合约信息规则维护表 + */ + @ApiOperation("批量删除合约信息规则维护表") + @DeleteMapping("/deleteByIds/{ids}") + public AjaxResult delete(@PathVariable Long[] ids) + { + return toAjax(contractManageParametersApplicationService.delete(ids)); + } + + /** + * 获取合约信息规则维护表详细信息 + */ + @ApiOperation("获取合约信息规则维护表") + @GetMapping(value = "/getInfo/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(contractManageParametersApplicationService.getInfo(id)); + } + + @ApiOperation("Feign保存合约信息规则维护") + @PostMapping("/feignSave") + public AjaxResult feignSave(@RequestBody ContractManageParametersFeign contractManageParametersFeign) + { + try { + ContractManageParametersDTO contractManageParametersDTO = new ContractManageParametersDTO(); + BeanUtils.copyProperties(contractManageParametersFeign, contractManageParametersDTO); + ContractManageParametersDO contractManageParametersDO = contractManageParametersAssembler.toDO(contractManageParametersDTO); + return toAjax(contractManageParametersApplicationService.insert(contractManageParametersDO)); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/util/XxlJobConfig.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/util/XxlJobConfig.java new file mode 100644 index 000000000..1ce50c485 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/util/XxlJobConfig.java @@ -0,0 +1,54 @@ +package com.mhd.basic.util; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * XXL-JOB 配置类 + */ +@Configuration +public class XxlJobConfig { + private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + + @Value("${xxl.job.executor.address}") + private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); + xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml index 99aaf5e4c..2bdb0489c 100644 --- a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml +++ b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml @@ -14,16 +14,16 @@ spring: nacos: discovery: # server-addr: 127.0.0.1:8848 -# server-addr: 10.33.0.129:6010 - server-addr: 10.102.192.31:6848 + server-addr: 10.33.0.129:6010 +# server-addr: 10.102.192.31:6848 username: nacos password: manhuoda@2023 #线上正式环境 # server-addr: 10.102.192.105:6848 config: # server-addr: 127.0.0.1:8848 -# server-addr: 10.33.0.129:6010 - server-addr: 10.102.192.31:6848 + server-addr: 10.33.0.129:6010 +# server-addr: 10.102.192.31:6848 username: nacos password: manhuoda@2023 #线上正式环境 diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml index 41709be22..988aefebd 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml @@ -201,9 +201,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.top_organization_id = #{contractManageDO.topOrganizationId} + + and a.contract_rent_type = #{contractManageDO.contractRentType} + + + and a.warehouse_temp_layer_type = #{contractManageDO.warehouseTempLayerType} + and b.FIRST_SUBJECT_CODE = #{contractManageDO.firstSubjectCode} + + and a.renewal_advance_days = #{contractManageDO.renewalAdvanceDays} + + + and a.subject_matter like concat('%', #{contractManageDO.subjectMatter}, '%') + + + and a.nature = #{contractManageDO.nature} + + + and a.initial_start_date = #{contractManageDO.initialStartDate} + \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageParametersMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageParametersMapper.xml new file mode 100644 index 000000000..ac42df8f6 --- /dev/null +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageParametersMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + select + * + from contract_manage_parameters + + + + + + and contract_manage_id = #{contractManageId} + + + and top_organization_id = #{topOrganizationId} + + + and organization_id = #{organizationId} + + + and organization_name like concat('%', #{organizationName}, '%') + + + and contract_number like concat('%', #{contractNumber}, '%') + + + and contract_name like concat('%', #{contractName}, '%') + + + + + + + + diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/materialClassify/MaterialClassifyMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/materialClassify/MaterialClassifyMapper.xml index c6879ab23..b1feefbcc 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/materialClassify/MaterialClassifyMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/materialClassify/MaterialClassifyMapper.xml @@ -27,13 +27,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + select material_classify_id, organization_id, organization_name, top_organization_id, code, name, level, parent_code, parent_name, code_path, name_path, remark, nullify, create_time, create_by, create_by_name, update_time, update_by, - update_by_name, del_flag,CHARGE_STANDARD,unit + update_by_name, del_flag,CHARGE_STANDARD,unit, + monthly_warehouse_rent, half_month_warehouse_rent, monthly_warehouse_rent_unit, half_month_warehouse_rent_unit from material_classify diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java index 41ae750a4..78b243ee1 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java @@ -3,6 +3,7 @@ package com.mhd.user.interfaces.facade; import com.github.pagehelper.PageHelper; import com.mhd.common.core.domain.entity.R; import com.mhd.common.core.utils.bean.BeanUtils; +import com.mhd.common.core.utils.poi.ExcelUtil; import com.mhd.common.log.annotation.Log; import com.mhd.common.log.enums.BusinessType; import com.mhd.common.security.utils.SecurityUtils; @@ -24,6 +25,7 @@ import com.mhd.user.application.service.WechatMiniAppService; import com.mhd.user.interfaces.dto.updateDTO.SettlementInfoUpdateDTO; import com.mhd.user.interfaces.vo.SettlementInfoQueryVo; import com.mhd.user.interfaces.vo.ShipperMasterDataSyncTimeVo; +import com.mhd.user.interfaces.vo.UserShipperExportVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -31,6 +33,9 @@ import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; import java.util.*; @Api(tags = "用户中台管理-托运人管理") @@ -128,6 +133,33 @@ public class UserShipperAPI extends BaseController { return getDataTable(list); } + @Log(title = "托运人管理-导出", description ="导出托运人列表",businessType = BusinessType.EXPORT) + @ApiOperation("导出托运人列表") + @GetMapping(value = "/exportUserShipper", produces = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + public void exportUserShipper(UserShipperDTO userShipperDTO, HttpServletResponse response) throws IOException { + //转换实体 + UserShipperDO userShipperDO = userShipperAssember.toUserShipperDO(userShipperDTO); + //查询全量(不分页),复用列表查询逻辑(含数据权限过滤) + List list = userShipperApplicationService.userShipperList(userShipperDO); + + List exportList = new ArrayList<>(); + if (list != null) { + for (UserShipperPo po : list) { + UserShipperExportVO vo = new UserShipperExportVO(); + BeanUtils.copyProperties(po, vo); + exportList.add(vo); + } + } + + //设置下载头,防止浏览器乱码 + String fileName = URLEncoder.encode("托运人列表", "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + + ExcelUtil util = new ExcelUtil<>(UserShipperExportVO.class); + util.exportExcel(response, exportList, "托运人列表"); + } @ApiOperation("查询托运人列表统计表单") @GetMapping("/userShipperCount") diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/UserShipperExportVO.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/UserShipperExportVO.java new file mode 100644 index 000000000..dd5f4633a --- /dev/null +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/UserShipperExportVO.java @@ -0,0 +1,73 @@ +package com.mhd.user.interfaces.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 托运人(委托方)列表导出对象 + * + * @author gen + */ +@Data +@ApiModel(value = "托运人列表导出对象", description = "托运人列表导出对象") +public class UserShipperExportVO { + + @Excel(name = "登录账号", sort = 1, width = 20) + @ApiModelProperty(value = "登录账号") + private String userAccount; + + @Excel(name = "公司名称", sort = 2, width = 30) + @ApiModelProperty(value = "公司名称") + private String shipperEnterpriseName; + + @Excel(name = "联系人", sort = 3, width = 15) + @ApiModelProperty(value = "联系人") + private String emergencyContactName; + + @Excel(name = "联系电话", sort = 4, width = 18) + @ApiModelProperty(value = "联系电话") + private String emergencyContactPhone; + + @Excel(name = "地址", sort = 5, width = 30) + @ApiModelProperty(value = "企业注册地址") + private String shipperEnterpriseAddress; + + @Excel(name = "详细地址", sort = 6, width = 30) + @ApiModelProperty(value = "详细地址") + private String userAreaAddressShipper; + + @Excel(name = "备注", sort = 7, width = 25) + @ApiModelProperty(value = "备注") + private String remark; + + @Excel(name = "结算币种", sort = 8, width = 12) + @ApiModelProperty(value = "结算币种") + private String settlementCurrency; + + @Excel(name = "信用额度", sort = 9, width = 15) + @ApiModelProperty(value = "信用额度(授权额度)") + private BigDecimal authorizedQuota; + + @Excel(name = "信用占用", sort = 10, width = 15) + @ApiModelProperty(value = "信用占用") + private BigDecimal authorizedUsedAmount; + + @Excel(name = "信用余额", sort = 11, width = 15) + @ApiModelProperty(value = "信用余额") + private BigDecimal creditAmount; + + @Excel(name = "客户协议", sort = 12, width = 12) + @ApiModelProperty(value = "客户协议数量") + private BigDecimal agreementCount; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "最近同步信用时间", sort = 13, width = 22, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "最近同步信用时间") + private Date limitTime; +} diff --git a/mhd_bms/pom.xml b/mhd_bms/pom.xml index 7ecf1ce39..0ed437df8 100644 --- a/mhd_bms/pom.xml +++ b/mhd_bms/pom.xml @@ -94,6 +94,17 @@ DmJdbcDriver18 8.1.1.193 + + + com.xuxueli + xxl-job-core + 2.4.0 + + + org.jsoup + jsoup + 1.17.2 + com.alibaba diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/billingStatement/BillingStatementApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/billingStatement/BillingStatementApplicationService.java index 28104f719..e31712d19 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/billingStatement/BillingStatementApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/billingStatement/BillingStatementApplicationService.java @@ -3,17 +3,27 @@ package com.mhd.bms.application.server.billingStatement; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mhd.bms.application.server.billManage.BillManageApplicationService; import com.mhd.bms.domain.billManage.repository.po.BillManagePO; import com.mhd.bms.domain.billManage.service.BillManageDomainService; +import com.mhd.bms.domain.billingStatement.entity.BillingStatement; +import com.mhd.bms.domain.billingStatement.repository.facade.IBillingStatementService; +import com.mhd.bms.domain.billingStatement.repository.mapper.BillingStatementMapper; +import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementADDVO; import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementCollectPO; import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementPO; import com.mhd.bms.domain.billingStatement.repository.todo.BillingStatementCollectDO; import com.mhd.bms.domain.billingStatement.repository.todo.BillingStatementDO; import com.mhd.bms.domain.billingStatement.service.BillingStatementDomainService; +import com.mhd.bms.domain.businessDocument.entity.BusinessDocument; +import com.mhd.bms.domain.businessDocument.repository.facade.IBusinessDocumentService; import com.mhd.bms.domain.businessDocument.repository.po.BusinessDocumentPO; import com.mhd.bms.domain.settlementCustomers.entity.SettlementCustomers; +import com.mhd.bms.domain.settlementCustomers.repository.mapper.SettlementCustomersMapper; import com.mhd.bms.domain.settlementCustomers.service.SettlementCustomersDomainService; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.mapper.SettlementCustomersParametersMapper; import com.mhd.bms.infrastructure.feign.vo.ContractManagePO; import com.mhd.bms.infrastructure.feign.vo.ExpenseAccountPO; import com.mhd.bms.interfaces.assembler.billingStatement.BillingStatementAssembler; @@ -39,6 +49,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -64,6 +75,16 @@ public class BillingStatementApplicationService { private BillManageApplicationService billManageApplicationService; @Autowired private BillManageDomainService billManageDomainService; + @Autowired + private IBusinessDocumentService businessDocumentService; + @Autowired + private IBillingStatementService billingStatementService; + @Autowired + private BillingStatementMapper billingStatementMapper; + @Autowired + private SettlementCustomersMapper settlementCustomersMapper; + @Autowired + private SettlementCustomersParametersMapper settlementCustomersParametersMapper; /** @@ -631,4 +652,460 @@ public class BillingStatementApplicationService { } return billingStatementDomainService.getBillDetailsList(billingStatementDO); } + + public void pushBillManage(String shipperId) { + SettlementCustomers settlementCustomers = settlementCustomersMapper.selectOne(new LambdaQueryWrapper() + .eq(SettlementCustomers::getSettlementEntityId, shipperId) + .eq(SettlementCustomers::getDelFlag, 1)); + if (ObjectUtil.isNull(settlementCustomers)) { + //未找到结算对象 + return; + } + Long settlementCustomersId = settlementCustomers.getSettlementCustomersId(); + SettlementCustomersParameters settlementCustomersParameters = settlementCustomersParametersMapper.selectOne(new LambdaQueryWrapper() + .eq(SettlementCustomersParameters::getSettlementEntityId, settlementCustomersId) + .eq(SettlementCustomersParameters::getParametersName, "干仓计费配置")); + if (ObjectUtil.isNull(settlementCustomersParameters)) { + //结算对象未配置参数 + return; + } + String content = settlementCustomersParameters.getContent(); + Map contentMap = JSON.parseObject(content, Map.class); + //主费用开票策略 + String zfycl = (String) contentMap.get("zfycl"); + //附加费用开票策略 + String fjfykpcl = (String) contentMap.get("fjfykpcl"); + //合并开票 + Integer hbcp = (Integer) contentMap.get("hbcp"); + Boolean isMerge = false; + if (hbcp == 1) { + //判断是否合并开票 + isMerge = true; + } + + if (!isMerge) { + //按入仓单和收费事项分开计费 + if ("warehouse_receipt".equals(zfycl) && "fee_item".equals(fjfykpcl)) { + calcReceiptAndItemSeparately(settlementCustomersId); + } + //按合同和收费事项分开计费 + else if ("project_monthly".equals(zfycl) && "fee_item".equals(fjfykpcl)) { + calcContractAndItemSeparately(settlementCustomersId); + } + } else { + //按入仓单和收费事项合并计费 + if ("warehouse_receipt".equals(zfycl) && "fee_item".equals(fjfykpcl)) { + mergeCalcByReceiptAndItem(settlementCustomersId); + } + //按合同和收费事项合并计费 + else if ("project_monthly".equals(zfycl) && "fee_item".equals(fjfykpcl)) { + mergeCalcByContractAndItem(settlementCustomersId); + } + } + } + + /* + * 按入仓单和收费事项分开计费 + * */ + public void calcReceiptAndItemSeparately(Long settlementCustomersId) { + List list = businessDocumentService.list(new LambdaQueryWrapper() + .eq(BusinessDocument::getBelongModuleCode, "干仓") + .eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId) + .eq(BusinessDocument::getBusinessState, 3) + .eq(BusinessDocument::getDelFlag, 1)); + Map> groupedMap = list.stream() + .collect(Collectors.groupingBy(BusinessDocument::getFirstSubjectCode)); + for (Map.Entry> entry : groupedMap.entrySet()) { + List groupList = entry.getValue(); + String firstSubject = entry.getKey(); + if ("0D01".equals(firstSubject)) { + //主费用 + for (BusinessDocument businessDocument : groupList) { + String businessFlow = businessDocument.getBusinessFlow(); + List billingStatements = billingStatementService.list(new LambdaQueryWrapper() + .eq(BillingStatement::getBusinessFlow, businessFlow) + .eq(BillingStatement::getBillingState, 1) + .eq(BillingStatement::getDelFlag, 1)); + if (billingStatements != null && billingStatements.size() > 0) { + List billingStatementADDVOS = new ArrayList<>(); + List billingStatementIdList = new ArrayList<>(); + BigDecimal allAmount = BigDecimal.ZERO; + BigDecimal allFreeFee = BigDecimal.ZERO; + String settlementCurrency = "CNY"; + for (BillingStatement billingStatement : billingStatements) { + settlementCurrency = billingStatement.getSettlementCurrency(); + String firstSubjectCode = billingStatement.getFirstSubjectCode(); + String firstSubjectName = billingStatement.getFirstSubjectName(); + Long organizationId = billingStatement.getOrganizationId(); + Map taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName); + if (taxRateMap == null) continue; + Double taxRate = (Double) taxRateMap.get("taxRate"); + Long billingStatementId = billingStatement.getBillingStatementId(); + BillingStatementDTO billingStatementDTO = new BillingStatementDTO(); + billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId)); + billingStatementDTO.setAuditOperation(1); + reviewBilling(billingStatementDTO); + + BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO(); + BigDecimal amount = billingStatementDTO.getBillingAmount(); + BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal taxFreeFee = amount.subtract(taxAmount); + allAmount.add(amount); + allFreeFee.add(taxFreeFee); + billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId)); + billingStatementADDVO.setTaxRate(taxRate); + billingStatementADDVO.setTaxAmount(taxAmount); + billingStatementADDVO.setTaxFreeFee(taxFreeFee); + billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName()); + billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode()); + billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName()); + billingStatementADDVOS.add(billingStatementADDVO); + + billingStatementIdList.add(String.valueOf(billingStatementId)); + } + String ids = String.join(",", billingStatementIdList); + BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO(); + billingStatementDTO1.setBillingStatementIds(ids); + billingStatementDTO1.setBelongModuleCode("wms"); + billingStatementDTO1.setTaxAmount(allAmount); + billingStatementDTO1.setBillingAmount(allAmount); + billingStatementDTO1.setTaxFreeFee(allFreeFee); + billingStatementDTO1.setSettlementCurrency(settlementCurrency); + billingStatementDTO1.setBillingStatementList(billingStatementADDVOS); + generateBills(billingStatementDTO1); + } + } + } else { + //附加费用 + List businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList()); + List billingStatementList = billingStatementService.list(new LambdaQueryWrapper() + .in(BillingStatement::getBusinessFlow, businessFlowList) + .eq(BillingStatement::getBillingState, 1) + .eq(BillingStatement::getDelFlag, 1)); + if (billingStatementList != null && billingStatementList.size() > 0) { + List billingStatementADDVOS = new ArrayList<>(); + List billingStatementIdList = new ArrayList<>(); + BigDecimal allAmount = BigDecimal.ZERO; + BigDecimal allFreeFee = BigDecimal.ZERO; + String settlementCurrency = "CNY"; + for (BillingStatement billingStatement : billingStatementList) { + settlementCurrency = billingStatement.getSettlementCurrency(); + String firstSubjectCode = billingStatement.getFirstSubjectCode(); + String firstSubjectName = billingStatement.getFirstSubjectName(); + Long organizationId = billingStatement.getOrganizationId(); + Map taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName); + if (taxRateMap == null) continue; + Double taxRate = (Double) taxRateMap.get("taxRate"); + Long billingStatementId = billingStatement.getBillingStatementId(); + BillingStatementDTO billingStatementDTO = new BillingStatementDTO(); + billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId)); + billingStatementDTO.setAuditOperation(1); + reviewBilling(billingStatementDTO); + + BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO(); + BigDecimal amount = billingStatementDTO.getBillingAmount(); + BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal taxFreeFee = amount.subtract(taxAmount); + allAmount.add(amount); + allFreeFee.add(taxFreeFee); + billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId)); + billingStatementADDVO.setTaxRate(taxRate); + billingStatementADDVO.setTaxAmount(taxAmount); + billingStatementADDVO.setTaxFreeFee(taxFreeFee); + billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName()); + billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode()); + billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName()); + billingStatementADDVOS.add(billingStatementADDVO); + + billingStatementIdList.add(String.valueOf(billingStatementId)); + } + String ids = String.join(",", billingStatementIdList); + BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO(); + billingStatementDTO1.setBillingStatementIds(ids); + billingStatementDTO1.setBelongModuleCode("wms"); + billingStatementDTO1.setTaxAmount(allAmount); + billingStatementDTO1.setBillingAmount(allAmount); + billingStatementDTO1.setTaxFreeFee(allFreeFee); + billingStatementDTO1.setSettlementCurrency(settlementCurrency); + billingStatementDTO1.setBillingStatementList(billingStatementADDVOS); + generateBills(billingStatementDTO1); + } + } + } + } + + /* + * 按入仓单和收费事项合并计费 + * */ + public void mergeCalcByReceiptAndItem(Long settlementCustomersId) { + List list = businessDocumentService.list(new LambdaQueryWrapper() + .eq(BusinessDocument::getBelongModuleCode, "干仓") + .eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId) + .eq(BusinessDocument::getBusinessState, 3) + .eq(BusinessDocument::getDelFlag, 1)); + Map> groupedMap = list.stream() + .collect(Collectors.groupingBy(BusinessDocument::getOriginalBusinessNum)); + for (Map.Entry> entry : groupedMap.entrySet()) { + List groupList = entry.getValue(); + String originalBusinessNum = entry.getKey(); + List businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList()); + List billingStatementList = billingStatementService.list(new LambdaQueryWrapper() + .in(BillingStatement::getBusinessFlow, businessFlowList) + .eq(BillingStatement::getBillingState, 1) + .eq(BillingStatement::getDelFlag, 1)); + if (billingStatementList != null && billingStatementList.size() > 0) { + List billingStatementADDVOS = new ArrayList<>(); + List billingStatementIdList = new ArrayList<>(); + BigDecimal allAmount = BigDecimal.ZERO; + BigDecimal allFreeFee = BigDecimal.ZERO; + String settlementCurrency = "CNY"; + for (BillingStatement billingStatement : billingStatementList) { + settlementCurrency = billingStatement.getSettlementCurrency(); + String firstSubjectCode = billingStatement.getFirstSubjectCode(); + String firstSubjectName = billingStatement.getFirstSubjectName(); + Long organizationId = billingStatement.getOrganizationId(); + Map taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName); + if (taxRateMap == null) continue; + Double taxRate = (Double) taxRateMap.get("taxRate"); + Long billingStatementId = billingStatement.getBillingStatementId(); + BillingStatementDTO billingStatementDTO = new BillingStatementDTO(); + billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId)); + billingStatementDTO.setAuditOperation(1); + reviewBilling(billingStatementDTO); + + BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO(); + BigDecimal amount = billingStatementDTO.getBillingAmount(); + BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal taxFreeFee = amount.subtract(taxAmount); + allAmount.add(amount); + allFreeFee.add(taxFreeFee); + billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId)); + billingStatementADDVO.setTaxRate(taxRate); + billingStatementADDVO.setTaxAmount(taxAmount); + billingStatementADDVO.setTaxFreeFee(taxFreeFee); + billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName()); + billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode()); + billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName()); + billingStatementADDVOS.add(billingStatementADDVO); + + billingStatementIdList.add(String.valueOf(billingStatementId)); + } + String ids = String.join(",", billingStatementIdList); + BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO(); + billingStatementDTO1.setBillingStatementIds(ids); + billingStatementDTO1.setBelongModuleCode("wms"); + billingStatementDTO1.setTaxAmount(allAmount); + billingStatementDTO1.setBillingAmount(allAmount); + billingStatementDTO1.setTaxFreeFee(allFreeFee); + billingStatementDTO1.setSettlementCurrency(settlementCurrency); + billingStatementDTO1.setBillingStatementList(billingStatementADDVOS); + generateBills(billingStatementDTO1); + } + } + } + + /* + * 按合同和收费事项分开计费 + * */ + public void calcContractAndItemSeparately(Long settlementCustomersId) { + List list = businessDocumentService.list(new LambdaQueryWrapper() + .eq(BusinessDocument::getBelongModuleCode, "干仓") + .eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId) + .eq(BusinessDocument::getBusinessState, 3) + .eq(BusinessDocument::getDelFlag, 1)); + Map> groupedMap = list.stream() + .collect(Collectors.groupingBy(BusinessDocument::getFirstSubjectCode)); + for (Map.Entry> entry : groupedMap.entrySet()) { + List groupList = entry.getValue(); + String firstSubject = entry.getKey(); + if ("0D01".equals(firstSubject)) { + //主费用 + List businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList()); + List billingStatementList = billingStatementService.list(new LambdaQueryWrapper() + .in(BillingStatement::getBusinessFlow, businessFlowList) + .eq(BillingStatement::getBillingState, 1) + .eq(BillingStatement::getDelFlag, 1)); + if (billingStatementList != null && billingStatementList.size() > 0) { + Map> contractManageIdMap = billingStatementList.stream() + .collect(Collectors.groupingBy(BillingStatement::getContractManageId)); + for (Map.Entry> contractManageIdEntry : contractManageIdMap.entrySet()) { + Long contractManageId = contractManageIdEntry.getKey(); + List billingContractStatementList = contractManageIdEntry.getValue(); + + List billingStatementADDVOS = new ArrayList<>(); + BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO(); + List billingStatementIdList = new ArrayList<>(); + BigDecimal allAmount = BigDecimal.ZERO; + BigDecimal allFreeFee = BigDecimal.ZERO; + String settlementCurrency = "CNY"; + for (BillingStatement billingStatement : billingContractStatementList) { + settlementCurrency = billingStatement.getSettlementCurrency(); + String firstSubjectCode = billingStatement.getFirstSubjectCode(); + String firstSubjectName = billingStatement.getFirstSubjectName(); + Long organizationId = billingStatement.getOrganizationId(); + Map taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName); + if (taxRateMap == null) continue; + Double taxRate = (Double) taxRateMap.get("taxRate"); + Long billingStatementId = billingStatement.getBillingStatementId(); + BillingStatementDTO billingStatementDTO = new BillingStatementDTO(); + billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId)); + billingStatementDTO.setAuditOperation(1); + reviewBilling(billingStatementDTO); + + BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO(); + BigDecimal amount = billingStatementDTO.getBillingAmount(); + BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal taxFreeFee = amount.subtract(taxAmount); + allAmount.add(amount); + allFreeFee.add(taxFreeFee); + billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId)); + billingStatementADDVO.setTaxRate(taxRate); + billingStatementADDVO.setTaxAmount(taxAmount); + billingStatementADDVO.setTaxFreeFee(taxFreeFee); + billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName()); + billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode()); + billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName()); + billingStatementADDVOS.add(billingStatementADDVO); + + billingStatementIdList.add(String.valueOf(billingStatementId)); + } + String ids = String.join(",", billingStatementIdList); + billingStatementDTO1.setBillingStatementIds(ids); + billingStatementDTO1.setBelongModuleCode("wms"); + billingStatementDTO1.setTaxAmount(allAmount); + billingStatementDTO1.setBillingAmount(allAmount); + billingStatementDTO1.setTaxFreeFee(allFreeFee); + billingStatementDTO1.setSettlementCurrency(settlementCurrency); + billingStatementDTO1.setBillingStatementList(billingStatementADDVOS); + generateBills(billingStatementDTO1); + } + } + } else { + //附加费用 + List businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList()); + List billingStatementList = billingStatementService.list(new LambdaQueryWrapper() + .in(BillingStatement::getBusinessFlow, businessFlowList) + .eq(BillingStatement::getBillingState, 1) + .eq(BillingStatement::getDelFlag, 1)); + if (billingStatementList != null && billingStatementList.size() > 0) { + List billingStatementADDVOS = new ArrayList<>(); + List billingStatementIdList = new ArrayList<>(); + BigDecimal allAmount = BigDecimal.ZERO; + BigDecimal allFreeFee = BigDecimal.ZERO; + String settlementCurrency = "CNY"; + for (BillingStatement billingStatement : billingStatementList) { + settlementCurrency = billingStatement.getSettlementCurrency(); + String firstSubjectCode = billingStatement.getFirstSubjectCode(); + String firstSubjectName = billingStatement.getFirstSubjectName(); + Long organizationId = billingStatement.getOrganizationId(); + Map taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName); + if (taxRateMap == null) continue; + Double taxRate = (Double) taxRateMap.get("taxRate"); + Long billingStatementId = billingStatement.getBillingStatementId(); + BillingStatementDTO billingStatementDTO = new BillingStatementDTO(); + billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId)); + billingStatementDTO.setAuditOperation(1); + reviewBilling(billingStatementDTO); + + BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO(); + BigDecimal amount = billingStatementDTO.getBillingAmount(); + BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal taxFreeFee = amount.subtract(taxAmount); + allAmount.add(amount); + allFreeFee.add(taxFreeFee); + billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId)); + billingStatementADDVO.setTaxRate(taxRate); + billingStatementADDVO.setTaxAmount(taxAmount); + billingStatementADDVO.setTaxFreeFee(taxFreeFee); + billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName()); + billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode()); + billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName()); + billingStatementADDVOS.add(billingStatementADDVO); + + billingStatementIdList.add(String.valueOf(billingStatementId)); + } + String ids = String.join(",", billingStatementIdList); + BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO(); + billingStatementDTO1.setBillingStatementIds(ids); + billingStatementDTO1.setBelongModuleCode("wms"); + billingStatementDTO1.setTaxAmount(allAmount); + billingStatementDTO1.setBillingAmount(allAmount); + billingStatementDTO1.setTaxFreeFee(allFreeFee); + billingStatementDTO1.setSettlementCurrency(settlementCurrency); + billingStatementDTO1.setBillingStatementList(billingStatementADDVOS); + generateBills(billingStatementDTO1); + } + } + } + } + + /* + * 按合同和收费事项合并计费 + * */ + public void mergeCalcByContractAndItem(Long settlementCustomersId) { + List list = businessDocumentService.list(new LambdaQueryWrapper() + .eq(BusinessDocument::getBelongModuleCode, "干仓") + .eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId) + .eq(BusinessDocument::getBusinessState, 3) + .eq(BusinessDocument::getDelFlag, 1)); + Map> groupedMap = list.stream() + .collect(Collectors.groupingBy(BusinessDocument::getContractManageId)); + for (Map.Entry> entry : groupedMap.entrySet()) { + List groupList = entry.getValue(); + Long contractManageId = entry.getKey(); + List businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList()); + List billingStatementList = billingStatementService.list(new LambdaQueryWrapper() + .in(BillingStatement::getBusinessFlow, businessFlowList) + .eq(BillingStatement::getBillingState, 1) + .eq(BillingStatement::getDelFlag, 1)); + if (billingStatementList != null && billingStatementList.size() > 0) { + List billingStatementADDVOS = new ArrayList<>(); + List billingStatementIdList = new ArrayList<>(); + BigDecimal allAmount = BigDecimal.ZERO; + BigDecimal allFreeFee = BigDecimal.ZERO; + String settlementCurrency = "CNY"; + for (BillingStatement billingStatement : billingStatementList) { + settlementCurrency = billingStatement.getSettlementCurrency(); + String firstSubjectCode = billingStatement.getFirstSubjectCode(); + String firstSubjectName = billingStatement.getFirstSubjectName(); + Long organizationId = billingStatement.getOrganizationId(); + Map taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName); + if (taxRateMap == null) continue; + Double taxRate = (Double) taxRateMap.get("taxRate"); + Long billingStatementId = billingStatement.getBillingStatementId(); + BillingStatementDTO billingStatementDTO = new BillingStatementDTO(); + billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId)); + billingStatementDTO.setAuditOperation(1); + reviewBilling(billingStatementDTO); + + BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO(); + BigDecimal amount = billingStatementDTO.getBillingAmount(); + BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal taxFreeFee = amount.subtract(taxAmount); + allAmount.add(amount); + allFreeFee.add(taxFreeFee); + billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId)); + billingStatementADDVO.setTaxRate(taxRate); + billingStatementADDVO.setTaxAmount(taxAmount); + billingStatementADDVO.setTaxFreeFee(taxFreeFee); + billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName()); + billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode()); + billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName()); + billingStatementADDVOS.add(billingStatementADDVO); + + billingStatementIdList.add(String.valueOf(billingStatementId)); + } + String ids = String.join(",", billingStatementIdList); + BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO(); + billingStatementDTO1.setBillingStatementIds(ids); + billingStatementDTO1.setBelongModuleCode("wms"); + billingStatementDTO1.setTaxAmount(allAmount); + billingStatementDTO1.setBillingAmount(allAmount); + billingStatementDTO1.setTaxFreeFee(allFreeFee); + billingStatementDTO1.setSettlementCurrency(settlementCurrency); + billingStatementDTO1.setBillingStatementList(billingStatementADDVOS); + generateBills(billingStatementDTO1); + } + } + } } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomers/SettlementCustomersApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomers/SettlementCustomersApplicationService.java index 76879467f..32bbfa10e 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomers/SettlementCustomersApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomers/SettlementCustomersApplicationService.java @@ -1,5 +1,6 @@ package com.mhd.bms.application.server.settlementCustomers; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; @@ -9,12 +10,16 @@ import com.mhd.bms.domain.settlementCustomers.repository.mapper.SettlementCustom import com.mhd.bms.domain.settlementCustomers.repository.po.SettlementCustomersPO; import com.mhd.bms.domain.settlementCustomers.repository.todo.SettlementCustomersDO; import com.mhd.bms.domain.settlementCustomers.repository.persistence.SettlementCustomersImpl; +import com.mhd.bms.domain.settlementCustomers.repository.util.XxlJobOpenApiUtil; import com.mhd.bms.domain.settlementCustomers.service.SettlementCustomersDomainService; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.facade.ISettlementCustomersNcConfigService; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.facade.ISettlementCustomersParametersService; import com.mhd.bms.interfaces.dto.settlementCustomers.SettlementCustomersDTO; -import com.mhd.common.core.domain.po.SysDictDataVo; -import com.mhd.common.core.domain.po.UserDriverPo; -import com.mhd.common.core.domain.po.UserPo; -import com.mhd.common.core.domain.po.UserShipperPo; +import com.mhd.bms.interfaces.dto.settlementCustomersNcConfig.SettlementCustomersNcConfigDTO; +import com.mhd.bms.interfaces.dto.settlementCustomersParameters.SettlementCustomersParametersDTO; +import com.mhd.common.core.domain.po.*; import com.mhd.common.core.enums.DictCode; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; @@ -25,19 +30,25 @@ import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.SystemServiceFeign; import com.mhd.system.api.UserServiceFeign; +import com.mhd.system.api.domain.BatchDetailFeignPO; +import com.mhd.system.api.domain.ContractManageFeignDTO; +import com.mhd.system.api.domain.ContractManageParametersFeign; +import com.mhd.system.api.domain.WarehouseFeignPO; import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -60,9 +71,17 @@ public class SettlementCustomersApplicationService { private SettlementCustomersMapper settlementCustomersMapper; @Autowired private SettlementCustomersImpl settlementCustomersImpl; + @Autowired + private ISettlementCustomersParametersService settlementCustomersParametersService; + @Autowired + private ISettlementCustomersNcConfigService settlementCustomersNcConfigService; private static final int SYNC_BATCH_SIZE = 500; - + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + private static final String token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjozNTYzLCJ0b3BPcmdhbml6YXRpb25JZCI6MjgyNywidXNlcl9rZXkiOiI0N2MzY2U4My0wMmFjLTQ0NTQtOTdiYS1lYmQwMDc2MzNiNDMiLCJ1c2VybmFtZSI6ImNhbmdtYSJ9.tnZyywwburfBo3Kizdhfk5eYdXbrrZ9976Z0W7GrS6UqSpKwfI2RwdRwfYx7DbD7Ri1Fdj_eOVxBkjvdFF226Q"; + @Resource + private XxlJobOpenApiUtil apiUtil; /** * 分页查询结算对象列表 */ @@ -138,7 +157,38 @@ public class SettlementCustomersApplicationService { settlementCustomersDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); settlementCustomersDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); settlementCustomersDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); - return settlementCustomersDomainService.insert(settlementCustomersDO); + Boolean insert = settlementCustomersDomainService.insert(settlementCustomersDO); + if (insert) { + List settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigs(); + if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) { + for (SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO : settlementCustomersNcConfigDTOList) { + SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig(); + settlementCustomersNcConfigDTO.setSettlementCustomersId(settlementCustomersDO.getSettlementCustomersId()); + settlementCustomersNcConfigDTO.setOrganizationId(settlementCustomersDO.getOrganizationId()); + settlementCustomersNcConfigDTO.setTopOrganizationId(settlementCustomersDO.getTopOrganizationId()); + settlementCustomersNcConfigDTO.setOrganizationName(settlementCustomersDO.getOrganizationName()); + BeanUtils.copyProperties(settlementCustomersNcConfigDTO, settlementCustomersNcConfig); + settlementCustomersNcConfigService.save(settlementCustomersNcConfig); + } + } + List settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParameters(); + if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) { + for (SettlementCustomersParametersDTO settlementCustomersParametersDTO : settlementCustomersParametersDTOList) { + SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters(); + settlementCustomersParametersDTO.setSettlementCustomersId(settlementCustomersDO.getSettlementCustomersId()); + settlementCustomersParametersDTO.setOrganizationId(settlementCustomersDO.getOrganizationId()); + settlementCustomersParametersDTO.setTopOrganizationId(settlementCustomersDO.getTopOrganizationId()); + settlementCustomersParametersDTO.setOrganizationName(settlementCustomersDO.getOrganizationName()); + settlementCustomersParametersDTO.setSettlementCustomersCode(settlementCustomersDO.getSettlementCustomersCode()); + settlementCustomersParametersDTO.setSettlementEntity(settlementCustomersDO.getSettlementEntity()); + settlementCustomersParametersDTO.setSettlementEntityId(settlementCustomersDO.getSettlementEntityId()); + BeanUtils.copyProperties(settlementCustomersParametersDTO, settlementCustomersParameters); + settlementCustomersParametersService.save(settlementCustomersParameters); + } + } + } + + return insert; } /** @@ -203,6 +253,7 @@ public class SettlementCustomersApplicationService { /** * 修改结算对象 */ + @Transactional public Boolean update(SettlementCustomersDO settlementCustomersDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtil.isNull(loginUser)) { @@ -216,9 +267,211 @@ public class SettlementCustomersApplicationService { } //处理数据字典 handleDict(settlementCustomersDO); + + List settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigs(); + if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) { + settlementCustomersNcConfigService.remove(new LambdaQueryWrapper() + .eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersDO.getSettlementCustomersId())); + for (SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO : settlementCustomersNcConfigDTOList) { + SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig(); + settlementCustomersNcConfigDTO.setSettlementCustomersId(settlementCustomersDO.getSettlementCustomersId()); + settlementCustomersNcConfigDTO.setOrganizationId(settlementCustomersDO.getOrganizationId()); + settlementCustomersNcConfigDTO.setTopOrganizationId(settlementCustomersDO.getTopOrganizationId()); + settlementCustomersNcConfigDTO.setOrganizationName(settlementCustomersDO.getOrganizationName()); + BeanUtils.copyProperties(settlementCustomersNcConfigDTO, settlementCustomersNcConfig); + settlementCustomersNcConfigService.save(settlementCustomersNcConfig); + } + } + List settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParameters(); + if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) { + settlementCustomersParametersService.remove(new LambdaQueryWrapper() + .eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersDO.getSettlementCustomersId())); + for (SettlementCustomersParametersDTO settlementCustomersParametersDTO : settlementCustomersParametersDTOList) { + SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters(); + settlementCustomersParametersDTO.setSettlementCustomersId(settlementCustomersDO.getSettlementCustomersId()); + settlementCustomersParametersDTO.setOrganizationId(settlementCustomersDO.getOrganizationId()); + settlementCustomersParametersDTO.setTopOrganizationId(settlementCustomersDO.getTopOrganizationId()); + settlementCustomersParametersDTO.setOrganizationName(settlementCustomersDO.getOrganizationName()); + settlementCustomersParametersDTO.setSettlementCustomersCode(settlementCustomersDO.getSettlementCustomersCode()); + settlementCustomersParametersDTO.setSettlementEntity(settlementCustomersDO.getSettlementEntity()); + settlementCustomersParametersDTO.setSettlementEntityId(settlementCustomersDO.getSettlementEntityId()); + BeanUtils.copyProperties(settlementCustomersParametersDTO, settlementCustomersParameters); + Long contractManageId1 = settlementCustomersParameters.getContractManageId(); + if (contractManageId1==null) { + ContractManageFeignDTO contractManageDTO = new ContractManageFeignDTO(); + contractManageDTO.setSettlementCustomersCode(settlementCustomersDO.getSettlementCustomersCode()); + contractManageDTO.setContractRentType("TEMP"); + contractManageDTO.setContractRentTypeName("临时合同"); + contractManageDTO.setOriginalContractNumber(generateHtCode()); + contractManageDTO.setContractName("临时合同"); + contractManageDTO.setSigningUnit(settlementCustomersDO.getOrganizationName()); + contractManageDTO.setCustomerTypeCode("1"); + contractManageDTO.setCommonContractFlag(2); + contractManageDTO.setSigningDate(new Date()); + contractManageDTO.setEffectiveDate(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.set(9999, Calendar.DECEMBER, 31, 0, 0, 0); + Date date = calendar.getTime(); + contractManageDTO.setExpirationDate(date); + contractManageDTO.setContractState(2); + contractManageDTO.setPaymentDate(new Date()); + contractManageDTO.setBillDays(10); + contractManageDTO.setContractType(1); + AjaxResult ajaxResult = systemServiceFeign.feignSave(contractManageDTO); + if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) { + ContractManageFeignDTO contractManageFeignDTO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), ContractManageFeignDTO.class); + Long contractManageId = contractManageFeignDTO.getContractManageId(); + String originalContractNumber = contractManageFeignDTO.getOriginalContractNumber(); + settlementCustomersParameters.setContractManageId(contractManageId); + settlementCustomersParameters.setContractNumber(originalContractNumber); + ContractManageParametersFeign contractManageParametersFeign = new ContractManageParametersFeign(); + contractManageParametersFeign.setContractManageId(contractManageId); + contractManageParametersFeign.setContractName(contractManageFeignDTO.getContractName()); + contractManageParametersFeign.setContractNumber(contractManageFeignDTO.getContractNumber()); + contractManageParametersFeign.setParametersJson(settlementCustomersParametersDTO.getContent()); + contractManageParametersFeign.setOrganizationId(settlementCustomersDO.getOrganizationId()); + contractManageParametersFeign.setOrganizationName(settlementCustomersDO.getOrganizationName()); + contractManageParametersFeign.setTopOrganizationId(settlementCustomersDO.getTopOrganizationId()); + AjaxResult paramResult = systemServiceFeign.feignSaveContractParameters(contractManageParametersFeign); + if (paramResult == null || !"200".equals(String.valueOf(paramResult.get("code")))) { + throw new ServiceException("保存合同参数失败"); + } + Long settlementEntityId = settlementCustomersDO.getSettlementEntityId(); + if (settlementEntityId != null) { + stopXxlJob(settlementCustomersDO.getPushBillingRecordJobId()); + stopXxlJob(settlementCustomersDO.getPushBillManageJobId()); + //生成唯一业务流水号拼接至JobDesc,保证本次新建任务的JobDesc唯一,据此查询jobId不会命中历史任务 + String xxlJobBizNo = generateXxlJobBizNo(); + Integer jobId = addXxlJob(String.valueOf(settlementEntityId), xxlJobBizNo); + Integer jobId1 = addXxlJob1(String.valueOf(settlementEntityId), xxlJobBizNo); + settlementCustomersDO.setPushBillingRecordJobId(jobId); + settlementCustomersDO.setPushBillManageJobId(jobId1); + } + } else { + throw new ServiceException("创建临时合同失败"); + } + } + settlementCustomersParametersService.save(settlementCustomersParameters); + } + } return settlementCustomersDomainService.update(settlementCustomersDO); } + + /** + * 创建夜间23点定时任务 + * @param shipperId 结算对象id,作为任务参数 + * @param bizNo 业务流水号,拼接进JobDesc保证每个任务描述唯一,据此精确查询本次新建的xxlJobId + * @return xxlJobId 保存到业务表,后续用于删除/暂停 + */ + public Integer addXxlJob(String shipperId, String bizNo) { + XxlJobOpenApiUtil.JobInfoAddReq req = new XxlJobOpenApiUtil.JobInfoAddReq(); + req.setJobGroup(3); + req.setJobDesc("散租推送计费单据/流水任务,结算对象id:" + shipperId + ",业务流水号:" + bizNo); + req.setAuthor("system"); + req.setAlarmEmail(""); + req.setScheduleType("CRON"); + // 每天晚上23点执行 + req.setScheduleConf("0 0 1 * * ?"); + req.setGlueType("BEAN"); + req.setExecutorHandler("pushBillingRecord"); + req.setExecutorParam(shipperId); + req.setGlueRemark(""); + req.setGlueSource(""); + req.setExecutorRouteStrategy("FIRST"); + req.setChildJobId(null); + req.setMisfireStrategy("DO_NOTHING"); + req.setExecutorBlockStrategy("SERIAL_EXECUTION"); + req.setExecutorTimeout(0); + req.setExecutorFailRetryCount(0); + + boolean addOk = apiUtil.addJob(req); + if (!addOk) { + throw new RuntimeException("创建夜间定时任务失败"); + } + Integer xxlJobId = apiUtil.queryJobIdByDescAndParam(req.getJobDesc(), shipperId,"3"); + if (xxlJobId == null) { + throw new RuntimeException("定时任务创建成功,但查询jobId失败"); + } + return xxlJobId; + } + + /** + * 创建夜间23点定时任务 + * @param shipperId 结算对象id,作为任务参数 + * @param bizNo 业务流水号,拼接进JobDesc保证每个任务描述唯一,据此精确查询本次新建的xxlJobId + * @return xxlJobId 保存到业务表,后续用于删除/暂停 + */ + public Integer addXxlJob1(String shipperId, String bizNo) { + XxlJobOpenApiUtil.JobInfoAddReq req = new XxlJobOpenApiUtil.JobInfoAddReq(); + req.setJobGroup(6); + req.setJobDesc("计费单据/流水生成发票任务,结算对象id:" + shipperId + ",业务流水号:" + bizNo); + req.setAuthor("system"); + req.setAlarmEmail(""); + req.setScheduleType("CRON"); + // 每天晚上23点执行 + req.setScheduleConf("0 0 1 * * ?"); + req.setGlueType("BEAN"); + req.setExecutorHandler("pushBillManage"); + req.setExecutorParam(shipperId); + req.setGlueRemark(""); + req.setGlueSource(""); + req.setExecutorRouteStrategy("FIRST"); + req.setChildJobId(null); + req.setMisfireStrategy("DO_NOTHING"); + req.setExecutorBlockStrategy("SERIAL_EXECUTION"); + req.setExecutorTimeout(0); + req.setExecutorFailRetryCount(0); + + boolean addOk = apiUtil.addJob(req); + if (!addOk) { + throw new RuntimeException("创建夜间定时任务失败"); + } + Integer xxlJobId = apiUtil.queryJobIdByDescAndParam(req.getJobDesc(), shipperId,"6"); + if (xxlJobId == null) { + throw new RuntimeException("定时任务创建成功,但查询jobId失败"); + } + return xxlJobId; + } + + + public void stopXxlJob(Integer shipperId) { + //1.实例化工具类,建议交给Spring管理 + XxlJobOpenApiUtil apiUtil = new XxlJobOpenApiUtil(adminAddresses,token); + //3.调用创建任务接口 ,返回任务ID + apiUtil.pauseJob(shipperId); + } + + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyMMdd"); + private static final DateTimeFormatter JOB_BIZ_NO_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); + private static final Random RANDOM = new Random(); + + /** + * 生成编码:HT + 当天yyMMdd + 6位随机数字 + * 示例:HT260828123456 + * @return 编码字符串 + */ + public static String generateHtCode() { + // 当天yyMMdd + String dateStr = LocalDate.now().format(FORMATTER); + // 6位随机数 000000‑999999 + int randomNum = RANDOM.nextInt(1_000_000); + String randomStr = String.format("%06d", randomNum); + return "HT" + dateStr + randomStr; + } + + /** + * 生成xxl-job任务业务流水号:JOB + 当天yyMMddHHmmssSSS + 6位随机数字,保证每次创建的JobDesc唯一 + * 示例:JOB260905102030123123456 + * @return 业务流水号字符串 + */ + public static String generateXxlJobBizNo() { + String dateTimeStr = LocalDateTime.now().format(JOB_BIZ_NO_FORMATTER); + int randomNum = RANDOM.nextInt(1_000_000); + String randomStr = String.format("%06d", randomNum); + return "JOB" + dateTimeStr + randomStr; + } + /** * 批量删除结算对象 */ @@ -433,9 +686,17 @@ public class SettlementCustomersApplicationService { ? userShipperPo.getTopOrganizationId() : loginUser.getUserPo().getTopOrganizationId()); saveEntity.setCreateTime(new Date()); + saveEntity.setOrgCode(userShipperPo.getOrgCode()); return saveEntity; } + public Boolean updatePushContractManageToBmsJobId(Long settlementCustomersId, Integer jobId) { + return settlementCustomersImpl.lambdaUpdate() + .eq(SettlementCustomers::getSettlementCustomersId, settlementCustomersId) + .set(SettlementCustomers::getPushContractManageToBmsJobId, jobId) + .update(); + } + private SettlementCustomersDO buildDriverSettlementCustomerDO(UserDriverPo userDriverPo, LoginUser loginUser, Long organizationId) { SettlementCustomersDO saveEntity = new SettlementCustomersDO(); saveEntity.setSettlementEntityId(userDriverPo.getUserId()); diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomersNcConfig/SettlementCustomersNcConfigApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomersNcConfig/SettlementCustomersNcConfigApplicationService.java new file mode 100644 index 000000000..fa1d51765 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomersNcConfig/SettlementCustomersNcConfigApplicationService.java @@ -0,0 +1,87 @@ +package com.mhd.bms.application.server.settlementCustomersNcConfig; + +import cn.hutool.core.util.ObjectUtil; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.po.SettlementCustomersNcConfigPO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; +import com.mhd.bms.domain.settlementCustomersNcConfig.service.SettlementCustomersNcConfigDomainService; +import com.mhd.bms.interfaces.dto.settlementCustomersNcConfig.SettlementCustomersNcConfigDTO; +import com.mhd.common.core.exception.ServiceException; +import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; +import com.mhd.common.core.exception.digitalLogisticsException.UserError; +import com.mhd.common.core.utils.StringUtils; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 结算对象NC配置ApplicationService + * + * @author gen + * @date 2024-06-17 + */ +@Service +@Slf4j +public class SettlementCustomersNcConfigApplicationService { + + @Autowired + private SettlementCustomersNcConfigDomainService settlementCustomersNcConfigDomainService; + + /** + * 分页查询结算对象NC配置列表 + */ + public List queryList(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + return settlementCustomersNcConfigDomainService.queryList(settlementCustomersNcConfigDO); + } + + /** + * 新增结算对象NC配置 + */ + public Boolean insert(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + settlementCustomersNcConfigDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + settlementCustomersNcConfigDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + settlementCustomersNcConfigDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + return settlementCustomersNcConfigDomainService.insert(settlementCustomersNcConfigDO); + } + + /** + * 修改结算对象NC配置 + */ + public Boolean update(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + return settlementCustomersNcConfigDomainService.update(settlementCustomersNcConfigDO); + } + + /** + * 获取结算对象NC配置详细信息 + */ + public SettlementCustomersNcConfigPO getInfo(Long id) { + return settlementCustomersNcConfigDomainService.getInfo(id); + } + + /** + * 批量删除结算对象NC配置 + */ + public Boolean deleteByIds(SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO) { + if (!StringUtils.isNotEmpty(settlementCustomersNcConfigDTO.getIds())) { + throw new ServiceException("id不能为空"); + } + Set idSet = Stream.of(settlementCustomersNcConfigDTO.getIds().split(",")).collect(Collectors.toSet()); + Long[] ids = idSet.stream().map(Long::valueOf).toArray(Long[]::new); + return settlementCustomersNcConfigDomainService.delete(ids); + } +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomersParameters/SettlementCustomersParametersApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomersParameters/SettlementCustomersParametersApplicationService.java new file mode 100644 index 000000000..3863fb2d7 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/settlementCustomersParameters/SettlementCustomersParametersApplicationService.java @@ -0,0 +1,94 @@ +package com.mhd.bms.application.server.settlementCustomersParameters; + +import cn.hutool.core.util.ObjectUtil; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.po.SettlementCustomersParametersPO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; +import com.mhd.bms.domain.settlementCustomersParameters.service.SettlementCustomersParametersDomainService; +import com.mhd.bms.interfaces.dto.settlementCustomersParameters.SettlementCustomersParametersDTO; +import com.mhd.common.core.exception.ServiceException; +import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; +import com.mhd.common.core.exception.digitalLogisticsException.UserError; +import com.mhd.common.core.utils.StringUtils; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 结算对象参数ApplicationService + * + * @author gen + * @date 2024-06-17 + */ +@Service +@Slf4j +public class SettlementCustomersParametersApplicationService { + + @Autowired + private SettlementCustomersParametersDomainService settlementCustomersParametersDomainService; + + /** + * 分页查询结算对象参数列表 + */ + public List queryList(SettlementCustomersParametersDO settlementCustomersParametersDO) { + return settlementCustomersParametersDomainService.queryList(settlementCustomersParametersDO); + } + + /** + * 新增结算对象参数 + */ + public Boolean insert(SettlementCustomersParametersDO settlementCustomersParametersDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + settlementCustomersParametersDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + settlementCustomersParametersDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + settlementCustomersParametersDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + return settlementCustomersParametersDomainService.insert(settlementCustomersParametersDO); + } + + /** + * 修改结算对象参数 + */ + public Boolean update(SettlementCustomersParametersDO settlementCustomersParametersDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + return settlementCustomersParametersDomainService.update(settlementCustomersParametersDO); + } + + /** + * 获取结算对象参数详细信息 + */ + public SettlementCustomersParametersPO getInfo(Long id) { + return settlementCustomersParametersDomainService.getInfo(id); + } + + /** + * 批量删除结算对象参数 + */ + public Boolean deleteByIds(SettlementCustomersParametersDTO settlementCustomersParametersDTO) { + if (!StringUtils.isNotEmpty(settlementCustomersParametersDTO.getIds())) { + throw new ServiceException("id不能为空"); + } + Set idSet = Stream.of(settlementCustomersParametersDTO.getIds().split(",")).collect(Collectors.toSet()); + Long[] ids = idSet.stream().map(Long::valueOf).toArray(Long[]::new); + return settlementCustomersParametersDomainService.delete(ids); + } + + /** + * 根据结算对象id查询结算对象参数列表 + */ + public List getListBySettlementCustomersId(Long settlementCustomersId) { + return settlementCustomersParametersDomainService.getListBySettlementCustomersId(settlementCustomersId); + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/entity/BillingStatement.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/entity/BillingStatement.java index 98d69bbcf..421de5430 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/entity/BillingStatement.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/entity/BillingStatement.java @@ -222,4 +222,7 @@ public class BillingStatement extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; + + @ApiModelProperty("仓储单号") + private String wmsNumber; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/mapper/BillingStatementMapper.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/mapper/BillingStatementMapper.java index f9541d496..48ebf8d60 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/mapper/BillingStatementMapper.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/mapper/BillingStatementMapper.java @@ -1,6 +1,8 @@ package com.mhd.bms.domain.billingStatement.repository.mapper; import java.util.List; +import java.util.Map; + import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mhd.bms.domain.billingStatement.entity.BillingStatement; import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementCollectPO; @@ -42,4 +44,9 @@ public interface BillingStatementMapper extends BaseMapper * 根据账单id,查询流水明细列表 */ List getDetailsByManageId(@Param("billManageId") Long billManageId); -} + + /** + * 查询税率 + */ + Map getTaxRate(@Param("organizationId") Long organizationId, @Param("subjectCode") String subjectCode, @Param("subjectName") String subjectName); +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/po/BillingStatementPO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/po/BillingStatementPO.java index 6a5d308c7..1814d6c10 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/po/BillingStatementPO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/po/BillingStatementPO.java @@ -236,4 +236,6 @@ public class BillingStatementPO extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; + @ApiModelProperty("仓储单号") + private String wmsNumber; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/todo/BillingStatementDO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/todo/BillingStatementDO.java index 23fc1d687..4e7aeb159 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/todo/BillingStatementDO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/repository/todo/BillingStatementDO.java @@ -254,4 +254,6 @@ public class BillingStatementDO extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; + @ApiModelProperty("仓储单号") + private String wmsNumber; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java index 74392e216..4f517b8da 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java @@ -396,7 +396,7 @@ public class BillingStatementDomainService { public Boolean generateFlow(BusinessDocumentPO businessDocumentPO) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtil.isNull(loginUser)) { - throw new DigitalLogisticsException(UserError.TIMEOUT); +// throw new DigitalLogisticsException(UserError.TIMEOUT); } BillingStatementDO billingStatementDO = new BillingStatementDO(); String[] ignroreFields = new String[]{"billingStatementId","dataSources","createBy","createByName","createTime","updateBy","updateByName","updateTime"}; @@ -414,13 +414,24 @@ public class BillingStatementDomainService { billingStatementDO.setBillingAmount(businessDocumentPO.getBillAmount()); billingStatementDO.setBillingState(1); billingStatementDO.setDataSources(1); - billingStatementDO.setCreateBy(loginUser.getUserPo().getUserId()); - billingStatementDO.setCreateByName(loginUser.getUserPo().getUserName()); - billingStatementDO.setCreateTime(new Date()); - billingStatementDO.setBillingFlow(businessDocumentPO.getBusinessFlow()); - billingStatementDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); - billingStatementDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); - billingStatementDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + if (loginUser==null) { + billingStatementDO.setCreateBy(businessDocumentPO.getCreateBy()); + billingStatementDO.setCreateByName(businessDocumentPO.getCreateByName()); + billingStatementDO.setCreateTime(new Date()); + billingStatementDO.setBillingFlow(businessDocumentPO.getBusinessFlow()); + billingStatementDO.setTopOrganizationId(businessDocumentPO.getTopOrganizationId()); + billingStatementDO.setOrganizationId(businessDocumentPO.getOrganizationId()); + billingStatementDO.setOrganizationName(businessDocumentPO.getOrganizationName()); + } else { + billingStatementDO.setCreateBy(loginUser.getUserPo().getUserId()); + billingStatementDO.setCreateByName(loginUser.getUserPo().getUserName()); + billingStatementDO.setCreateTime(new Date()); + billingStatementDO.setBillingFlow(businessDocumentPO.getBusinessFlow()); + billingStatementDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + billingStatementDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); + billingStatementDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); + } + //收款帐户信息 billingStatementDO.setPaymentAccountId(businessDocumentPO.getPaymentAccountId()); //收款帐户ID billingStatementDO.setPaymentAccountName(businessDocumentPO.getPaymentAccountName()); //收款帐户名称 diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/entity/BusinessDocument.java b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/entity/BusinessDocument.java index dd740c80f..be7d9c194 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/entity/BusinessDocument.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/entity/BusinessDocument.java @@ -194,4 +194,9 @@ public class BusinessDocument extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; + + @ApiModelProperty("是否推送") + private Integer isPush; + @ApiModelProperty("仓库类型") + private String warehouseType; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/po/BusinessDocumentPO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/po/BusinessDocumentPO.java index 66e8a517e..9a4c449c2 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/po/BusinessDocumentPO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/po/BusinessDocumentPO.java @@ -198,4 +198,9 @@ public class BusinessDocumentPO extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; + + @ApiModelProperty("是否推送") + private Integer isPush; + @ApiModelProperty("仓库类型") + private String warehouseType; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java index 8b2e0e056..fed91cd49 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java @@ -218,6 +218,9 @@ public class BusinessDocumentDO extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; - private Long billManageId; + @ApiModelProperty("是否推送") + private Integer isPush; + @ApiModelProperty("仓库类型") + private String warehouseType; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/service/BusinessDocumentDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/service/BusinessDocumentDomainService.java index 2ffc4383f..249b8e596 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/service/BusinessDocumentDomainService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/service/BusinessDocumentDomainService.java @@ -121,7 +121,13 @@ public class BusinessDocumentDomainService { public Boolean takeEffectByIds(List businessDocumentIdLongList) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtil.isNull(loginUser)) { - throw new DigitalLogisticsException(UserError.TIMEOUT); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(BusinessDocument::getBusinessState,2); +// updateWrapper.set(BusinessDocument::getUpdateBy,loginUser.getUserPo().getUserId()); +// updateWrapper.set(BusinessDocument::getUpdateTime,new Date()); +// updateWrapper.set(BusinessDocument::getUpdateByName,loginUser.getUserPo().getUserName()); + updateWrapper.in(BusinessDocument::getBusinessDocumentId,businessDocumentIdLongList); + return businessDocumentService.update(updateWrapper); } if(businessDocumentIdLongList != null && businessDocumentIdLongList.size() > 0){ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -160,7 +166,20 @@ public class BusinessDocumentDomainService { public Boolean auditByIds(List businessDocumentIdLongList, BusinessDocumentDTO businessDocumentDTO) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtil.isNull(loginUser)) { - throw new DigitalLogisticsException(UserError.TIMEOUT); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + if(businessDocumentDTO.getAuditOperation() == 1){ + //同意 + updateWrapper.set(BusinessDocument::getBusinessState,3); + }else { + //驳回 + updateWrapper.set(BusinessDocument::getBusinessState,4); + } + updateWrapper.set(BusinessDocument::getReviewRemarks,businessDocumentDTO.getReviewRemarks()); +// updateWrapper.set(BusinessDocument::getUpdateBy,loginUser.getUserPo().getUserId()); +// updateWrapper.set(BusinessDocument::getUpdateTime,new Date()); +// updateWrapper.set(BusinessDocument::getUpdateByName,loginUser.getUserPo().getUserName()); + updateWrapper.in(BusinessDocument::getBusinessDocumentId,businessDocumentIdLongList); + return businessDocumentService.update(updateWrapper); } if(businessDocumentIdLongList != null && businessDocumentIdLongList.size() > 0){ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/entity/SettlementCustomers.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/entity/SettlementCustomers.java index cd49f93d7..3a6780cf5 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/entity/SettlementCustomers.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/entity/SettlementCustomers.java @@ -94,6 +94,13 @@ public class SettlementCustomers extends BaseVOEntity{ @ApiModelProperty("默认结算币种") private String settlementCurrency; - + @ApiModelProperty(name = "组织代码") + private String orgCode; + @ApiModelProperty(name = "散租推送计费单据/流水任务id") + private Integer pushBillingRecordJobId; + @ApiModelProperty(name = "整租推送计费单据/流水任务id") + private Integer pushContractManageToBmsJobId; + @ApiModelProperty(name = "生成应收账单任务id") + private Integer pushBillManageJobId; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/persistence/SettlementCustomersImpl.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/persistence/SettlementCustomersImpl.java index 9b176f853..4cecec153 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/persistence/SettlementCustomersImpl.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/persistence/SettlementCustomersImpl.java @@ -1,11 +1,16 @@ package com.mhd.bms.domain.settlementCustomers.repository.persistence; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mhd.bms.domain.settlementCustomers.entity.SettlementCustomers; import com.mhd.bms.domain.settlementCustomers.repository.facade.ISettlementCustomersService; import com.mhd.bms.domain.settlementCustomers.repository.mapper.SettlementCustomersMapper; import com.mhd.bms.domain.settlementCustomers.repository.po.SettlementCustomersPO; import com.mhd.bms.domain.settlementCustomers.repository.todo.SettlementCustomersDO; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.mapper.SettlementCustomersNcConfigMapper; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.mapper.SettlementCustomersParametersMapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,6 +28,10 @@ import java.util.List; public class SettlementCustomersImpl extends ServiceImpl implements ISettlementCustomersService{ @Autowired private SettlementCustomersMapper settlementCustomersMapper; + @Autowired + private SettlementCustomersParametersMapper settlementCustomersParametersMapper; + @Autowired + private SettlementCustomersNcConfigMapper settlementCustomersNcConfigMapper; /** * 查询结算对象列表 @@ -30,7 +39,19 @@ public class SettlementCustomersImpl extends ServiceImpl queryList(SettlementCustomersDO settlementCustomersDO) { - return settlementCustomersMapper.queryList(settlementCustomersDO); + List settlementCustomersPOS = settlementCustomersMapper.queryList(settlementCustomersDO); + if (settlementCustomersPOS != null && settlementCustomersPOS.size() > 0) { + for (SettlementCustomersPO settlementCustomersPO : settlementCustomersPOS) { + Long settlementCustomersId = settlementCustomersPO.getSettlementCustomersId(); + List settlementCustomersParameters = settlementCustomersParametersMapper.selectList(new LambdaQueryWrapper() + .eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersId)); + List settlementCustomersNcConfigs = settlementCustomersNcConfigMapper.selectList(new LambdaQueryWrapper() + .eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersId)); + settlementCustomersPO.setSettlementCustomersParameters(settlementCustomersParameters); + settlementCustomersPO.setSettlementCustomersNcConfigs(settlementCustomersNcConfigs); + } + } + return settlementCustomersPOS; } @Override @@ -88,4 +109,4 @@ public class SettlementCustomersImpl extends ServiceImpl settlementCustomersNcConfigs; + List settlementCustomersParameters; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/todo/SettlementCustomersDO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/todo/SettlementCustomersDO.java index 413b81ed6..02a472756 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/todo/SettlementCustomersDO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/todo/SettlementCustomersDO.java @@ -1,5 +1,7 @@ package com.mhd.bms.domain.settlementCustomers.repository.todo; +import com.mhd.bms.interfaces.dto.settlementCustomersNcConfig.SettlementCustomersNcConfigDTO; +import com.mhd.bms.interfaces.dto.settlementCustomersParameters.SettlementCustomersParametersDTO; import com.mhd.common.core.annotation.Excel; import lombok.Data; import java.util.Date; @@ -131,5 +133,18 @@ public class SettlementCustomersDO extends BaseVOEntity{ @ApiModelProperty("单据类型编码") private String documentTypeCode; + @ApiModelProperty(name = "组织代码") + private String orgCode; + @ApiModelProperty(name = "散租推送计费单据/流水任务id") + private Integer pushBillingRecordJobId; + @ApiModelProperty(name = "整租推送计费单据/流水任务id") + private Integer pushContractManageToBmsJobId; + @ApiModelProperty(name = "生成应收账单任务id") + private Integer pushBillManageJobId; + @ApiModelProperty("结算对象参数") + private List settlementCustomersParameters; + + @ApiModelProperty("结算对象nc配置") + private List settlementCustomersNcConfigs; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/util/XxlJobBusinessConfig.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/util/XxlJobBusinessConfig.java new file mode 100644 index 000000000..d66a61ff2 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/util/XxlJobBusinessConfig.java @@ -0,0 +1,20 @@ +package com.mhd.bms.domain.settlementCustomers.repository.util; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class XxlJobBusinessConfig { + + @Value("${xxl.job.admin.address}") + private String adminAddress; + + @Value("${xxl.job.admin.cookie}") + private String adminCookie; + + @Bean + public XxlJobOpenApiUtil xxlJobOpenApiUtil() { + return new XxlJobOpenApiUtil(adminAddress, adminCookie); + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/util/XxlJobOpenApiUtil.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/util/XxlJobOpenApiUtil.java new file mode 100644 index 000000000..687211894 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/repository/util/XxlJobOpenApiUtil.java @@ -0,0 +1,222 @@ +package com.mhd.bms.domain.settlementCustomers.repository.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; + +/** + * 调用XXL‑JOB后台页面接口 + * 列表接口返回JSON,不再返回HTML + */ +@Slf4j +public class XxlJobOpenApiUtil { + + private final String adminUrl; + private final String cookie; + + public XxlJobOpenApiUtil(String adminUrl, String cookie) { + this.adminUrl = StrUtil.removeSuffix(adminUrl, "/"); + this.cookie = cookie; + } + + /** + * 新增定时任务 POST /jobinfo/add + * @param addReq 请求实体,与浏览器payload字段完全对齐 + * @return true=新增成功,false=失败 + */ + public boolean addJob(JobInfoAddReq addReq) { + String url = adminUrl + "/jobinfo/add"; + try { + Map formMap = BeanUtil.beanToMap(addReq); + HttpResponse response = HttpRequest.post(url) + .header("Authorization", cookie) + .form(formMap) + .execute(); + int status = response.getStatus(); + log.info("[XxlJob] addJob status:{}", status); + // 新增成功200重定向到列表页 + return status == 200; + } catch (Exception e) { + log.error("[XxlJob] addJob异常", e); + return false; + } + } + + /** + * 根据【执行器组+任务描述+执行器参数】查询jobId + * 适配返回JSON格式的pageList接口 + * @param jobDesc 任务描述 + * @param executorParam 任务参数(业务shipperId) + * @return jobId,查不到返回null + */ + public Integer queryJobIdByDescAndParam(String jobDesc, String executorParam,String jobGroup) { + StringBuilder querySb = new StringBuilder(); + // start length必须 + querySb.append("start=0&length=10"); + + // jobGroup:为空就不拼接这个参数!!不要 jobGroup="" + // 你们业务固定jobGroup=3,直接写死3,不用传空 + if(StrUtil.isNotBlank(jobGroup)){ + querySb.append("&jobGroup=").append(jobGroup); + } + + // jobDesc + if(StrUtil.isNotBlank(jobDesc)){ + querySb.append("&jobDesc=").append(cn.hutool.core.net.URLEncodeUtil.encode(jobDesc)); + } + // executorParam + if(StrUtil.isNotBlank(executorParam)){ + querySb.append("&executorParam=").append(cn.hutool.core.net.URLEncodeUtil.encode(executorParam)); + } + // executorHandler为空,直接不携带 + // triggerStatus=-1 + querySb.append("&triggerStatus=-1"); + + String url = adminUrl + "/jobinfo/pageList?" + querySb; + log.info("[XxlJob] pageList请求url:{}",url); + try { + HttpResponse response = HttpRequest.get(url) + .header("Authorization", cookie) + .execute(); + + String jsonStr = response.body(); + log.info("[XxlJob] pageList响应:{}",jsonStr); + if (StrUtil.isBlank(jsonStr)) { + log.warn("[XxlJob] pageList返回空响应"); + return null; + } + JSONObject jsonObj = JSON.parseObject(jsonStr); + JSONArray jsonArray = jsonObj.getJSONArray("data"); + if(jsonArray == null){ + return null; + } + List dataList = jsonArray.toList(JobPageItem.class); + if (dataList == null || dataList.isEmpty()) { + return null; + } + for (JobPageItem item : dataList) { + if (StrUtil.equals(item.jobDesc, jobDesc) && StrUtil.equals(item.executorParam, executorParam)) { + return item.id; + } + } + return null; + } catch (Exception e) { + log.error("[XxlJob] queryJobId异常", e); + return null; + } + } + + + + + + + /** + * 暂停任务 POST /jobinfo/pause + * @param jobId xxl任务id + * @return true成功 + */ + public boolean pauseJob(Integer jobId) { + if (jobId == null) { + return false; + } + String url = adminUrl + "/jobinfo/pause"; + try { + HttpResponse response = HttpRequest.post(url) + .header("Authorization", cookie) + .form("id", jobId) + .execute(); + return response.getStatus() == 200; + } catch (Exception e) { + log.error("[XxlJob] pauseJob jobId:{}异常", jobId, e); + return false; + } + } + + /** + * 开启任务 POST /jobinfo/start + * @param jobId xxl任务id + * @return true成功 + */ + public boolean startJob(Integer jobId) { + if (jobId == null) { + return false; + } + String url = adminUrl + "/jobinfo/start"; + try { + HttpResponse response = HttpRequest.post(url) + .header("Authorization", cookie) + .form("id", jobId) + .execute(); + return response.getStatus() == 200; + } catch (Exception e) { + log.error("[XxlJob] startJob jobId:{}异常", jobId, e); + return false; + } + } + + /** + * 删除任务 POST /jobinfo/remove + * @param jobId xxl任务id + * @return true成功 + */ + public boolean removeJob(Integer jobId) { + if (jobId == null) { + return false; + } + String url = adminUrl + "/jobinfo/remove"; + try { + HttpResponse response = HttpRequest.post(url) + .header("Authorization", cookie) + .form("id", jobId) + .execute(); + return response.getStatus() == 200; + } catch (Exception e) { + log.error("[XxlJob] removeJob jobId:{}异常", jobId, e); + return false; + } + } + + /** + * pageList 返回data数组中每一项实体 + */ + @Data + public static class JobPageItem { + private Integer id; + private String jobDesc; + private String executorParam; + } + + /** + * add接口请求实体,与浏览器F12抓包payload字段一一对应 + */ + @Data + public static class JobInfoAddReq { + private Integer jobGroup; + private String jobDesc; + private String author; + private String alarmEmail; + private String scheduleType; + private String scheduleConf; + private String glueType; + private String executorHandler; + private String executorParam; + private String glueRemark; + private String glueSource; + private String executorRouteStrategy; + private Integer childJobId; + private String misfireStrategy; + private String executorBlockStrategy; + private Integer executorTimeout; + private Integer executorFailRetryCount; + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/service/SettlementCustomersDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/service/SettlementCustomersDomainService.java index e19edf83e..2da9d3ecf 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/service/SettlementCustomersDomainService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomers/service/SettlementCustomersDomainService.java @@ -5,6 +5,10 @@ import com.mhd.bms.domain.settlementCustomers.entity.SettlementCustomers; import com.mhd.bms.domain.settlementCustomers.repository.facade.ISettlementCustomersService; import com.mhd.bms.domain.settlementCustomers.repository.po.SettlementCustomersPO; import com.mhd.bms.domain.settlementCustomers.repository.todo.SettlementCustomersDO; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.facade.ISettlementCustomersNcConfigService; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.facade.ISettlementCustomersParametersService; import com.mhd.common.security.utils.SecurityUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +28,11 @@ public class SettlementCustomersDomainService { @Autowired private ISettlementCustomersService settlementCustomersService; + @Autowired + private ISettlementCustomersNcConfigService settlementCustomersNcConfigService; + + @Autowired + private ISettlementCustomersParametersService settlementCustomersParametersService; /** * 分页查询结算对象列表 @@ -64,7 +73,17 @@ public class SettlementCustomersDomainService { */ public SettlementCustomersPO getInfo(Long settlementCustomersId) { - return settlementCustomersService.getInfo(settlementCustomersId); + SettlementCustomersPO info = settlementCustomersService.getInfo(settlementCustomersId); + + LambdaQueryWrapper ncConfigWrapper = new LambdaQueryWrapper<>(); + ncConfigWrapper.eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersId); + info.setSettlementCustomersNcConfigs(settlementCustomersNcConfigService.list(ncConfigWrapper)); + + LambdaQueryWrapper parametersWrapper = new LambdaQueryWrapper<>(); + parametersWrapper.eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersId); + info.setSettlementCustomersParameters(settlementCustomersParametersService.list(parametersWrapper)); + + return info; } diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/entity/SettlementCustomersNcConfig.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/entity/SettlementCustomersNcConfig.java new file mode 100644 index 000000000..e1c23835d --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/entity/SettlementCustomersNcConfig.java @@ -0,0 +1,80 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 结算对象对象 settlement_customers + * + * @author gen + * @date 2024-06-17 + */ + +@Data +public class SettlementCustomersNcConfig extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + @TableId(type = IdType.AUTO) + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("nc编码") + @Excel(name = "nc编码") + private String ncCode; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethod; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfig; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethodName; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerTypeName; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfigName; + + @ApiModelProperty("欠租期上限 (月)") + @Excel(name = "欠租期上限 (月)") + private Integer oweRentMaxMonth; + + @ApiModelProperty("账期 (天)") + @Excel(name = "账期 (天)") + private Integer accountPeriodDay; + + @ApiModelProperty("备注") + @Excel(name = "备注") + private String remark; +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/facade/ISettlementCustomersNcConfigService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/facade/ISettlementCustomersNcConfigService.java new file mode 100644 index 000000000..d1b92331a --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/facade/ISettlementCustomersNcConfigService.java @@ -0,0 +1,42 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.repository.facade; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.po.SettlementCustomersNcConfigPO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; + +import java.util.List; + +/** + * 结算对象NC配置Service接口 + * + * @author gen + * @date 2024-06-17 + */ +public interface ISettlementCustomersNcConfigService extends IService { + + /** + * 分页查询结算对象NC配置列表 + */ + public List queryList(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO); + + /** + * 新增结算对象NC配置 + */ + public Boolean insert(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO); + + /** + * 修改结算对象NC配置 + */ + public Boolean update(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO); + + /** + * 批量删除结算对象NC配置 + */ + public Boolean delete(Long[] ids); + + /** + * 查询结算对象NC配置 + */ + public SettlementCustomersNcConfigPO getInfo(Long id); +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/mapper/SettlementCustomersNcConfigMapper.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/mapper/SettlementCustomersNcConfigMapper.java new file mode 100644 index 000000000..8631ffbea --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/mapper/SettlementCustomersNcConfigMapper.java @@ -0,0 +1,23 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.repository.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.po.SettlementCustomersNcConfigPO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; +import org.apache.ibatis.annotations.Param; + +/** + * 结算对象NC配置Mapper接口 + * + * @author gen + * @date 2024-06-17 + */ +public interface SettlementCustomersNcConfigMapper extends BaseMapper { + + /** + * 查询结算对象NC配置列表 + */ + public List queryList(@Param("settlementCustomersNcConfigDO") SettlementCustomersNcConfigDO settlementCustomersNcConfigDO); + +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/persistence/SettlementCustomersNcConfigImpl.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/persistence/SettlementCustomersNcConfigImpl.java new file mode 100644 index 000000000..d73c6f6dd --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/persistence/SettlementCustomersNcConfigImpl.java @@ -0,0 +1,81 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.repository.persistence; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.facade.ISettlementCustomersNcConfigService; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.mapper.SettlementCustomersNcConfigMapper; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.po.SettlementCustomersNcConfigPO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 结算对象NC配置Service业务层处理 + * + * @author gen + * @date 2024-06-17 + */ +@Service +public class SettlementCustomersNcConfigImpl extends ServiceImpl implements ISettlementCustomersNcConfigService { + + @Autowired + private SettlementCustomersNcConfigMapper settlementCustomersNcConfigMapper; + + /** + * 查询结算对象NC配置列表 + */ + @Override + public List queryList(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + return settlementCustomersNcConfigMapper.queryList(settlementCustomersNcConfigDO); + } + + /** + * 新增结算对象NC配置 + */ + @Override + public Boolean insert(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig(); + BeanUtils.copyProperties(settlementCustomersNcConfigDO, settlementCustomersNcConfig); + return this.save(settlementCustomersNcConfig); + } + + /** + * 修改结算对象NC配置 + */ + @Override + public Boolean update(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig(); + BeanUtils.copyProperties(settlementCustomersNcConfigDO, settlementCustomersNcConfig); + return this.updateById(settlementCustomersNcConfig); + } + + /** + * 批量删除结算对象NC配置 + */ + @Override + public Boolean delete(Long[] ids) { + List list = new ArrayList<>(); + for (Long id : ids) { + SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig(); + settlementCustomersNcConfig.setId(id); + settlementCustomersNcConfig.setDelFlag(2); + list.add(settlementCustomersNcConfig); + } + return this.updateBatchById(list); + } + + /** + * 查询结算对象NC配置 + */ + @Override + public SettlementCustomersNcConfigPO getInfo(Long id) { + SettlementCustomersNcConfig settlementCustomersNcConfig = this.getById(id); + SettlementCustomersNcConfigPO settlementCustomersNcConfigPO = new SettlementCustomersNcConfigPO(); + BeanUtils.copyProperties(settlementCustomersNcConfig, settlementCustomersNcConfigPO); + return settlementCustomersNcConfigPO; + } +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/po/SettlementCustomersNcConfigPO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/po/SettlementCustomersNcConfigPO.java new file mode 100644 index 000000000..ea98b9086 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/po/SettlementCustomersNcConfigPO.java @@ -0,0 +1,77 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.repository.po; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 结算对象NC配置对象 settlement_customers_nc_config + * + * @author gen + * @date 2024-06-17 + */ +@Data +@ApiModel(value = "结算对象NC配置对象", description = "结算对象NC配置响应对象") +public class SettlementCustomersNcConfigPO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("nc编码") + @Excel(name = "nc编码") + private String ncCode; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethod; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfig; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethodName; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerTypeName; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfigName; + + @ApiModelProperty("欠租期上限 (月)") + @Excel(name = "欠租期上限 (月)") + private Integer oweRentMaxMonth; + + @ApiModelProperty("账期 (天)") + @Excel(name = "账期 (天)") + private Integer accountPeriodDay; + + @ApiModelProperty("备注") + @Excel(name = "备注") + private String remark; +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/todo/SettlementCustomersNcConfigDO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/todo/SettlementCustomersNcConfigDO.java new file mode 100644 index 000000000..466947395 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/repository/todo/SettlementCustomersNcConfigDO.java @@ -0,0 +1,81 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 结算对象NC配置对象 settlement_customers_nc_config + * + * @author gen + * @date 2024-06-17 + */ +@Data +public class SettlementCustomersNcConfigDO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("nc编码") + @Excel(name = "nc编码") + private String ncCode; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethod; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfig; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethodName; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerTypeName; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfigName; + + @ApiModelProperty("欠租期上限 (月)") + @Excel(name = "欠租期上限 (月)") + private Integer oweRentMaxMonth; + + @ApiModelProperty("账期 (天)") + @Excel(name = "账期 (天)") + private Integer accountPeriodDay; + + @ApiModelProperty("备注") + @Excel(name = "备注") + private String remark; + + @ApiModelProperty(name = "创建时间查询条件开始日期") + private String createTimeStart; + + @ApiModelProperty(name = "创建时间查询条件结束日期") + private String createTimeEnd; +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/service/SettlementCustomersNcConfigDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/service/SettlementCustomersNcConfigDomainService.java new file mode 100644 index 000000000..257ccec6b --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersNcConfig/service/SettlementCustomersNcConfigDomainService.java @@ -0,0 +1,59 @@ +package com.mhd.bms.domain.settlementCustomersNcConfig.service; + +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.facade.ISettlementCustomersNcConfigService; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.po.SettlementCustomersNcConfigPO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 结算对象NC配置领域服务 + * + * @author gen + * @date 2024-06-17 + */ +@Service +@Slf4j +public class SettlementCustomersNcConfigDomainService { + + @Autowired + private ISettlementCustomersNcConfigService settlementCustomersNcConfigService; + + /** + * 分页查询结算对象NC配置列表 + */ + public List queryList(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + return settlementCustomersNcConfigService.queryList(settlementCustomersNcConfigDO); + } + + /** + * 新增结算对象NC配置 + */ + public Boolean insert(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + return settlementCustomersNcConfigService.insert(settlementCustomersNcConfigDO); + } + + /** + * 修改结算对象NC配置 + */ + public Boolean update(SettlementCustomersNcConfigDO settlementCustomersNcConfigDO) { + return settlementCustomersNcConfigService.update(settlementCustomersNcConfigDO); + } + + /** + * 批量删除结算对象NC配置 + */ + public Boolean delete(Long[] ids) { + return settlementCustomersNcConfigService.delete(ids); + } + + /** + * 获取结算对象NC配置详细信息 + */ + public SettlementCustomersNcConfigPO getInfo(Long id) { + return settlementCustomersNcConfigService.getInfo(id); + } +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/entity/SettlementCustomersParameters.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/entity/SettlementCustomersParameters.java new file mode 100644 index 000000000..4fe19b3a6 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/entity/SettlementCustomersParameters.java @@ -0,0 +1,69 @@ +package com.mhd.bms.domain.settlementCustomersParameters.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 结算对象对象 settlement_customers + * + * @author gen + * @date 2024-06-17 + */ + +@Data +public class SettlementCustomersParameters extends BaseVOEntity{ + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + @TableId(type = IdType.AUTO) + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("结算对象编码") + @Excel(name = "结算对象编码") + private String settlementCustomersCode; + + @ApiModelProperty("结算主体id") + @Excel(name = "结算主体id") + private Long settlementEntityId; + + @ApiModelProperty("结算主体") + @Excel(name = "结算主体") + private String settlementEntity; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("参数内容") + @Excel(name = "参数内容") + private String content; + + @ApiModelProperty("参数名称") + @Excel(name = "参数名称") + private String parametersName; + + +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/facade/ISettlementCustomersParametersService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/facade/ISettlementCustomersParametersService.java new file mode 100644 index 000000000..68b91c32e --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/facade/ISettlementCustomersParametersService.java @@ -0,0 +1,47 @@ +package com.mhd.bms.domain.settlementCustomersParameters.repository.facade; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.po.SettlementCustomersParametersPO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; + +import java.util.List; + +/** + * 结算对象参数Service接口 + * + * @author gen + * @date 2024-06-17 + */ +public interface ISettlementCustomersParametersService extends IService { + + /** + * 分页查询结算对象参数列表 + */ + public List queryList(SettlementCustomersParametersDO settlementCustomersParametersDO); + + /** + * 新增结算对象参数 + */ + public Boolean insert(SettlementCustomersParametersDO settlementCustomersParametersDO); + + /** + * 修改结算对象参数 + */ + public Boolean update(SettlementCustomersParametersDO settlementCustomersParametersDO); + + /** + * 批量删除结算对象参数 + */ + public Boolean delete(Long[] ids); + + /** + * 查询结算对象参数 + */ + public SettlementCustomersParametersPO getInfo(Long id); + + /** + * 根据结算对象id查询结算对象参数列表 + */ + public List getListBySettlementCustomersId(Long settlementCustomersId); +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/mapper/SettlementCustomersParametersMapper.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/mapper/SettlementCustomersParametersMapper.java new file mode 100644 index 000000000..620eb4784 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/mapper/SettlementCustomersParametersMapper.java @@ -0,0 +1,23 @@ +package com.mhd.bms.domain.settlementCustomersParameters.repository.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.po.SettlementCustomersParametersPO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; +import org.apache.ibatis.annotations.Param; + +/** + * 结算对象参数Mapper接口 + * + * @author gen + * @date 2024-06-17 + */ +public interface SettlementCustomersParametersMapper extends BaseMapper { + + /** + * 查询结算对象参数列表 + */ + public List queryList(@Param("settlementCustomersParametersDO") SettlementCustomersParametersDO settlementCustomersParametersDO); + +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/persistence/SettlementCustomersParametersImpl.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/persistence/SettlementCustomersParametersImpl.java new file mode 100644 index 000000000..60b582c73 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/persistence/SettlementCustomersParametersImpl.java @@ -0,0 +1,95 @@ +package com.mhd.bms.domain.settlementCustomersParameters.repository.persistence; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters; +import com.mhd.bms.domain.settlementCustomersParameters.repository.facade.ISettlementCustomersParametersService; +import com.mhd.bms.domain.settlementCustomersParameters.repository.mapper.SettlementCustomersParametersMapper; +import com.mhd.bms.domain.settlementCustomersParameters.repository.po.SettlementCustomersParametersPO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 结算对象参数Service业务层处理 + * + * @author gen + * @date 2024-06-17 + */ +@Service +public class SettlementCustomersParametersImpl extends ServiceImpl implements ISettlementCustomersParametersService { + + @Autowired + private SettlementCustomersParametersMapper settlementCustomersParametersMapper; + + /** + * 查询结算对象参数列表 + */ + @Override + public List queryList(SettlementCustomersParametersDO settlementCustomersParametersDO) { + return settlementCustomersParametersMapper.queryList(settlementCustomersParametersDO); + } + + /** + * 新增结算对象参数 + */ + @Override + public Boolean insert(SettlementCustomersParametersDO settlementCustomersParametersDO) { + SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters(); + BeanUtils.copyProperties(settlementCustomersParametersDO, settlementCustomersParameters); + return this.save(settlementCustomersParameters); + } + + /** + * 修改结算对象参数 + */ + @Override + public Boolean update(SettlementCustomersParametersDO settlementCustomersParametersDO) { + SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters(); + BeanUtils.copyProperties(settlementCustomersParametersDO, settlementCustomersParameters); + return this.updateById(settlementCustomersParameters); + } + + /** + * 批量删除结算对象参数 + */ + @Override + public Boolean delete(Long[] ids) { + List list = new ArrayList<>(); + for (Long id : ids) { + SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters(); + settlementCustomersParameters.setId(id); + settlementCustomersParameters.setDelFlag(2); + list.add(settlementCustomersParameters); + } + return this.updateBatchById(list); + } + + /** + * 查询结算对象参数 + */ + @Override + public SettlementCustomersParametersPO getInfo(Long id) { + SettlementCustomersParameters settlementCustomersParameters = this.getById(id); + SettlementCustomersParametersPO settlementCustomersParametersPO = new SettlementCustomersParametersPO(); + BeanUtils.copyProperties(settlementCustomersParameters, settlementCustomersParametersPO); + return settlementCustomersParametersPO; + } + + @Override + public List getListBySettlementCustomersId(Long settlementCustomersId) { + List list = this.list(new LambdaQueryWrapper() + .eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersId) + .eq(SettlementCustomersParameters::getDelFlag, 1)); + return list.stream().map(item -> { + SettlementCustomersParametersPO po = new SettlementCustomersParametersPO(); + BeanUtils.copyProperties(item, po); + return po; + }).collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/po/SettlementCustomersParametersPO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/po/SettlementCustomersParametersPO.java new file mode 100644 index 000000000..0dccab69e --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/po/SettlementCustomersParametersPO.java @@ -0,0 +1,64 @@ +package com.mhd.bms.domain.settlementCustomersParameters.repository.po; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 结算对象参数对象 settlement_customers_parameters + * + * @author gen + * @date 2024-06-17 + */ +@Data +@ApiModel(value = "结算对象参数对象", description = "结算对象参数响应对象") +public class SettlementCustomersParametersPO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("结算对象编码") + @Excel(name = "结算对象编码") + private String settlementCustomersCode; + + @ApiModelProperty("结算主体id") + @Excel(name = "结算主体id") + private Long settlementEntityId; + + @ApiModelProperty("结算主体") + @Excel(name = "结算主体") + private String settlementEntity; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("参数内容") + @Excel(name = "参数内容") + private String content; + + @ApiModelProperty("参数名称") + @Excel(name = "参数名称") + private String parametersName; +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/todo/SettlementCustomersParametersDO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/todo/SettlementCustomersParametersDO.java new file mode 100644 index 000000000..9cce537a9 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/repository/todo/SettlementCustomersParametersDO.java @@ -0,0 +1,68 @@ +package com.mhd.bms.domain.settlementCustomersParameters.repository.todo; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 结算对象参数对象 settlement_customers_parameters + * + * @author gen + * @date 2024-06-17 + */ +@Data +public class SettlementCustomersParametersDO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("结算对象编码") + @Excel(name = "结算对象编码") + private String settlementCustomersCode; + + @ApiModelProperty("结算主体id") + @Excel(name = "结算主体id") + private Long settlementEntityId; + + @ApiModelProperty("结算主体") + @Excel(name = "结算主体") + private String settlementEntity; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("参数内容") + @Excel(name = "参数内容") + private String content; + + @ApiModelProperty("参数名称") + @Excel(name = "参数名称") + private String parametersName; + + @ApiModelProperty(name = "创建时间查询条件开始日期") + private String createTimeStart; + + @ApiModelProperty(name = "创建时间查询条件结束日期") + private String createTimeEnd; +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/service/SettlementCustomersParametersDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/service/SettlementCustomersParametersDomainService.java new file mode 100644 index 000000000..69012b64b --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/settlementCustomersParameters/service/SettlementCustomersParametersDomainService.java @@ -0,0 +1,66 @@ +package com.mhd.bms.domain.settlementCustomersParameters.service; + +import com.mhd.bms.domain.settlementCustomersParameters.repository.facade.ISettlementCustomersParametersService; +import com.mhd.bms.domain.settlementCustomersParameters.repository.po.SettlementCustomersParametersPO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 结算对象参数领域服务 + * + * @author gen + * @date 2024-06-17 + */ +@Service +@Slf4j +public class SettlementCustomersParametersDomainService { + + @Autowired + private ISettlementCustomersParametersService settlementCustomersParametersService; + + /** + * 分页查询结算对象参数列表 + */ + public List queryList(SettlementCustomersParametersDO settlementCustomersParametersDO) { + return settlementCustomersParametersService.queryList(settlementCustomersParametersDO); + } + + /** + * 新增结算对象参数 + */ + public Boolean insert(SettlementCustomersParametersDO settlementCustomersParametersDO) { + return settlementCustomersParametersService.insert(settlementCustomersParametersDO); + } + + /** + * 修改结算对象参数 + */ + public Boolean update(SettlementCustomersParametersDO settlementCustomersParametersDO) { + return settlementCustomersParametersService.update(settlementCustomersParametersDO); + } + + /** + * 批量删除结算对象参数 + */ + public Boolean delete(Long[] ids) { + return settlementCustomersParametersService.delete(ids); + } + + /** + * 获取结算对象参数详细信息 + */ + public SettlementCustomersParametersPO getInfo(Long id) { + return settlementCustomersParametersService.getInfo(id); + } + + /** + * 根据结算对象id查询结算对象参数列表 + */ + public List getListBySettlementCustomersId(Long settlementCustomersId) { + return settlementCustomersParametersService.getListBySettlementCustomersId(settlementCustomersId); + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/assembler/settlementCustomersNcConfig/SettlementCustomersNcConfigAssembler.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/assembler/settlementCustomersNcConfig/SettlementCustomersNcConfigAssembler.java new file mode 100644 index 000000000..15656190e --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/assembler/settlementCustomersNcConfig/SettlementCustomersNcConfigAssembler.java @@ -0,0 +1,71 @@ +package com.mhd.bms.interfaces.assembler.settlementCustomersNcConfig; + +import cn.hutool.core.util.ObjectUtil; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; +import com.mhd.bms.interfaces.dto.settlementCustomersNcConfig.SettlementCustomersNcConfigDTO; +import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; +import com.mhd.common.core.exception.digitalLogisticsException.UserError; +import com.mhd.common.core.utils.bean.BeanUtils; +import com.mhd.common.core.utils.IgnoreNullUtil; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 结算对象NC配置Assembler + * + * @author gen + * @date 2024-06-17 + */ +@Component +public class SettlementCustomersNcConfigAssembler { + + /** + * 转换实体 + */ + public SettlementCustomersNcConfigDO toDO(SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO) { + SettlementCustomersNcConfigDO settlementCustomersNcConfigDO = new SettlementCustomersNcConfigDO(); + // 拷贝 + BeanUtils.copyProperties(settlementCustomersNcConfigDTO, settlementCustomersNcConfigDO, IgnoreNullUtil.getNullPropertyNames(settlementCustomersNcConfigDTO)); + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + // 获取用户姓名,优先使用userPo中的userName,如果为空则使用realname,最后使用username + String userName = null; + if (loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null) { + userName = loginUser.getUserPo().getUserName(); + } else if (loginUser.getRealname() != null) { + userName = loginUser.getRealname(); + } else { + userName = loginUser.getUsername(); + } + // 获取登录人id + Long userId = loginUser.getUserid(); + if (settlementCustomersNcConfigDTO.getId() != null) { + if (userId != null) { + settlementCustomersNcConfigDO.setUpdateBy(userId); + } else { + settlementCustomersNcConfigDO.setUpdateBy(0L); + } + settlementCustomersNcConfigDO.setUpdateByName(userName); + settlementCustomersNcConfigDO.setUpdateTime(new Date()); + } else { + if (userId != null) { + settlementCustomersNcConfigDO.setCreateBy(userId); + settlementCustomersNcConfigDO.setUpdateBy(userId); + } else { + settlementCustomersNcConfigDO.setCreateBy(0L); + settlementCustomersNcConfigDO.setUpdateBy(0L); + } + settlementCustomersNcConfigDO.setCreateByName(userName); + settlementCustomersNcConfigDO.setUpdateByName(userName); + settlementCustomersNcConfigDO.setCreateTime(new Date()); + settlementCustomersNcConfigDO.setUpdateTime(new Date()); + settlementCustomersNcConfigDO.setDelFlag(1); + } + return settlementCustomersNcConfigDO; + } +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/assembler/settlementCustomersParameters/SettlementCustomersParametersAssembler.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/assembler/settlementCustomersParameters/SettlementCustomersParametersAssembler.java new file mode 100644 index 000000000..3f3f6602f --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/assembler/settlementCustomersParameters/SettlementCustomersParametersAssembler.java @@ -0,0 +1,71 @@ +package com.mhd.bms.interfaces.assembler.settlementCustomersParameters; + +import cn.hutool.core.util.ObjectUtil; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; +import com.mhd.bms.interfaces.dto.settlementCustomersParameters.SettlementCustomersParametersDTO; +import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException; +import com.mhd.common.core.exception.digitalLogisticsException.UserError; +import com.mhd.common.core.utils.bean.BeanUtils; +import com.mhd.common.core.utils.IgnoreNullUtil; +import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.system.api.model.LoginUser; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 结算对象参数Assembler + * + * @author gen + * @date 2024-06-17 + */ +@Component +public class SettlementCustomersParametersAssembler { + + /** + * 转换实体 + */ + public SettlementCustomersParametersDO toDO(SettlementCustomersParametersDTO settlementCustomersParametersDTO) { + SettlementCustomersParametersDO settlementCustomersParametersDO = new SettlementCustomersParametersDO(); + // 拷贝 + BeanUtils.copyProperties(settlementCustomersParametersDTO, settlementCustomersParametersDO, IgnoreNullUtil.getNullPropertyNames(settlementCustomersParametersDTO)); + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + // 获取用户姓名,优先使用userPo中的userName,如果为空则使用realname,最后使用username + String userName = null; + if (loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null) { + userName = loginUser.getUserPo().getUserName(); + } else if (loginUser.getRealname() != null) { + userName = loginUser.getRealname(); + } else { + userName = loginUser.getUsername(); + } + // 获取登录人id + Long userId = loginUser.getUserid(); + if (settlementCustomersParametersDTO.getId() != null) { + if (userId != null) { + settlementCustomersParametersDO.setUpdateBy(userId); + } else { + settlementCustomersParametersDO.setUpdateBy(0L); + } + settlementCustomersParametersDO.setUpdateByName(userName); + settlementCustomersParametersDO.setUpdateTime(new Date()); + } else { + if (userId != null) { + settlementCustomersParametersDO.setCreateBy(userId); + settlementCustomersParametersDO.setUpdateBy(userId); + } else { + settlementCustomersParametersDO.setCreateBy(0L); + settlementCustomersParametersDO.setUpdateBy(0L); + } + settlementCustomersParametersDO.setCreateByName(userName); + settlementCustomersParametersDO.setUpdateByName(userName); + settlementCustomersParametersDO.setCreateTime(new Date()); + settlementCustomersParametersDO.setUpdateTime(new Date()); + settlementCustomersParametersDO.setDelFlag(1); + } + return settlementCustomersParametersDO; + } +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/billingStatement/BillingStatementDTO.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/billingStatement/BillingStatementDTO.java index 855e5040b..1a032f659 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/billingStatement/BillingStatementDTO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/billingStatement/BillingStatementDTO.java @@ -264,5 +264,6 @@ public class BillingStatementDTO extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; - + @ApiModelProperty("仓储单号") + private String wmsNumber; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java index 3e6a93304..d33f80eef 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java @@ -215,4 +215,8 @@ public class BusinessDocumentDTO extends BaseVOEntity{ private String paymentAccountName; private Long billManageId; + @ApiModelProperty("仓库类型") + private String warehouseType; + @ApiModelProperty("是否推送") + private Integer isPush; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomers/SettlementCustomersDTO.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomers/SettlementCustomersDTO.java index 71bf8914f..ee5ec5d61 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomers/SettlementCustomersDTO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomers/SettlementCustomersDTO.java @@ -1,5 +1,8 @@ package com.mhd.bms.interfaces.dto.settlementCustomers; +import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig; +import com.mhd.bms.interfaces.dto.settlementCustomersNcConfig.SettlementCustomersNcConfigDTO; +import com.mhd.bms.interfaces.dto.settlementCustomersParameters.SettlementCustomersParametersDTO; import com.mhd.common.core.annotation.Excel; import lombok.Data; import java.util.Date; @@ -130,4 +133,17 @@ public class SettlementCustomersDTO extends BaseVOEntity{ @ApiModelProperty("单据类型编码") private String documentTypeCode; + @ApiModelProperty(name = "组织代码") + private String orgCode; + @ApiModelProperty(name = "散租推送计费单据/流水任务id") + private Integer pushBillingRecordJobId; + @ApiModelProperty(name = "整租推送计费单据/流水任务id") + private Integer pushContractManageToBmsJobId; + @ApiModelProperty(name = "生成应收账单任务id") + private Integer pushBillManageJobId; + + @ApiModelProperty("结算对象参数") + private List settlementCustomersParameters; + @ApiModelProperty("结算对象nc配置") + private List settlementCustomersNcConfigs; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomersNcConfig/SettlementCustomersNcConfigDTO.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomersNcConfig/SettlementCustomersNcConfigDTO.java new file mode 100644 index 000000000..76fc83c55 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomersNcConfig/SettlementCustomersNcConfigDTO.java @@ -0,0 +1,78 @@ +package com.mhd.bms.interfaces.dto.settlementCustomersNcConfig; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 结算对象NC配置对象 settlement_customers_nc_config + * + * @author gen + * @date 2024-06-17 + */ +@Data +public class SettlementCustomersNcConfigDTO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("nc编码") + @Excel(name = "nc编码") + private String ncCode; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethod; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerType; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfig; + + @ApiModelProperty("结算方式") + @Excel(name = "结算方式") + private String ncSettleMethodName; + + @ApiModelProperty("仓库温层类型") + @Excel(name = "仓库温层类型") + private String warehouseTempLayerTypeName; + + @ApiModelProperty("散租计费配置") + @Excel(name = "散租计费配置") + private String scatterRentBillingConfigName; + + @ApiModelProperty("欠租期上限 (月)") + @Excel(name = "欠租期上限 (月)") + private Integer oweRentMaxMonth; + + @ApiModelProperty("账期 (天)") + @Excel(name = "账期 (天)") + private Integer accountPeriodDay; + + @ApiModelProperty("备注") + @Excel(name = "备注") + private String remark; + + @ApiModelProperty("ids(批量删除用)") + private String ids; +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomersParameters/SettlementCustomersParametersDTO.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomersParameters/SettlementCustomersParametersDTO.java new file mode 100644 index 000000000..fdfa67981 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/settlementCustomersParameters/SettlementCustomersParametersDTO.java @@ -0,0 +1,65 @@ +package com.mhd.bms.interfaces.dto.settlementCustomersParameters; + +import com.mhd.common.core.annotation.Excel; +import lombok.Data; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; + +/** + * 结算对象参数对象 settlement_customers_parameters + * + * @author gen + * @date 2024-06-17 + */ +@Data +public class SettlementCustomersParametersDTO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("结算对象id") + private Long settlementCustomersId; + + @ApiModelProperty("一级组织表ID") + @Excel(name = "一级组织表ID") + private Long topOrganizationId; + + @ApiModelProperty("组织表ID") + @Excel(name = "组织表ID") + private Long organizationId; + + @ApiModelProperty("组织名称") + @Excel(name = "组织名称") + private String organizationName; + + @ApiModelProperty("结算对象编码") + @Excel(name = "结算对象编码") + private String settlementCustomersCode; + + @ApiModelProperty("结算主体id") + @Excel(name = "结算主体id") + private Long settlementEntityId; + + @ApiModelProperty("结算主体") + @Excel(name = "结算主体") + private String settlementEntity; + + @ApiModelProperty("合同编号") + @Excel(name = "合同编号") + private String contractNumber; + + @ApiModelProperty("合同管理id") + private Long contractManageId; + + @ApiModelProperty("参数内容") + @Excel(name = "参数内容") + private String content; + + @ApiModelProperty("参数名称") + @Excel(name = "参数名称") + private String parametersName; + + @ApiModelProperty("ids(批量删除用)") + private String ids; +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillingStatementApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillingStatementApi.java index 774f4988d..c1f898c9b 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillingStatementApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillingStatementApi.java @@ -21,6 +21,8 @@ import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.StringUtils; import com.mhd.common.redis.enums.RedisLockTypeEnum; import com.mhd.common.redis.service.RedisLock; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; import org.redisson.RedissonMultiLock; import org.redisson.api.RLock; @@ -327,4 +329,23 @@ public class BillingStatementApi extends BaseController { return getDataTable(list); } -} + /** + * 1. 简单任务示例(Bean模式) + * 这里的 demoJobHandler 必须和调度中心配置一致 + */ + @XxlJob("pushBillManage") + public void pushBillManage() { + // 获取任务参数(货主id) + String shipperId = XxlJobHelper.getJobParam(); + logger.info("XXL-JOB 开始入库业务单推送bms计费流水,货主id参数:{}", shipperId); + try { + billingStatementApplicationService.pushBillManage(shipperId); + // 设置任务执行结果 + XxlJobHelper.handleSuccess("入库业务单推送bms计费流水执行成功"); + } catch (Exception e) { + logger.error("XXL-JOB 执行失败", e); + XxlJobHelper.handleFail("入库业务单推送bms计费流水执行失败:" + e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java index ad94d9f94..1a3decb57 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java @@ -1,10 +1,15 @@ package com.mhd.bms.interfaces.facadeApi; +import java.util.ArrayList; import java.util.List; import com.mhd.bms.application.server.businessDocument.BusinessDocumentApplicationService; +import com.mhd.bms.domain.businessDocument.entity.BusinessDocument; +import com.mhd.bms.domain.businessDocument.repository.facade.IBusinessDocumentService; +import com.mhd.bms.domain.businessDocument.repository.mapper.BusinessDocumentMapper; import com.mhd.common.core.domain.dto.BusinessDataPushDTO; import com.mhd.common.core.utils.IgnoreNullUtil; +import com.mhd.system.api.domain.BusinessDocumentFeign; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +46,9 @@ public class BusinessDocumentApi extends BaseController{ @Resource private BusinessDocumentAssembler businessDocumentAssembler; + @Autowired + private IBusinessDocumentService businessDocumentService; + /** * 分页查询业务单据列表 */ @@ -79,6 +87,33 @@ public class BusinessDocumentApi extends BaseController{ } + + @ApiOperation("保存业务单据") + @PostMapping("/feignSave") + public AjaxResult feignSave(@RequestBody BusinessDocumentFeign businessDocumentFeign) + { + try { + BusinessDocument businessDocumentDO = new BusinessDocument(); + BeanUtils.copyProperties(businessDocumentFeign,businessDocumentDO); + boolean save = businessDocumentService.save(businessDocumentDO); + if (save) { + Long businessDocumentId = businessDocumentDO.getBusinessDocumentId(); + BusinessDocumentDTO businessDocumentDTO = new BusinessDocumentDTO(); + businessDocumentDTO.setBusinessDocumentIds(String.valueOf(businessDocumentId)); + //生效 + takeEffectByIds(businessDocumentDTO); + businessDocumentDTO.setAuditOperation(1); + //审核 + auditByIds(businessDocumentDTO); + } + return toAjax(save); + } catch (ServiceException e) { + return AjaxResult.error(e.getMessage()); + } catch (Exception e){ + return AjaxResult.error("保存业务单据失败:" + e.getMessage()); + } + } + /** * 保存业务单据 */ diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersApi.java index ed2fa4bbf..869a33446 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersApi.java @@ -137,6 +137,13 @@ public class SettlementCustomersApi extends BaseController{ return AjaxResult.success(settlementCustomersApplicationService.getFirstBySettlementEntityId(settlementEntityId, topOrganizationId)); } + @ApiOperation("根据结算对象ID更新整租推送任务ID") + @PostMapping("/updatePushContractManageJobId") + public AjaxResult updatePushContractManageJobId(@RequestParam("settlementCustomersId") Long settlementCustomersId, + @RequestParam("jobId") Integer jobId) { + Boolean result = settlementCustomersApplicationService.updatePushContractManageToBmsJobId(settlementCustomersId, jobId); + return toAjax(result); + } @@ -145,4 +152,5 @@ public class SettlementCustomersApi extends BaseController{ -} + +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersNcConfigApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersNcConfigApi.java new file mode 100644 index 000000000..b3b7f78af --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersNcConfigApi.java @@ -0,0 +1,91 @@ +package com.mhd.bms.interfaces.facadeApi; + +import java.util.List; + +import com.mhd.bms.application.server.settlementCustomersNcConfig.SettlementCustomersNcConfigApplicationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.mhd.bms.interfaces.dto.settlementCustomersNcConfig.SettlementCustomersNcConfigDTO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.todo.SettlementCustomersNcConfigDO; +import com.mhd.bms.domain.settlementCustomersNcConfig.repository.po.SettlementCustomersNcConfigPO; +import com.mhd.bms.interfaces.assembler.settlementCustomersNcConfig.SettlementCustomersNcConfigAssembler; +import javax.annotation.Resource; +import com.mhd.common.core.web.controller.BaseController; +import com.mhd.common.core.web.domain.AjaxResult; +import com.mhd.common.core.web.page.TableDataInfo; + +/** + * 结算对象NC配置Api + * + * @author gen + * @date 2024-06-17 + */ +@Api(tags = "结算对象NC配置") +@RestController +@RequestMapping("/settlementCustomersNcConfigApi") +public class SettlementCustomersNcConfigApi extends BaseController { + + @Autowired + private SettlementCustomersNcConfigApplicationService settlementCustomersNcConfigApplicationService; + + @Resource + private SettlementCustomersNcConfigAssembler settlementCustomersNcConfigAssembler; + + /** + * 分页查询结算对象NC配置列表 + */ + @ApiOperation("查询结算对象NC配置列表") + @GetMapping("/list") + public TableDataInfo list(SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO) { + SettlementCustomersNcConfigDO settlementCustomersNcConfigDO = new SettlementCustomersNcConfigDO(); + BeanUtils.copyProperties(settlementCustomersNcConfigDTO, settlementCustomersNcConfigDO); + startPage(); + List list = settlementCustomersNcConfigApplicationService.queryList(settlementCustomersNcConfigDO); + return getDataTable(list); + } + + /** + * 保存结算对象NC配置 + */ + @ApiOperation("保存结算对象NC配置") + @PostMapping("/save") + public AjaxResult save(@RequestBody SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO) { + try { + // 转换实体 + SettlementCustomersNcConfigDO settlementCustomersNcConfigDO = settlementCustomersNcConfigAssembler.toDO(settlementCustomersNcConfigDTO); + if (settlementCustomersNcConfigDTO.getId() != null) { + return toAjax(settlementCustomersNcConfigApplicationService.update(settlementCustomersNcConfigDO)); + } else { + return toAjax(settlementCustomersNcConfigApplicationService.insert(settlementCustomersNcConfigDO)); + } + } catch (Exception e) { + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } + + /** + * 批量删除结算对象NC配置 + */ + @ApiOperation("批量删除结算对象NC配置") + @PostMapping("/deleteByIds") + public AjaxResult deleteByIds(@RequestBody SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO) { + try { + settlementCustomersNcConfigApplicationService.deleteByIds(settlementCustomersNcConfigDTO); + return AjaxResult.success("操作成功"); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 获取结算对象NC配置详细信息 + */ + @ApiOperation("获取结算对象NC配置") + @GetMapping(value = "/getInfoById") + public AjaxResult getInfoById(SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO) { + return AjaxResult.success(settlementCustomersNcConfigApplicationService.getInfo(settlementCustomersNcConfigDTO.getId())); + } +} diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersParametersApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersParametersApi.java new file mode 100644 index 000000000..8d24ecfb3 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/SettlementCustomersParametersApi.java @@ -0,0 +1,101 @@ +package com.mhd.bms.interfaces.facadeApi; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.mhd.bms.application.server.settlementCustomersParameters.SettlementCustomersParametersApplicationService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.mhd.bms.interfaces.dto.settlementCustomersParameters.SettlementCustomersParametersDTO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.todo.SettlementCustomersParametersDO; +import com.mhd.bms.domain.settlementCustomersParameters.repository.po.SettlementCustomersParametersPO; +import com.mhd.bms.interfaces.assembler.settlementCustomersParameters.SettlementCustomersParametersAssembler; +import javax.annotation.Resource; +import com.mhd.common.core.web.controller.BaseController; +import com.mhd.common.core.web.domain.AjaxResult; +import com.mhd.common.core.web.page.TableDataInfo; + +/** + * 结算对象参数Api + * + * @author gen + * @date 2024-06-17 + */ +@RestController +@RequestMapping("/settlementCustomersParametersApi") +public class SettlementCustomersParametersApi extends BaseController { + + @Autowired + private SettlementCustomersParametersApplicationService settlementCustomersParametersApplicationService; + + @Resource + private SettlementCustomersParametersAssembler settlementCustomersParametersAssembler; + + /** + * 分页查询结算对象参数列表 + */ + @ApiOperation("查询结算对象参数列表") + @GetMapping("/list") + public TableDataInfo list(SettlementCustomersParametersDTO settlementCustomersParametersDTO) { + SettlementCustomersParametersDO settlementCustomersParametersDO = new SettlementCustomersParametersDO(); + BeanUtils.copyProperties(settlementCustomersParametersDTO, settlementCustomersParametersDO); + startPage(); + List list = settlementCustomersParametersApplicationService.queryList(settlementCustomersParametersDO); + return getDataTable(list); + } + + /** + * 保存结算对象参数 + */ + @ApiOperation("保存结算对象参数") + @PostMapping("/save") + public AjaxResult save(@RequestBody SettlementCustomersParametersDTO settlementCustomersParametersDTO) { + try { + // 转换实体 + SettlementCustomersParametersDO settlementCustomersParametersDO = settlementCustomersParametersAssembler.toDO(settlementCustomersParametersDTO); + if (settlementCustomersParametersDTO.getId() != null) { + return toAjax(settlementCustomersParametersApplicationService.update(settlementCustomersParametersDO)); + } else { + return toAjax(settlementCustomersParametersApplicationService.insert(settlementCustomersParametersDO)); + } + } catch (Exception e) { + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } + + /** + * 批量删除结算对象参数 + */ + @ApiOperation("批量删除结算对象参数") + @PostMapping("/deleteByIds") + public AjaxResult deleteByIds(@RequestBody SettlementCustomersParametersDTO settlementCustomersParametersDTO) { + try { + settlementCustomersParametersApplicationService.deleteByIds(settlementCustomersParametersDTO); + return AjaxResult.success("操作成功"); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 获取结算对象参数详细信息 + */ + @ApiOperation("获取结算对象参数") + @GetMapping(value = "/getInfoById") + public AjaxResult getInfoById(SettlementCustomersParametersDTO settlementCustomersParametersDTO) { + return AjaxResult.success(settlementCustomersParametersApplicationService.getInfo(settlementCustomersParametersDTO.getId())); + } + + /** + * 根据结算对象id查询结算对象参数列表 + */ + @ApiOperation("根据结算对象id查询结算对象参数列表") + @GetMapping(value = "/getListBySettlementCustomersId") + public AjaxResult getListBySettlementCustomersId(@RequestParam("settlementCustomersId") Long settlementCustomersId) { + return AjaxResult.success(settlementCustomersParametersApplicationService.getListBySettlementCustomersId(settlementCustomersId)); + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/util/XxlJobConfig.java b/mhd_bms/src/main/java/com/mhd/bms/util/XxlJobConfig.java new file mode 100644 index 000000000..4278484b2 --- /dev/null +++ b/mhd_bms/src/main/java/com/mhd/bms/util/XxlJobConfig.java @@ -0,0 +1,54 @@ +package com.mhd.bms.util; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * XXL-JOB 配置类 + */ +@Configuration +public class XxlJobConfig { + private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + + @Value("${xxl.job.executor.address}") + private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); + xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } +} \ No newline at end of file diff --git a/mhd_bms/src/main/resources/mapper/BillingStatementMapper.xml b/mhd_bms/src/main/resources/mapper/BillingStatementMapper.xml index a7a274c01..82ebab40d 100644 --- a/mhd_bms/src/main/resources/mapper/BillingStatementMapper.xml +++ b/mhd_bms/src/main/resources/mapper/BillingStatementMapper.xml @@ -271,4 +271,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + \ No newline at end of file diff --git a/mhd_bms/src/main/resources/mapper/SettlementCustomersMapper.xml b/mhd_bms/src/main/resources/mapper/SettlementCustomersMapper.xml index e2fd28e11..6ec30e44c 100644 --- a/mhd_bms/src/main/resources/mapper/SettlementCustomersMapper.xml +++ b/mhd_bms/src/main/resources/mapper/SettlementCustomersMapper.xml @@ -43,6 +43,10 @@ + + + + @@ -115,6 +119,10 @@ bd.business_state, bd.document_type, bd.document_type_code, + a.org_code, + a.push_billing_record_job_id, + a.push_contract_manage_to_bms_job_id, + a.push_bill_manage_job_id, bd.create_time as business_create_time from settlement_customers a left join "NGWL_TEST_USER"."USER_SHIPPER" b on a.settlement_entity_id = b.user_id diff --git a/mhd_bms/src/main/resources/mapper/SettlementCustomersNcConfigMapper.xml b/mhd_bms/src/main/resources/mapper/SettlementCustomersNcConfigMapper.xml new file mode 100644 index 000000000..b5008151b --- /dev/null +++ b/mhd_bms/src/main/resources/mapper/SettlementCustomersNcConfigMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a.id, + a.settlement_customers_id, + a.top_organization_id, + a.organization_id, + a.organization_name, + a.nc_code, + a.nc_settle_method, + a.warehouse_temp_layer_type, + a.scatter_rent_billing_config, + a.nc_settle_method_name, + a.warehouse_temp_layer_type_name, + a.scatter_rent_billing_config_name, + a.owe_rent_max_month, + a.account_period_day, + a.remark, + a.create_time, + a.create_by, + a.create_by_name, + a.update_time, + a.update_by, + a.update_by_name, + a.del_flag + + + + + diff --git a/mhd_bms/src/main/resources/mapper/SettlementCustomersParametersMapper.xml b/mhd_bms/src/main/resources/mapper/SettlementCustomersParametersMapper.xml new file mode 100644 index 000000000..58c2a4b5b --- /dev/null +++ b/mhd_bms/src/main/resources/mapper/SettlementCustomersParametersMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + a.id, + a.settlement_customers_id, + a.top_organization_id, + a.organization_id, + a.organization_name, + a.settlement_customers_code, + a.settlement_entity_id, + a.settlement_entity, + a.contract_number, + a.contract_manage_id, + a.content, + a.parameters_name, + a.create_time, + a.create_by, + a.create_by_name, + a.update_time, + a.update_by, + a.update_by_name, + a.del_flag + + + + + diff --git a/mhd_oms/pom.xml b/mhd_oms/pom.xml index 0e328f990..170cf7d1f 100644 --- a/mhd_oms/pom.xml +++ b/mhd_oms/pom.xml @@ -127,7 +127,11 @@ com.mhd mhd-common-log - + + com.xuxueli + xxl-job-core + 2.4.0 + diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java index 0a18e0d0f..20f5c398c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java @@ -19,6 +19,9 @@ import com.mhd.oms.domain.executionInMaterialDetail.repository.po.ExecutionInMat import com.mhd.oms.domain.executionInMaterialDetail.repository.todo.ExecutionInMaterialDetailBaseDO; import com.mhd.oms.domain.executionInMaterialDetail.repository.todo.ExecutionInMaterialDetailDO; import com.mhd.oms.domain.executionInMaterialDetail.repository.todo.InventoryAdjustmentRecordPO; +import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature; +import com.mhd.oms.domain.electronicSignature.repository.facade.IElectronicSignatureMaterialDetailService; +import com.mhd.oms.domain.electronicSignature.repository.facade.IElectronicSignatureService; import com.mhd.oms.domain.executionStockInOrder.entity.ExecutionStockInOrder; import com.mhd.oms.domain.executionStockInOrder.repository.facade.IExecutionStockInOrderService; import com.mhd.oms.domain.executionStockInOrder.repository.mapper.ExecutionStockInOrderMapper; @@ -94,6 +97,10 @@ public class ExecutionStockInOrderDomainService { private ReservationStockInOrderMapper stockInOrderMapper; @Autowired private ReserveStockInOrderMapper reserveStockInOrderMapper; + @Autowired + private IElectronicSignatureService electronicSignatureService; + @Autowired + private IElectronicSignatureMaterialDetailService electronicSignatureMaterialDetailService; /** * 分页查询入库单列表 */ @@ -523,25 +530,34 @@ public class ExecutionStockInOrderDomainService { @Transactional(rollbackFor = Exception.class) public Boolean cancelAuditState(ExecutionStockInOrderDO stockInOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - Integer issueStatus = stockInOrderDO.getIssueStatus(); // 获取用户姓名(优先从UserPo获取,如果为空则使用realname,最后使用username作为兜底) String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null ? loginUser.getUserPo().getUserName() : (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername()); - //逻辑删除w入库单信息 + //回退下发在WMS产生的数据:调用WMS清理接口,与下发链路(omsInOrderAdd→omsInOrderAddDetail→自动审核 + //生成收货单/收货任务/收货作业单/质检单/电子签名)对称,WMS侧一个事务内逻辑删除全部数据。 + //此前OMS直接跨库UPDATE仅清理入库单/明细/收货单/收货明细4张表,收货任务、收货作业单、质检单、 + //电子签名记录残留;且按入库单号取收货单号(getWShOrder返回String)在重复下发产生多张同号收货单时 + //抛TooManyResultsException,取消下发整体回滚失败——正是"下发产生2条数据后取消下发阻断"的直接原因。 + //清理失败时抛错整体回滚(OMS保持已下发状态),WMS清理幂等,取消下发可安全重试 List inOrderIds = stockInOrderDO.getInOrderIds(); if (inOrderIds != null && !inOrderIds.isEmpty()) { for (Long inOrderId : inOrderIds) { ExecutionStockInOrder executionStockInOrder = reservationStockInOrderMapper.selectById(inOrderId); - if (executionStockInOrder != null) { - String inOrderNumber = executionStockInOrder.getInOrderNumber(); - reservationStockInOrderMapper.delWOrder(inOrderNumber); - reservationStockInOrderMapper.delWOrderDetail(inOrderNumber); - String wShOrder = reservationStockInOrderMapper.getWShOrder(inOrderNumber); - reservationStockInOrderMapper.delWShOrder(inOrderNumber); - reservationStockInOrderMapper.delWShOrderDetail(wShOrder); + if (executionStockInOrder == null) { + continue; } + String inOrderNumber = executionStockInOrder.getInOrderNumber(); + StockInOrder cancelParam = new StockInOrder(); + cancelParam.setInOrderNumber(inOrderNumber); + AjaxResult cancelResult = wmsServiceFeign.omsCancelInOrder(cancelParam); + if (cancelResult == null || !"200".equals(String.valueOf(cancelResult.get("code")))) { + throw new ServiceException("取消下发失败:入库单[" + inOrderNumber + "]WMS数据清理失败:" + + (cancelResult == null ? "WMS服务不可用或已降级" : cancelResult.get("msg"))); + } + //清理下发自动审核时生成的待签名电子签名记录(已签名记录保留作凭证,不阻断主流程) + cancelPendingSignature(inOrderNumber); } } @@ -556,6 +572,29 @@ public class ExecutionStockInOrderDomainService { .in(ExecutionStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds())); } + /** + * 取消下发时清理下发自动审核生成的待签名电子签名记录(signatureStatus=1)及其明细 + */ + private void cancelPendingSignature(String inOrderNumber) { + try { + List signatures = electronicSignatureService.list( + new LambdaQueryWrapper() + .eq(ElectronicSignature::getOrderNumber, inOrderNumber) + .eq(ElectronicSignature::getOrderType, "IN") + .eq(ElectronicSignature::getSignatureStatus, 1) + .eq(ElectronicSignature::getDelFlag, 1)); + for (ElectronicSignature signature : signatures) { + electronicSignatureMaterialDetailService.deleteBySignatureId(signature.getSignatureId()); + electronicSignatureService.update(new UpdateWrapper().lambda() + .set(ElectronicSignature::getDelFlag, 2) + .eq(ElectronicSignature::getSignatureId, signature.getSignatureId())); + } + } catch (Exception e) { + //WMS数据已清理成功,签名属附属记录,清理失败仅记日志,不回滚取消下发主流程 + log.error("取消下发清理电子签名记录失败,入库单号:{}", inOrderNumber, e); + } + } + /** * @description 审核入库单 * @author ZhouGY @@ -574,9 +613,15 @@ public class ExecutionStockInOrderDomainService { } // 入参去重:同一请求内重复ID会导致同一执行单被多次推送WMS List distinctInOrderIds = inOrderIds.stream().distinct().collect(Collectors.toList()); + // 只校验有效单据:已删除(软删)执行单混入ID(过期页面提交)时在此拦截, + // 此前list/getById均不过滤del_flag,软删单照样被推到WMS形成"幽灵单" List checkOrders = stockInOrderService.list( new QueryWrapper().lambda() - .in(ExecutionStockInOrder::getInOrderId, distinctInOrderIds)); + .in(ExecutionStockInOrder::getInOrderId, distinctInOrderIds) + .eq(ExecutionStockInOrder::getDelFlag, 1)); + if (checkOrders.size() != distinctInOrderIds.size()) { + throw new ServiceException("下发失败:存在已删除的单据,请刷新后重新选择"); + } for (ExecutionStockInOrder order : checkOrders) { if (order.getIssueTime() != null) { throw new ServiceException("下发失败:单据[" + order.getInOrderNumber() + "]已下发,不可重复下发;如需重新下发请先取消下发"); @@ -589,6 +634,9 @@ public class ExecutionStockInOrderDomainService { String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null ? loginUser.getUserPo().getUserName() : (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername()); + //下发标记改为条件更新(issue_time IS NULL):前置list校验与update之间存在并发窗口, + //双击/并发请求会同时通过校验各自推一遍WMS(WMS侧同号入库单/明细翻倍的根源之一); + //加上条件后,后到的事务影响行数为0,在此拦截,保证同一执行单只会推送WMS一次 boolean update = stockInOrderService.update(null, new UpdateWrapper().lambda() .set(ExecutionStockInOrder::getIssueId, loginUser.getUserid()) .set(ExecutionStockInOrder::getIssueName, userRealName) @@ -597,7 +645,11 @@ public class ExecutionStockInOrderDomainService { .set(ExecutionStockInOrder::getUpdateBy, loginUser.getUserid()) .set(ExecutionStockInOrder::getUpdateByName, userRealName) .set(ExecutionStockInOrder::getUpdateTime, new Date()) - .in(ExecutionStockInOrder::getInOrderId, distinctInOrderIds)); + .in(ExecutionStockInOrder::getInOrderId, distinctInOrderIds) + .isNull(ExecutionStockInOrder::getIssueTime)); + if (!update) { + throw new ServiceException("下发失败:单据已被并发下发,请刷新后查看"); + } //todo下发推送到wms for (Long inOrderId : distinctInOrderIds) { @@ -612,7 +664,13 @@ public class ExecutionStockInOrderDomainService { stockInOrder.setOrganizationId(orgId); stockInOrder.setOrganizationName(orgName); stockInOrder.setTopOrganizationId(topOrgId); - wmsServiceFeign.omsInOrderAdd(stockInOrder); + //WMS保存结果必须校验:此前接口返回void、Feign降级被静默吞掉,OMS标记已下发但WMS无数据/缺明细, + //收货流程无从进行(流程阻断);失败抛错回滚下发标记,WMS侧幂等(主单/明细判重),重下发安全 + AjaxResult addResult = wmsServiceFeign.omsInOrderAdd(stockInOrder); + if (addResult == null || !"200".equals(String.valueOf(addResult.get("code")))) { + throw new ServiceException("下发失败:入库单[" + stockInOrder.getInOrderNumber() + "]推送WMS保存主单失败:" + + (addResult == null ? "WMS服务不可用或已降级" : addResult.get("msg"))); + } String inOrderNumber = stockInOrder.getInOrderNumber(); // 只推有效明细(del_flag=1),软删旧行不推WMS,防止WMS侧计划数量虚高 List materialDetailList = materialDetailService.list(new QueryWrapper().lambda() @@ -633,7 +691,11 @@ public class ExecutionStockInOrderDomainService { } inMaterialDetailList.add(inMaterialDetail); } - wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList); + AjaxResult detailResult = wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList); + if (detailResult == null || !"200".equals(String.valueOf(detailResult.get("code")))) { + throw new ServiceException("下发失败:入库单[" + inOrderNumber + "]推送WMS保存明细失败:" + + (detailResult == null ? "WMS服务不可用或已降级" : detailResult.get("msg"))); + } } return update; } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/entity/ExecutionStockOutOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/entity/ExecutionStockOutOrder.java index ed985f9ba..67029be76 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/entity/ExecutionStockOutOrder.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/entity/ExecutionStockOutOrder.java @@ -504,4 +504,16 @@ public class ExecutionStockOutOrder extends BaseVOEntity { @Excel(name = "车次") private String shuttleNo; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java index cedc1b2d4..58f120900 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/po/ExecutionStockOutOrderPO.java @@ -516,4 +516,16 @@ public class ExecutionStockOutOrderPO extends BaseVOEntity { @ApiModelProperty("车次") @Excel(name = "车次") private String shuttleNo; + + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java index 9104aec61..b8317cf1c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDO.java @@ -576,4 +576,16 @@ public class ExecutionStockOutOrderDO extends BaseVOEntity { @ApiModelProperty("车次") private String shuttleNo; + + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java index 3478f949c..0b2033f43 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/repository/todo/ExecutionStockOutOrderDTO.java @@ -564,4 +564,16 @@ public class ExecutionStockOutOrderDTO extends ExecutionStockOutOrderBaseDTO { @ApiModelProperty("车次") private String shuttleNo; + + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/entity/ReservationInMaterialDetail.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/entity/ReservationInMaterialDetail.java index 84ffc560f..18701cb6e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/entity/ReservationInMaterialDetail.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/entity/ReservationInMaterialDetail.java @@ -381,6 +381,10 @@ public class ReservationInMaterialDetail extends BaseVOEntity { private Date drinkDate; @ApiModelProperty("火险保费") private BigDecimal fireInsureFee; + @ApiModelProperty("夫力费") + private BigDecimal manpowerFee; + @ApiModelProperty("仓租费") + private BigDecimal totalWarehouseRent; //订单行号 diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/po/ReservationInMaterialDetailPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/po/ReservationInMaterialDetailPO.java index f6f111ea6..9579650ee 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/po/ReservationInMaterialDetailPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/po/ReservationInMaterialDetailPO.java @@ -483,6 +483,10 @@ public class ReservationInMaterialDetailPO extends ReservationStockInOrderBasePO private String lotNumber; @ApiModelProperty("火险保费") private BigDecimal fireInsureFee; + @ApiModelProperty("夫力费") + private BigDecimal manpowerFee; + @ApiModelProperty("仓租费") + private BigDecimal totalWarehouseRent; //订单行号 private String lineNumGw; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDO.java index 9d95286ff..d4d4c3cb8 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDO.java @@ -448,6 +448,10 @@ public class ReservationInMaterialDetailDO extends ReservationStockInOrderBaseDO private BigDecimal unitPrice; @ApiModelProperty("火险保费") private BigDecimal fireInsureFee; + @ApiModelProperty("夫力费") + private BigDecimal manpowerFee; + @ApiModelProperty("仓租费") + private BigDecimal totalWarehouseRent; //订单行号 private String lineNumGw; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDTO.java index d46d7c2a4..1daea2ee9 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationInMaterialDetail/repository/todo/ReservationInMaterialDetailDTO.java @@ -455,6 +455,10 @@ public class ReservationInMaterialDetailDTO extends BaseVOEntity { private String productionDate; @ApiModelProperty("火险保费") private BigDecimal fireInsureFee; + @ApiModelProperty("夫力费") + private BigDecimal manpowerFee; + @ApiModelProperty("仓租费") + private BigDecimal totalWarehouseRent; //订单行号 private String lineNumGw; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/entity/ReservationOutMaterialDetail.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/entity/ReservationOutMaterialDetail.java index 4c5df285d..a5ddd8b71 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/entity/ReservationOutMaterialDetail.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/entity/ReservationOutMaterialDetail.java @@ -501,6 +501,9 @@ public class ReservationOutMaterialDetail extends BaseVOEntity { @Excel(name = "库存数量") private BigDecimal stockQuantity; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + //订单行号 private String lineNumGw; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/po/ReservationOutMaterialDetailPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/po/ReservationOutMaterialDetailPO.java index 8164f2a13..1e19fb7dd 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/po/ReservationOutMaterialDetailPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/po/ReservationOutMaterialDetailPO.java @@ -519,6 +519,9 @@ public class ReservationOutMaterialDetailPO extends ReservationStockOutOrderBase @Excel(name = "库存数量") private BigDecimal stockQuantity; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + @ApiModelProperty("出库异常明细:计划数量(复核异常场景=拣货数量)") @TableField(exist = false) private BigDecimal abnormalPlanQuantity; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDO.java index ab5e26364..2df55d8d9 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDO.java @@ -477,6 +477,8 @@ public class ReservationOutMaterialDetailDO extends BaseVOEntity { @Excel(name = "库存数量") private BigDecimal stockQuantity; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; @ApiModelProperty("调整前库存数量") @Excel(name = "调整前库存数量") diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDTO.java index 46e5cdee6..ec888f1b0 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationOutMaterialDetail/repository/todo/ReservationOutMaterialDetailDTO.java @@ -469,6 +469,8 @@ public class ReservationOutMaterialDetailDTO extends BaseVOEntity { @Excel(name = "库存数量") private BigDecimal stockQuantity; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; @ApiModelProperty("调整前库存数量") @Excel(name = "调整前库存数量") diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java index 97435b85f..2b73c694d 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java @@ -70,4 +70,7 @@ public interface IReservationStockInOrderService extends IService parseStockInExcel(MultipartFile file, String sheetName) throws Exception; + //StockInDataDTO parseStockInExcel(MultipartFile file, String sheetName) throws Exception; + + public List queryPushBmsList(); } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java index 6749cbfc2..16e7e43d2 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java @@ -79,4 +79,6 @@ public interface ReservationStockInOrderMapper extends BaseMapper queryPushBmsList(); } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java index c1a474c7a..837b754b5 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java @@ -336,6 +336,12 @@ public class ReservationStockInOrderImpl extends ServiceImpl queryPushBmsList() { + return stockInOrderMapper.queryPushBmsList(); + } + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderApplicationService.java index fe3a31e02..b84d86932 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderApplicationService.java @@ -18,6 +18,8 @@ import com.mhd.oms.domain.gwLog.repository.mapper.GwLogMapper; import com.mhd.oms.domain.reservationInMaterialDetail.entity.ReservationInMaterialDetail; import com.mhd.oms.domain.reservationInMaterialDetail.repository.mapper.ReservationInMaterialDetailMapper; import com.mhd.oms.domain.reservationInMaterialDetail.repository.po.ReservationInMaterialDetailPO; +import com.mhd.oms.domain.reservationMaterialInventory.repository.facade.IReservationMaterialInventoryService; +import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper; import com.mhd.oms.domain.reservationStockInOrder.entity.ReservationStockInOrder; import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper; import com.mhd.oms.domain.reservationStockInOrder.repository.po.MaterialBaseInfoPO; @@ -76,6 +78,8 @@ public class ReservationStockInOrderApplicationService { private ReservationStockInOrderMapper reservationStockInOrderMapper; @Autowired private ReservationInMaterialDetailMapper reservationInMaterialDetailMapper; + @Autowired + private IReservationMaterialInventoryService reservationMaterialInventoryService; // @Autowired // private IMaterialBaseInfoService materialBaseInfoService; private static final String PUSH_API_URL = "http://10.102.192.15/nagu-erp-api/transfer/pushData"; @@ -2285,4 +2289,23 @@ public class ReservationStockInOrderApplicationService { public String generateReserveOrderNumber1() { return stockInOrderDomainService.generateReserveOrderNumber1(); } + + public List queryPushBmsList() { + return stockInOrderDomainService.queryPushBmsList(); + } + + public void pushBillingRecord() { + + //reservationMaterialInventoryService + // 当天应该推送的数据 + List reservationStockInOrderPOS = stockInOrderDomainService.queryPushBmsList(); + if (reservationStockInOrderPOS!=null&&reservationStockInOrderPOS.size()>0){ + for (ReservationStockInOrderPO reservationStockInOrderPO : reservationStockInOrderPOS) { + String inOrderNumber = reservationStockInOrderPO.getInOrderNumber(); + ReservationInMaterialDetail reservationInMaterialDetail = reservationInMaterialDetailMapper.selectOne(new LambdaQueryWrapper() + .eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber) + .eq(ReservationInMaterialDetail::getDelFlag, 0)); + } + } + } } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java index 8fbe068b6..f327fda66 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java @@ -525,9 +525,14 @@ public class ReservationStockInOrderDomainService { if (inOrderIds == null || inOrderIds.isEmpty()) { throw new ServiceException("下发失败:未选择单据"); } + // 只校验有效单据:软删单混入ID(过期页面提交)时在此拦截 List checkOrders = stockInOrderService.list( new QueryWrapper().lambda() - .in(ReservationStockInOrder::getInOrderId, inOrderIds)); + .in(ReservationStockInOrder::getInOrderId, inOrderIds) + .eq(ReservationStockInOrder::getDelFlag, 1)); + if (checkOrders.size() != inOrderIds.stream().distinct().count()) { + throw new ServiceException("下发失败:存在已删除的单据,请刷新后重新选择"); + } for (ReservationStockInOrder order : checkOrders) { // 校验1:必须已审核(issueStatus==2 表示审核成功) if (order.getIssueStatus() == null || order.getIssueStatus() != 2) { @@ -560,40 +565,12 @@ public class ReservationStockInOrderDomainService { .set(ReservationStockInOrder::getUpdateTime, new Date()) .in(ReservationStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds())); - //todo下发推送到wms - for (Long inOrderId : inOrderIds) { - ReservationStockInOrder byId = stockInOrderService.getById(inOrderId); - StockInOrder stockInOrder = new StockInOrder(); - BeanUtils.copyProperties(byId, stockInOrder, "inOrderId"); - stockInOrder.setOmsStockInOrderId(String.valueOf(byId.getInOrderId())); + // 业务链路(2026-09与业务确认,生产验证):预约单下发→生成执行单→执行单下发时才推送WMS。 + // 预约单下发此前会先把预约单自身推到WMS(omsInOrderAdd/omsInOrderAddDetail),执行单下发又推一次, + // 导致WMS入库管理出现预约单号(R260907001)+执行单号(RK260907001)两张单、仓库收两道货。 + // 已移除预约单的WMS推送,WMS推送唯一入口收敛到 ExecutionStockInOrderDomainService.issueOrder。 + // 历史已推送的预约单数据由"取消下发"(cancelIssueOrder→omsCancelInOrder,幂等)负责清理。 - try { - wmsServiceFeign.omsInOrderAdd(stockInOrder); // 推主单 - - String inOrderNumber = stockInOrder.getInOrderNumber(); - List materialDetailList = materialDetailService.list( - new QueryWrapper().lambda() - .eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber) - .eq(ReservationInMaterialDetail::getDelFlag, 1)); - List inMaterialDetailList = new ArrayList<>(); - for (ReservationInMaterialDetail reservationInMaterialDetail : materialDetailList) { - InMaterialDetail inMaterialDetail = new InMaterialDetail(); - BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail, "materialDetailId"); - inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId())); - // 过期日期为空且饮用日期有值时,用饮用日期补齐过期日期(食品业务饮用日期即效期), - // 确保下发WMS后入库/收货/库存链路的过期日期能正常回显 - if (inMaterialDetail.getExpiryDate() == null && inMaterialDetail.getDrinkDate() != null) { - inMaterialDetail.setExpiryDate(inMaterialDetail.getDrinkDate()); - } - inMaterialDetailList.add(inMaterialDetail); - } - wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList); // 推明细(会触发WMS自动审核) - log.info("下发到WMS成功,单据号:{}", byId.getInOrderNumber()); - } catch (Exception e) { - log.error("下发到WMS失败,单据号:{}", byId.getInOrderNumber(), e); - throw new ServiceException("下发到WMS失败:" + e.getMessage()); - } - } //todo下发推送到入库业务单 for (Long inOrderId : inOrderIds) { // Long inOrderId = stockInOrderDO.getInOrderId(); @@ -748,11 +725,17 @@ public class ReservationStockInOrderDomainService { for (Long inOrderId : inOrderIds) { ReservationStockInOrder byId = stockInOrderService.getById(inOrderId); String inOrderNumber = byId.getInOrderNumber(); + //清理预约单自身下发到WMS的数据(下发时omsInOrderAdd推过主单/明细并自动审核生成收货链路) + cancelWmsInOrder(inOrderNumber); List list = executionStockInOrderService.list(new QueryWrapper().lambda() .eq(ExecutionStockInOrder::getBusinessInOrderNumber, inOrderNumber) .eq(ExecutionStockInOrder::getDelFlag, 1)); for (ExecutionStockInOrder executionStockInOrder : list) { String inOrderNumber1 = executionStockInOrder.getInOrderNumber(); + //已下发的执行单同步清理WMS侧数据(与执行单取消下发同一清理接口,未下发则WMS无数据幂等跳过) + if (executionStockInOrder.getIssueTime() != null) { + cancelWmsInOrder(inOrderNumber1); + } List materialDetails = executionInMaterialDetailService.list(new QueryWrapper().lambda() .eq(ExecutionInMaterialDetail::getInOrderNumber, inOrderNumber1) .eq(ExecutionInMaterialDetail::getDelFlag, 1)); @@ -770,6 +753,20 @@ public class ReservationStockInOrderDomainService { return update; } + /** + * 调用WMS清理接口回退下发产生的数据(入库单/明细、收货单/明细、收货任务、收货作业单/明细、质检单), + * WMS侧已开始收货会返回错误在此抛出,保证不会误删真实收货数据 + */ + private void cancelWmsInOrder(String inOrderNumber) { + StockInOrder cancelParam = new StockInOrder(); + cancelParam.setInOrderNumber(inOrderNumber); + AjaxResult cancelResult = wmsServiceFeign.omsCancelInOrder(cancelParam); + if (cancelResult == null || !"200".equals(String.valueOf(cancelResult.get("code")))) { + throw new ServiceException("取消下发失败:入库单[" + inOrderNumber + "]WMS数据清理失败:" + + (cancelResult == null ? "WMS服务不可用或已降级" : cancelResult.get("msg"))); + } + } + @Transactional(rollbackFor = Exception.class) public Boolean executeAndIssue(ReservationStockInOrderDO stockInOrderDO) { // 防重复执行校验(与 issueOrder 的防重逻辑对齐):issueTime 有值表示已下发/执行过。 @@ -778,9 +775,14 @@ public class ReservationStockInOrderDomainService { if (inOrderIds == null || inOrderIds.isEmpty()) { throw new ServiceException("执行失败:未选择单据"); } + // 只校验有效单据:软删单混入ID(过期页面提交)时在此拦截(与 issueOrder 校验口径一致) List checkOrders = stockInOrderService.list( new QueryWrapper().lambda() - .in(ReservationStockInOrder::getInOrderId, inOrderIds)); + .in(ReservationStockInOrder::getInOrderId, inOrderIds) + .eq(ReservationStockInOrder::getDelFlag, 1)); + if (checkOrders.size() != inOrderIds.stream().distinct().count()) { + throw new ServiceException("执行失败:存在已删除的单据,请刷新后重新选择"); + } for (ReservationStockInOrder order : checkOrders) { if (order.getIssueTime() != null) { throw new ServiceException("执行失败:单据[" + order.getInOrderNumber() + "]已下发,不可重复执行;如需重新下发请先取消下发"); @@ -1493,4 +1495,8 @@ public class ReservationStockInOrderDomainService { // 与 generateReserveOrderNumber 收敛为同一套跨表取号逻辑,避免两份实现日后分叉 return generateReserveOrderNumber(); } + + public List queryPushBmsList() { + return stockInOrderService.queryPushBmsList(); + } } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/entity/ReservationStockOutOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/entity/ReservationStockOutOrder.java index 74ade0268..1a8a18599 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/entity/ReservationStockOutOrder.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/entity/ReservationStockOutOrder.java @@ -503,4 +503,16 @@ public class ReservationStockOutOrder extends BaseVOEntity { @Excel(name = "车次") private String shuttleNo; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/po/ReservationStockOutOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/po/ReservationStockOutOrderPO.java index b890a96f5..7f93ccfa5 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/po/ReservationStockOutOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/po/ReservationStockOutOrderPO.java @@ -526,4 +526,16 @@ public class ReservationStockOutOrderPO extends BaseVOEntity { @Excel(name = "车次") private String shuttleNo; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDO.java index fe791b4f5..066e84512 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDO.java @@ -579,4 +579,16 @@ public class ReservationStockOutOrderDO extends BaseVOEntity { @ApiModelProperty("车次") private String shuttleNo; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDTO.java index 8372dce92..f6611d76e 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/repository/todo/ReservationStockOutOrderDTO.java @@ -568,4 +568,16 @@ public class ReservationStockOutOrderDTO extends ReservationStockOutOrderBaseDTO @ApiModelProperty("车次") private String shuttleNo; + @ApiModelProperty("总仓租") + private BigDecimal totalWarehouseRent; + + @ApiModelProperty("业务计价类型") + private String businessChargeType; + + @ApiModelProperty("业务计价方式") + private String businessPriceWay; + + @ApiModelProperty("折扣") + private BigDecimal discount; + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java index ca93d3312..376500b1c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java +++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java @@ -22,7 +22,7 @@ import java.util.Map; /** * 三方服务 Feign */ -@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class) public interface ThirdPartyServiceFeign { //查询当前组织所有三方接口信息 diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java index d62048483..5e497d56c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java @@ -17,6 +17,8 @@ import com.mhd.system.api.domain.InMaterialDetail; import com.mhd.system.api.domain.InMaterialDetailTZPD; import com.mhd.system.api.domain.StockInOrder; import com.mhd.system.api.domain.StockInOrderTZPD; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -313,4 +315,24 @@ public class ReservationStockInOrderApi extends BaseController { return AjaxResult.success(stockInOrderApplicationService.generateReserveOrderNumber1()); } + /** + * 1. 简单任务示例(Bean模式) + * 这里的 demoJobHandler 必须和调度中心配置一致 + */ +// @XxlJob("pushBillingRecord") + public void pushBillingRecord() { + // 获取任务参数 + String param = XxlJobHelper.getJobParam(); + logger.info("XXL-JOB 开始入库业务单推送bms计费流水,参数:{}", param); + + try { + stockInOrderApplicationService.pushBillingRecord(); + // 设置任务执行结果 + XxlJobHelper.handleSuccess("入库业务单推送bms计费流水执行成功"); + } catch (Exception e) { + logger.error("XXL-JOB 执行失败", e); + XxlJobHelper.handleFail("入库业务单推送bms计费流水执行失败:" + e.getMessage()); + } + } + } \ No newline at end of file diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml index ee058f0f6..88471e390 100644 --- a/mhd_oms/src/main/resources/bootstrap.yml +++ b/mhd_oms/src/main/resources/bootstrap.yml @@ -18,15 +18,15 @@ spring: discovery: # server-addr: 127.0.0.1:8848 # 线上测试环境配置 容器名+端口号 -# server-addr: 10.33.0.129:6010 - server-addr: 10.102.192.30:6848 + server-addr: 10.33.0.129:6010 +# server-addr: 10.102.192.30:6848 username: nacos password: manhuoda@2023 config: # server-addr: 127.0.0.1:8848 # 线上测试环境配置 容器名+端口号 -# server-addr: 10.33.0.129:6010 - server-addr: 10.102.192.30:6848 + server-addr: 10.33.0.129:6010 +# server-addr: 10.102.192.30:6848 username: nacos password: manhuoda@2023 #线上正式环境 diff --git a/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml b/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml index 340755509..631d9f187 100644 --- a/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/executionStockOutOrder/ExecutionStockOutOrderMapper.xml @@ -112,6 +112,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + @@ -130,7 +134,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.CUSTOMS_INSPECTION_FLAG,a.NEED_DECLARE_FLAG,a.NEED_TRANSPORT_FLAG,a.picture_app,a.reservation_audit_time,a.reservation_audit_name ,a.reservation_audit_id,a.issue_name,a.issue_id,a.issue_time,a.issue_status,a.tms_order_number, a.DIRECTOR_NAME ,a.DIRECTOR_PHONE,a.DIRECTOR_ID,a.RESERVATION_ORDER_SOURCE,a.OUTBOUND_TIME,a.RETURN_QUANTITY,a.DELIVERY_NAME,a.CUSTOMER_NUMBER,a.INVOICE_NUMBER,a.RETURN_ORDER_NUMBER,a.TOTAL_AMOUNT, - a.ROUTE,a.PUSH_TIME,a.PUSH_STATUS,a.PUSH_BY,a.PUSH_BY_NAME,a.LINE_CODE,a.LINE_NAME,a.SHUTTLE_NO + a.ROUTE,a.PUSH_TIME,a.PUSH_STATUS,a.PUSH_BY,a.PUSH_BY_NAME,a.LINE_CODE,a.LINE_NAME,a.SHUTTLE_NO, + a.TOTAL_WAREHOUSE_RENT,a.BUSINESS_CHARGE_TYPE,a.BUSINESS_PRICE_WAY,a.DISCOUNT diff --git a/mhd_oms/src/main/resources/mapper/reservationInMaterialDetail/ReservationInMaterialDetailMapper.xml b/mhd_oms/src/main/resources/mapper/reservationInMaterialDetail/ReservationInMaterialDetailMapper.xml index 0c4473956..2b38b76f2 100644 --- a/mhd_oms/src/main/resources/mapper/reservationInMaterialDetail/ReservationInMaterialDetailMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationInMaterialDetail/ReservationInMaterialDetailMapper.xml @@ -90,6 +90,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -110,7 +112,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.lot_no , a.material_detail_id, a.organization_id, a.organization_name, a.top_organization_id, a.unique_id, a.in_order_number, a.material_base_info_id, a.material_code, a.material_name, a.bar_code, a.quantity, a.receipt_quantity, a.shelves_quantity, - a.receipt_status, a.shelves_status, a.pack_id, a.pack_code, a.pack_name,a.drink_date,a.fire_insure_fee, + a.receipt_status, a.shelves_status, a.pack_id, a.pack_code, a.pack_name,a.drink_date,a.fire_insure_fee,a.manpower_fee,a.total_warehouse_rent, CASE WHEN a.pack_detail_id IS NULL OR TRIM(a.pack_detail_id) = '' THEN NULL ELSE CAST(a.pack_detail_id AS BIGINT) diff --git a/mhd_oms/src/main/resources/mapper/reservationOutMaterialDetail/ReservationOutMaterialDetailMapper.xml b/mhd_oms/src/main/resources/mapper/reservationOutMaterialDetail/ReservationOutMaterialDetailMapper.xml index f63d86c9e..dc571f3fa 100644 --- a/mhd_oms/src/main/resources/mapper/reservationOutMaterialDetail/ReservationOutMaterialDetailMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationOutMaterialDetail/ReservationOutMaterialDetailMapper.xml @@ -94,6 +94,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -115,6 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.single_gross_weight , a.lot_no , a.stock_quantity , + a.total_warehouse_rent , a.stock_unit ,a.in_order_number , a.material_detail_id, a.organization_id, a.organization_name, a.top_organization_id, a.unique_id, a.out_order_number, a.material_base_info_id, a.line_number, a.material_code, a.material_name, a.bar_code, a.weight_limit, a.volume_limit, a.quantity, a.already_allocation_quantity, a.allocation_quantity, a.picking_quantity, a.check_quantity, ROUND(GREATEST(0, IFNULL(a.quantity, 0) - IFNULL(a.check_quantity, 0), IFNULL(a.picking_quantity, 0) - IFNULL(a.check_quantity, 0)), 2) AS wait_check_quantity, diff --git a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml index bc72a3926..7d5ab84a6 100644 --- a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml @@ -694,6 +694,14 @@ SELECT COUNT(1) FROM reservation_stock_in_order WHERE in_order_number = #{inOrderNumber} + + + SELECT * + FROM MATERIAL_INVENTORY + WHERE TRUNC(CREATE_TIME) = TRUNC(SYSDATE - 1) + AND DEL_FLAG = 1 + AND SHIIPER_ID = #{shipperId} + + + + + + + + + + + + + + + + \ No newline at end of file