Merge remote-tracking branch 'origin/dev-bms-260826' into dev-ty1.2

This commit is contained in:
rcx
2026-09-07 13:50:28 +08:00
174 changed files with 7823 additions and 174 deletions
@@ -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.33.0.129: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);
}
@@ -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);
}
@@ -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;
}
@@ -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<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
@ApiModelProperty("单据类型code")
private String documentTypeCode;
@ApiModelProperty("单据类型")
private String documentType;
@ApiModelProperty("费用类别编码")
private String serviceItemsCode;
@ApiModelProperty("费用类别名称")
private String serviceItemsName;
}
@@ -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<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
@ApiModelProperty(name = "合同科目详情列表")
private List<ContractManageDetailFeignDTO> 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;
}
@@ -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;
}
@@ -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;
}
@@ -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<BmsService
public AjaxResult wholeRentSynchronizationZXF(BusinessDataPushDTO businessDataPushDTO) {
return null;
}
@Override
public AjaxResult feignSaveBusinessDocument(BusinessDocumentFeign businessDocumentFeign) {
return AjaxResult.error("保存业务单据失败");
}
@Override
public AjaxResult getListBySettlementCustomersId(Long settlementCustomersId) {
return AjaxResult.error(throwable.getMessage());
}
@Override
public AjaxResult updatePushContractManageJobId(Long settlementCustomersId, Integer jobId) {
return AjaxResult.error(throwable.getMessage());
}
};
}
}
}
@@ -13,6 +13,8 @@ import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.system.api.AssociationWarehouseFeign;
import com.mhd.system.api.SystemServiceFeign;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -318,6 +320,16 @@ public class RemoteSystemFeignFallbackFactory implements FallbackFactory<SystemS
public AjaxResult matchForMaterialImport(String keyword, Long organizationId) {
return AjaxResult.error("物料分类匹配失败");
}
@Override
public AjaxResult feignSave(ContractManageFeignDTO contractManageFeignDTO) {
return AjaxResult.error("新增合同失败");
}
@Override
public AjaxResult feignSaveContractParameters(ContractManageParametersFeign contractManageParametersFeign) {
return AjaxResult.error("保存合同参数失败");
}
};
}
}
@@ -15,12 +15,17 @@ import com.mhd.bi.domain.biWarehouseTransport.service.BiWarehouseTransportReport
import com.mhd.bi.interfaces.facadeApi.biReport.dto.BiApiResult;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.ComprehensiveSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.WarehouseTransportSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.gps.NanqiGpsLocationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.PlatformSurveillanceVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone.HkMacaoServiceZoneVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TransportOperationZoneVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperationZoneVO;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.feign.ThirdPartyServiceFeign;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -72,6 +77,12 @@ public class BiReportApi extends BaseController {
@Autowired
private BiReportSnapshotSyncService biReportSnapshotSyncService;
@Autowired
private ThirdPartyServiceFeign thirdPartyServiceFeign;
@Autowired
private ObjectMapper objectMapper;
@ApiOperation(value = "手动触发快照同步", notes = "立即写入各 BI 快照表(综合、仓储运输、月台监测、总体运营、仓储运营专区、运输运营专区、港澳服务专区);须带 X-BI-Access-Token")
@PostMapping("/snapshotSync/run")
@@ -139,6 +150,29 @@ public class BiReportApi extends BaseController {
List<RealPlatformInfoPO> data = biPlatformRealDataService.queryPlatformInfoList();
return BiApiResult.ok(data);
}
/**
* 南岐GPS:根据车牌号查询车辆实时定位
* (内部经 ThirdPartyServiceFeign 转发到 mhd_thrid_party 的 /nanqiGps/queryByPlate,逻辑仍在 mhd_thrid_party
*/
@ApiOperation(value = "根据车牌号查询车辆实时定位(南岐GPS)", notes = "按车牌号查询南岐GPS车辆实时定位,实时转发到三方服务")
@GetMapping("/nanqiGps/queryByPlate")
public BiApiResult<NanqiGpsLocationVO> nanqiQueryByPlate(
@ApiParam(value = "车牌号")
@RequestParam(value = "carPlate") String carPlate) {
if (carPlate == null || carPlate.trim().isEmpty()) {
throw new ServiceException("车牌号不能为空");
}
AjaxResult result = thirdPartyServiceFeign.nanqiQueryByPlate(carPlate);
Object codeObj = result == null ? null : result.get("code");
if (codeObj == null || !"200".equals(String.valueOf(codeObj))) {
String msg = result == null ? "南岐GPS查询失败" : String.valueOf(result.get("msg"));
throw new ServiceException(msg);
}
Object data = result.get("data");
NanqiGpsLocationVO vo = objectMapper.convertValue(data, NanqiGpsLocationVO.class);
return BiApiResult.ok(vo);
}
//园区物流大屏接口----------------------------------------------------------------------
/**
* 总体运营态势
@@ -0,0 +1,248 @@
package com.mhd.bi.interfaces.facadeApi.biReport.vo.gps;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 南岐GPS 车辆定位信息 VO(与 mhd_thrid_party.NanqiGpsLocationVO 同构,供 BI 开放接口返回)
*
* @author mhd
*/
@Data
@ApiModel("南岐GPS 车辆定位信息")
public class NanqiGpsLocationVO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("应答结果:1成功 0失败")
private Integer rspCode;
@ApiModelProperty("应答描述")
private String rspDesc;
@ApiModelProperty("车辆id")
private String carId;
@ApiModelProperty("车牌号")
private String carPlate;
@ApiModelProperty("车辆名")
private String carName;
@ApiModelProperty("车队id")
private String teamId;
@ApiModelProperty("车队名称")
private String teamName;
@ApiModelProperty("终端号")
private String tmnNo;
@ApiModelProperty("消息序列号")
private String tmnKey;
@ApiModelProperty("卡号")
private String simCard;
@ApiModelProperty("定位时间")
private String time;
@ApiModelProperty("经度(WGS84")
private BigDecimal lng;
@ApiModelProperty("纬度(WGS84")
private BigDecimal lat;
@ApiModelProperty("百度经度")
private BigDecimal blng;
@ApiModelProperty("百度纬度")
private BigDecimal blat;
@ApiModelProperty("谷歌/高德经度")
private BigDecimal glng;
@ApiModelProperty("谷歌/高德纬度")
private BigDecimal glat;
@ApiModelProperty("海拔(米)")
private BigDecimal height;
@ApiModelProperty("速度(千米/小时)")
private BigDecimal speed;
@ApiModelProperty("方向 0~360")
private String drct;
@ApiModelProperty("昨日平台总里程(千米)")
private String prevDayTotalMile;
@ApiModelProperty("平台总里程(千米)")
private String mile;
@ApiModelProperty("今日里程(千米)")
private String preMile;
@ApiModelProperty("终端里程(千米)")
private String tmnMile;
@ApiModelProperty("定位信号:0无 弱<=3 中<=6 强>6")
private String satl;
@ApiModelProperty("通讯信号:0无 弱<=10 中<=20 强>20")
private String sgn;
@ApiModelProperty("地理描述")
private String addr;
@ApiModelProperty("车辆定位状态")
private String state;
@ApiModelProperty("车辆状态文字")
private String stateCn;
@ApiModelProperty("驾驶员")
private String drvName;
@ApiModelProperty("驾驶员电话")
private String drvPhone;
@ApiModelProperty("车牌颜色")
private String plateColor;
@ApiModelProperty("车辆类型")
private String carType;
@ApiModelProperty("地图图标")
private String icon;
@ApiModelProperty("地图图标完整链接")
private String iconLink;
@ApiModelProperty("是否上传自定义图片:true取上传图片 false取大图")
private String uploadFlag;
@ApiModelProperty("大图片")
private String bigIcon;
@ApiModelProperty("大图片完整链接")
private String bigIconLink;
@ApiModelProperty("实时照片")
private String photoIcon;
@ApiModelProperty("中文方向")
private String drctCn;
@ApiModelProperty("今日行驶时长(秒)")
private String todayRun;
@ApiModelProperty("行停时长")
private String runStopTime;
@ApiModelProperty("行停时长(秒),排序时使用")
private String runStopTimeSecond;
@ApiModelProperty("ACC时长")
private String accTime;
@ApiModelProperty("ACC总时长")
private String totalAccTime;
@ApiModelProperty("离线时长")
private String offLineTime;
@ApiModelProperty("信号线(返回集合,每记录含name/value)")
private String sgnStts;
@ApiModelProperty("提醒信息(返回集合,每记录含name/value)")
private String reminds;
@ApiModelProperty("油量(返回集合,每记录含name/value)")
private String st1;
@ApiModelProperty("载重(返回集合,每记录含name/value)")
private String st2;
@ApiModelProperty("温度(返回集合,每记录含name/value)")
private String st3;
@ApiModelProperty("湿度(返回集合,每记录含name/value)")
private String st4;
@ApiModelProperty("水位(返回集合,每记录含name/value)")
private String st5;
@ApiModelProperty("服务到期状态:1已到期 0未到期")
private String expState;
@ApiModelProperty("服务期限")
private String expTime;
@ApiModelProperty("油量")
private String oil;
@ApiModelProperty("定位附加项(JSON")
private String protocols;
@ApiModelProperty("扩展字段(JSON")
private String exts;
@ApiModelProperty("模拟量1")
private String moni1;
@ApiModelProperty("模拟量2")
private String moni2;
@ApiModelProperty("模拟量3")
private String moni3;
@ApiModelProperty("模拟量4")
private String moni4;
@ApiModelProperty("视频通道(JSON")
private String videos;
@ApiModelProperty("未处理报警类型名称(逗号分隔)")
private String alarms;
@ApiModelProperty("未处理报警类型ID(逗号分隔)")
private String alarmTypeIds;
@ApiModelProperty("终端型号")
private String tmnType;
@ApiModelProperty("终端到期时间")
private String tmnExpirTime;
@ApiModelProperty("视频设备报警id集合")
private String videoAlarmTypes;
@ApiModelProperty("驾驶员登签姓名(卡号)")
private String driverSign;
@ApiModelProperty("驾驶员登签电话号码")
private String driverSignPhone;
@ApiModelProperty("驾驶员登签时间")
private String driverSignTime;
@ApiModelProperty("驾驶员登签时长")
private String drvSignTimeLong;
@ApiModelProperty("车辆基本状态(16进制位掩码)")
private String carStts;
@ApiModelProperty("报警状态(16进制位掩码)")
private String alarmStts;
@ApiModelProperty("协议版本")
private String prtcVer;
@ApiModelProperty("接入端口")
private String tmnPort;
}
+2 -2
View File
@@ -19,14 +19,14 @@ spring:
# username: nacos
# password: manhuoda@2023
#线上正式环境
server-addr: 10.102.192.31:6848
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.31:6848
server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -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;
}
@@ -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;
}
@@ -334,4 +334,12 @@ public interface ThirdPartyServiceFeign {
@PostMapping("/mdmMasterData/queryMerchant")
R<com.mhd.common.core.domain.thirdparty.MdmMerchantQueryResultDTO> queryMdmMerchant(
@RequestBody com.mhd.common.core.domain.thirdparty.MdmMerchantQueryDTO queryDTO);
/**
* 南岐GPS:根据车牌号查询车辆实时定位
* @param carPlate 车牌号
* @return AjaxResultdata 为车辆定位信息(code=200 成功)
*/
@GetMapping("/nanqiGps/queryByPlate")
AjaxResult nanqiQueryByPlate(@RequestParam("carPlate") String carPlate);
}
+10
View File
@@ -111,6 +111,16 @@
<version>2.24</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
<!-- JPush推送 -->
<!-- jpush极光推送导入start -->
<!-- <dependency>-->
@@ -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<ContractManagePO> list = contractManageDomainService.queryList(contractManageDO);
if (!list.isEmpty()) {
List<Long> contractManageIds = list.stream()
.map(ContractManagePO::getContractManageId)
.collect(Collectors.toList());
List<ContractManageParametersPO> allParams = contractManageParametersDomainService.queryListByManageIds(contractManageIds);
Map<Long, List<ContractManageParametersPO>> 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<SubjectAndPriceReturn> 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<ContractManageParametersPO> 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<ContractManageDetailPO> contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(result.getContractManageId());
result.setContractManageDetailPOList(contractManageDetailPOList);
List<ContractManageParametersPO> 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<SettlementCustomersParametersPO> 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<SettlementCustomersParametersPO> 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<String, Object> contentMap = JSON.parseObject(content, new TypeReference<Map<String, Object>>() {});
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<ContractManage> contractManages = contractManageMapper.selectList(new LambdaQueryWrapper<ContractManage>()
.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<ContractManageParameters>()
.eq(ContractManageParameters::getContractManageId, contractManageId), false);
if (contractManageParameters == null) {
continue;
}
String parametersJson = contractManageParameters.getParametersJson();
Map<String, Object> parametersMap = JSON.parseObject(parametersJson, new TypeReference<Map<String, Object>>() {});
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<com.alibaba.fastjson.JSONObject> getContractNosByCompanyName(String companyName, int pageNum, int pageSize) {
List<com.alibaba.fastjson.JSONObject> 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<com.alibaba.fastjson.JSONObject> 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 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"" +
" xmlns:web=\"http://webservice.legal.ng.kmss.landray.com/\">" +
"<soapenv:Body>" +
"<web:findNgLegal>" +
"<arg0 xmlns=\"\">" +
"<fdPageNo>" + pageNum + "</fdPageNo>" +
"<fdRowSize>" + pageSize + "</fdRowSize>" +
"<fdRelativePerson><![CDATA[" + jsonParam + "]]></fdRelativePerson>" +
"<fdContractNo></fdContractNo>" +
"<fdPersonNo>NA0301</fdPersonNo>" +
"<fdSponsor></fdSponsor>" +
"<docCreateTimeStar></docCreateTimeStar>" +
"<docCreateTimeEnd></docCreateTimeEnd>" +
"</arg0>" +
"</web:findNgLegal>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
}
/**
* 从SOAP响应中提取JSON
*/
private String extractJsonFromResponse(String soapResponse) {
if (soapResponse == null || soapResponse.isEmpty()) {
return null;
}
// 直接查找JSON部分
int jsonStart = soapResponse.indexOf("{\"returnState\":");
int jsonEnd = soapResponse.indexOf("}</return>");
if (jsonStart != -1 && jsonEnd != -1) {
// 找到JSON结束位置
jsonEnd = jsonEnd + 1; // 包含右大括号
String json = soapResponse.substring(jsonStart, jsonEnd);
log.info("直接提取JSON成功");
return json;
}
// 备用方法:查找<return>标签
int start = soapResponse.indexOf("<return>");
int end = soapResponse.indexOf("</return>");
if (start != -1 && end != -1) {
start += "<return>".length();
String json = soapResponse.substring(start, end);
// 解码XML实体
json = json.replace("&lt;", "<")
.replace("&gt;", ">")
.replace("&amp;", "&")
.replace("&quot;", "\"")
.replace("&apos;", "'");
log.info("从<return>标签提取JSON成功");
return json.trim();
}
log.warn("无法从响应中提取JSON");
return null;
}
/**
* 解析JSON获取完整合同列表
*/
private List<com.alibaba.fastjson.JSONObject> parseContractListFromJson(String jsonData) {
List<com.alibaba.fastjson.JSONObject> 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;
}
}
@@ -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<ContractManageParametersPO> 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);
}
}
@@ -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;
}
@@ -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<ContractManageParametersPO> 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;
}
@@ -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;
}
@@ -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<String> entity = new HttpEntity<>(requestBody, headers);
log.info("发送请求到: {}", endpointUrl);
// 发送请求
ResponseEntity<byte[]> 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();
}
}
}
@@ -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);
}
}
@@ -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;
/**
* 调用XXLJOB后台页面接口
* 列表接口返回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<String, Object> 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<JobPageItem> 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;
}
}
@@ -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<ContractManage> 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<ContractManage> queryWrapper = new LambdaQueryWrapper<>();
@@ -228,4 +241,6 @@ public class ContractManageDomainService {
}
return contractManagePO;
}
}
@@ -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;
}
@@ -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<ContractManageParameters>
{
/**
* 分页查询合约信息规则维护表列表
*/
public List<ContractManageParametersPO> 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<ContractManageParametersPO> getListByContractManageId(Long contractManageId);
}
@@ -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<ContractManageParameters>
{
/**
* 查询合约信息规则维护表列表
*/
public List<ContractManageParametersPO> queryList(@Param("contractManageParametersDO") ContractManageParametersDO contractManageParametersDO);
/**
* 根据合同管理id查询合约信息规则维护列表
*/
List<ContractManageParametersPO> getListByContractManageId(@Param("contractManageId") Long contractManageId);
}
@@ -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<ContractManageParametersMapper, ContractManageParameters> implements IContractManageParametersService{
@Autowired
private ContractManageParametersMapper contractManageParametersMapper;
/**
* 查询合约信息规则维护表列表
*/
@Override
public List<ContractManageParametersPO> 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<ContractManageParameters> 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<ContractManageParametersPO> getListByContractManageId(Long contractManageId) {
return contractManageParametersMapper.getListByContractManageId(contractManageId);
}
}
@@ -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;
}
@@ -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;
}
@@ -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<ContractManageParametersPO> 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<ContractManageParametersPO> queryListByManageId(Long contractManageId) {
List<ContractManageParametersPO> resultList = new ArrayList<>();
LambdaQueryWrapper<ContractManageParameters> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ContractManageParameters::getContractManageId,contractManageId);
queryWrapper.eq(ContractManageParameters::getDelFlag,1);
List<ContractManageParameters> 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<ContractManageParametersPO> queryListByManageIds(Collection<Long> contractManageIds) {
List<ContractManageParametersPO> resultList = new ArrayList<>();
if (contractManageIds == null || contractManageIds.isEmpty()) {
return resultList;
}
LambdaQueryWrapper<ContractManageParameters> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ContractManageParameters::getContractManageId, contractManageIds);
queryWrapper.eq(ContractManageParameters::getDelFlag, 1);
List<ContractManageParameters> entityList = contractManageParametersService.list(queryWrapper);
for (ContractManageParameters entity : entityList) {
ContractManageParametersPO po = new ContractManageParametersPO();
BeanUtils.copyProperties(entity, po);
resultList.add(po);
}
return resultList;
}
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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<JSONObject> list = contractManageApplicationService.getContractNosByCompanyName(companyName, pageNum, pageSize);
TableDataInfo tableDataInfo = new TableDataInfo(list, list.size());
tableDataInfo.setCode(200);
tableDataInfo.setMsg("查询成功");
return tableDataInfo;
}
}
@@ -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<ContractManageParametersPO> 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());
}
}
}
@@ -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;
}
}
@@ -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
#线上正式环境
@@ -201,9 +201,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="contractManageDO.topOrganizationId != null">
and a.top_organization_id = #{contractManageDO.topOrganizationId}
</if>
<if test="contractManageDO.contractRentType != null and contractManageDO.contractRentType != ''">
and a.contract_rent_type = #{contractManageDO.contractRentType}
</if>
<if test="contractManageDO.warehouseTempLayerType != null and contractManageDO.warehouseTempLayerType != ''">
and a.warehouse_temp_layer_type = #{contractManageDO.warehouseTempLayerType}
</if>
<if test="contractManageDO.firstSubjectCode != null and contractManageDO.firstSubjectCode != ''">
and b.FIRST_SUBJECT_CODE = #{contractManageDO.firstSubjectCode}
</if>
<if test="contractManageDO.renewalAdvanceDays != null">
and a.renewal_advance_days = #{contractManageDO.renewalAdvanceDays}
</if>
<if test="contractManageDO.subjectMatter != null and contractManageDO.subjectMatter != ''">
and a.subject_matter like concat('%', #{contractManageDO.subjectMatter}, '%')
</if>
<if test="contractManageDO.nature != null and contractManageDO.nature != ''">
and a.nature = #{contractManageDO.nature}
</if>
<if test="contractManageDO.initialStartDate != null">
and a.initial_start_date = #{contractManageDO.initialStartDate}
</if>
</sql>
</mapper>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.basic.domain.contractManageParameters.repository.mapper.ContractManageParametersMapper">
<sql id="selectContractManageParametersPo">
select
*
from contract_manage_parameters
</sql>
<sql id="selectContractManageParametersPo1">
<where>
<if test="contractManageId != null ">
and contract_manage_id = #{contractManageId}
</if>
<if test="topOrganizationId != null ">
and top_organization_id = #{topOrganizationId}
</if>
<if test="organizationId != null ">
and organization_id = #{organizationId}
</if>
<if test="organizationName != null and organizationName != ''">
and organization_name like concat('%', #{organizationName}, '%')
</if>
<if test="contractNumber != null and contractNumber != ''">
and contract_number like concat('%', #{contractNumber}, '%')
</if>
<if test="contractName != null and contractName != ''">
and contract_name like concat('%', #{contractName}, '%')
</if>
</where>
</sql>
<select id="queryList" parameterType="com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO"
resultType="com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO">
<include refid="selectContractManageParametersPo"/>
<include refid="selectContractManageParametersPo1"/>
</select>
<select id="getListByContractManageId"
resultType="com.mhd.basic.domain.contractManageParameters.repository.po.ContractManageParametersPO" parameterType="java.lang.Long">
SELECT
*
FROM
contract_manage_parameters
WHERE
contract_manage_id = #{contractManageId}
</select>
</mapper>
@@ -27,13 +27,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delFlag" column="del_flag" />
<result property="chargeStandard" column="charge_standard" />
<result property="unit" column="unit" />
<result property="monthlyWarehouseRent" column="monthly_warehouse_rent" />
<result property="halfMonthWarehouseRent" column="half_month_warehouse_rent" />
<result property="monthlyWarehouseRentUnit" column="monthly_warehouse_rent_unit" />
<result property="halfMonthWarehouseRentUnit" column="half_month_warehouse_rent_unit" />
</resultMap>
<sql id="selectMaterialClassifyPo">
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
</sql>
+11
View File
@@ -94,6 +94,17 @@
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.1.193</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
<!--添加druid连接池 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
@@ -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<SettlementCustomers>()
.eq(SettlementCustomers::getSettlementEntityId, shipperId)
.eq(SettlementCustomers::getDelFlag, 1));
if (ObjectUtil.isNull(settlementCustomers)) {
//未找到结算对象
return;
}
Long settlementCustomersId = settlementCustomers.getSettlementCustomersId();
SettlementCustomersParameters settlementCustomersParameters = settlementCustomersParametersMapper.selectOne(new LambdaQueryWrapper<SettlementCustomersParameters>()
.eq(SettlementCustomersParameters::getSettlementEntityId, settlementCustomersId)
.eq(SettlementCustomersParameters::getParametersName, "干仓计费配置"));
if (ObjectUtil.isNull(settlementCustomersParameters)) {
//结算对象未配置参数
return;
}
String content = settlementCustomersParameters.getContent();
Map<String, Object> 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<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
.eq(BusinessDocument::getBelongModuleCode, "干仓")
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
.eq(BusinessDocument::getBusinessState, 3)
.eq(BusinessDocument::getDelFlag, 1));
Map<String, List<BusinessDocument>> groupedMap = list.stream()
.collect(Collectors.groupingBy(BusinessDocument::getFirstSubjectCode));
for (Map.Entry<String, List<BusinessDocument>> entry : groupedMap.entrySet()) {
List<BusinessDocument> groupList = entry.getValue();
String firstSubject = entry.getKey();
if ("0D01".equals(firstSubject)) {
//主费用
for (BusinessDocument businessDocument : groupList) {
String businessFlow = businessDocument.getBusinessFlow();
List<BillingStatement> billingStatements = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
.eq(BillingStatement::getBusinessFlow, businessFlow)
.eq(BillingStatement::getBillingState, 1)
.eq(BillingStatement::getDelFlag, 1));
if (billingStatements != null && billingStatements.size() > 0) {
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
List<String> 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<String, Object> 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<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
.in(BillingStatement::getBusinessFlow, businessFlowList)
.eq(BillingStatement::getBillingState, 1)
.eq(BillingStatement::getDelFlag, 1));
if (billingStatementList != null && billingStatementList.size() > 0) {
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
List<String> 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<String, Object> 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<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
.eq(BusinessDocument::getBelongModuleCode, "干仓")
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
.eq(BusinessDocument::getBusinessState, 3)
.eq(BusinessDocument::getDelFlag, 1));
Map<String, List<BusinessDocument>> groupedMap = list.stream()
.collect(Collectors.groupingBy(BusinessDocument::getOriginalBusinessNum));
for (Map.Entry<String, List<BusinessDocument>> entry : groupedMap.entrySet()) {
List<BusinessDocument> groupList = entry.getValue();
String originalBusinessNum = entry.getKey();
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
.in(BillingStatement::getBusinessFlow, businessFlowList)
.eq(BillingStatement::getBillingState, 1)
.eq(BillingStatement::getDelFlag, 1));
if (billingStatementList != null && billingStatementList.size() > 0) {
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
List<String> 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<String, Object> 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<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
.eq(BusinessDocument::getBelongModuleCode, "干仓")
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
.eq(BusinessDocument::getBusinessState, 3)
.eq(BusinessDocument::getDelFlag, 1));
Map<String, List<BusinessDocument>> groupedMap = list.stream()
.collect(Collectors.groupingBy(BusinessDocument::getFirstSubjectCode));
for (Map.Entry<String, List<BusinessDocument>> entry : groupedMap.entrySet()) {
List<BusinessDocument> groupList = entry.getValue();
String firstSubject = entry.getKey();
if ("0D01".equals(firstSubject)) {
//主费用
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
.in(BillingStatement::getBusinessFlow, businessFlowList)
.eq(BillingStatement::getBillingState, 1)
.eq(BillingStatement::getDelFlag, 1));
if (billingStatementList != null && billingStatementList.size() > 0) {
Map<Long, List<BillingStatement>> contractManageIdMap = billingStatementList.stream()
.collect(Collectors.groupingBy(BillingStatement::getContractManageId));
for (Map.Entry<Long, List<BillingStatement>> contractManageIdEntry : contractManageIdMap.entrySet()) {
Long contractManageId = contractManageIdEntry.getKey();
List<BillingStatement> billingContractStatementList = contractManageIdEntry.getValue();
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
List<String> 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<String, Object> 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<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
.in(BillingStatement::getBusinessFlow, businessFlowList)
.eq(BillingStatement::getBillingState, 1)
.eq(BillingStatement::getDelFlag, 1));
if (billingStatementList != null && billingStatementList.size() > 0) {
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
List<String> 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<String, Object> 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<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
.eq(BusinessDocument::getBelongModuleCode, "干仓")
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
.eq(BusinessDocument::getBusinessState, 3)
.eq(BusinessDocument::getDelFlag, 1));
Map<Long, List<BusinessDocument>> groupedMap = list.stream()
.collect(Collectors.groupingBy(BusinessDocument::getContractManageId));
for (Map.Entry<Long, List<BusinessDocument>> entry : groupedMap.entrySet()) {
List<BusinessDocument> groupList = entry.getValue();
Long contractManageId = entry.getKey();
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
.in(BillingStatement::getBusinessFlow, businessFlowList)
.eq(BillingStatement::getBillingState, 1)
.eq(BillingStatement::getDelFlag, 1));
if (billingStatementList != null && billingStatementList.size() > 0) {
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
List<String> 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<String, Object> 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);
}
}
}
}
@@ -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<SettlementCustomersNcConfigDTO> 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<SettlementCustomersParametersDTO> 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<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigs();
if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) {
settlementCustomersNcConfigService.remove(new LambdaQueryWrapper<SettlementCustomersNcConfig>()
.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<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParameters();
if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) {
settlementCustomersParametersService.remove(new LambdaQueryWrapper<SettlementCustomersParameters>()
.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位随机数 000000999999
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());
@@ -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<SettlementCustomersNcConfigPO> 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<String> idSet = Stream.of(settlementCustomersNcConfigDTO.getIds().split(",")).collect(Collectors.toSet());
Long[] ids = idSet.stream().map(Long::valueOf).toArray(Long[]::new);
return settlementCustomersNcConfigDomainService.delete(ids);
}
}
@@ -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<SettlementCustomersParametersPO> 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<String> 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<SettlementCustomersParametersPO> getListBySettlementCustomersId(Long settlementCustomersId) {
return settlementCustomersParametersDomainService.getListBySettlementCustomersId(settlementCustomersId);
}
}
@@ -222,4 +222,7 @@ public class BillingStatement extends BaseVOEntity{
private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码")
private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
}
@@ -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<BillingStatement>
* 根据账单id查询流水明细列表
*/
List<BillingStatementPO> getDetailsByManageId(@Param("billManageId") Long billManageId);
}
/**
* 查询税率
*/
Map<String,Object> getTaxRate(@Param("organizationId") Long organizationId, @Param("subjectCode") String subjectCode, @Param("subjectName") String subjectName);
}
@@ -236,4 +236,6 @@ public class BillingStatementPO extends BaseVOEntity{
private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码")
private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
}
@@ -254,4 +254,6 @@ public class BillingStatementDO extends BaseVOEntity{
private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码")
private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
}
@@ -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()); //收款帐户名称
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -121,7 +121,13 @@ public class BusinessDocumentDomainService {
public Boolean takeEffectByIds(List<Long> businessDocumentIdLongList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
LambdaUpdateWrapper<BusinessDocument> 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<BusinessDocument> updateWrapper = new LambdaUpdateWrapper<>();
@@ -160,7 +166,20 @@ public class BusinessDocumentDomainService {
public Boolean auditByIds(List<Long> businessDocumentIdLongList, BusinessDocumentDTO businessDocumentDTO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
LambdaUpdateWrapper<BusinessDocument> 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<BusinessDocument> updateWrapper = new LambdaUpdateWrapper<>();
@@ -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;
}
@@ -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<SettlementCustomersMapper, SettlementCustomers> implements ISettlementCustomersService{
@Autowired
private SettlementCustomersMapper settlementCustomersMapper;
@Autowired
private SettlementCustomersParametersMapper settlementCustomersParametersMapper;
@Autowired
private SettlementCustomersNcConfigMapper settlementCustomersNcConfigMapper;
/**
* 查询结算对象列表
@@ -30,7 +39,19 @@ public class SettlementCustomersImpl extends ServiceImpl<SettlementCustomersMapp
@Override
public List<SettlementCustomersPO> queryList(SettlementCustomersDO settlementCustomersDO)
{
return settlementCustomersMapper.queryList(settlementCustomersDO);
List<SettlementCustomersPO> settlementCustomersPOS = settlementCustomersMapper.queryList(settlementCustomersDO);
if (settlementCustomersPOS != null && settlementCustomersPOS.size() > 0) {
for (SettlementCustomersPO settlementCustomersPO : settlementCustomersPOS) {
Long settlementCustomersId = settlementCustomersPO.getSettlementCustomersId();
List<SettlementCustomersParameters> settlementCustomersParameters = settlementCustomersParametersMapper.selectList(new LambdaQueryWrapper<SettlementCustomersParameters>()
.eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersId));
List<SettlementCustomersNcConfig> settlementCustomersNcConfigs = settlementCustomersNcConfigMapper.selectList(new LambdaQueryWrapper<SettlementCustomersNcConfig>()
.eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersId));
settlementCustomersPO.setSettlementCustomersParameters(settlementCustomersParameters);
settlementCustomersPO.setSettlementCustomersNcConfigs(settlementCustomersNcConfigs);
}
}
return settlementCustomersPOS;
}
@Override
@@ -88,4 +109,4 @@ public class SettlementCustomersImpl extends ServiceImpl<SettlementCustomersMapp
BeanUtils.copyProperties(settlementCustomers,settlementCustomersPO);
return settlementCustomersPO;
}
}
}
@@ -1,5 +1,7 @@
package com.mhd.bms.domain.settlementCustomers.repository.po;
import com.mhd.bms.domain.settlementCustomersNcConfig.entity.SettlementCustomersNcConfig;
import com.mhd.bms.domain.settlementCustomersParameters.entity.SettlementCustomersParameters;
import com.mhd.common.core.annotation.Excel;
import lombok.Data;
import java.util.Date;
@@ -7,6 +9,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import java.util.List;
import com.mhd.common.core.web.domain.BaseVOEntity;
@@ -126,5 +130,15 @@ public class SettlementCustomersPO extends BaseVOEntity{
@ApiModelProperty("业务单据创建时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date businessCreateTime;
@ApiModelProperty(name = "组织代码")
private String orgCode;
@ApiModelProperty(name = "散租推送计费单据/流水任务id")
private Integer pushBillingRecordJobId;
@ApiModelProperty(name = "整租推送计费单据/流水任务id")
private Integer pushContractManageToBmsJobId;
@ApiModelProperty(name = "生成应收账单任务id")
private Integer pushBillManageJobId;
List<SettlementCustomersNcConfig> settlementCustomersNcConfigs;
List<SettlementCustomersParameters> settlementCustomersParameters;
}
@@ -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<SettlementCustomersParametersDTO> settlementCustomersParameters;
@ApiModelProperty("结算对象nc配置")
private List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigs;
}
@@ -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);
}
}
@@ -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;
/**
* 调用XXLJOB后台页面接口
* 列表接口返回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<String, Object> 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<JobPageItem> 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;
}
}
@@ -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<SettlementCustomersNcConfig> ncConfigWrapper = new LambdaQueryWrapper<>();
ncConfigWrapper.eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersId);
info.setSettlementCustomersNcConfigs(settlementCustomersNcConfigService.list(ncConfigWrapper));
LambdaQueryWrapper<SettlementCustomersParameters> parametersWrapper = new LambdaQueryWrapper<>();
parametersWrapper.eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersId);
info.setSettlementCustomersParameters(settlementCustomersParametersService.list(parametersWrapper));
return info;
}
@@ -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;
}
@@ -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<SettlementCustomersNcConfig> {
/**
* 分页查询结算对象NC配置列表
*/
public List<SettlementCustomersNcConfigPO> 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);
}
@@ -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<SettlementCustomersNcConfig> {
/**
* 查询结算对象NC配置列表
*/
public List<SettlementCustomersNcConfigPO> queryList(@Param("settlementCustomersNcConfigDO") SettlementCustomersNcConfigDO settlementCustomersNcConfigDO);
}
@@ -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<SettlementCustomersNcConfigMapper, SettlementCustomersNcConfig> implements ISettlementCustomersNcConfigService {
@Autowired
private SettlementCustomersNcConfigMapper settlementCustomersNcConfigMapper;
/**
* 查询结算对象NC配置列表
*/
@Override
public List<SettlementCustomersNcConfigPO> 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<SettlementCustomersNcConfig> 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;
}
}
@@ -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;
}
@@ -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;
}
@@ -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<SettlementCustomersNcConfigPO> 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);
}
}
@@ -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;
}
@@ -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<SettlementCustomersParameters> {
/**
* 分页查询结算对象参数列表
*/
public List<SettlementCustomersParametersPO> 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<SettlementCustomersParametersPO> getListBySettlementCustomersId(Long settlementCustomersId);
}
@@ -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<SettlementCustomersParameters> {
/**
* 查询结算对象参数列表
*/
public List<SettlementCustomersParametersPO> queryList(@Param("settlementCustomersParametersDO") SettlementCustomersParametersDO settlementCustomersParametersDO);
}
@@ -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<SettlementCustomersParametersMapper, SettlementCustomersParameters> implements ISettlementCustomersParametersService {
@Autowired
private SettlementCustomersParametersMapper settlementCustomersParametersMapper;
/**
* 查询结算对象参数列表
*/
@Override
public List<SettlementCustomersParametersPO> 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<SettlementCustomersParameters> 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<SettlementCustomersParametersPO> getListBySettlementCustomersId(Long settlementCustomersId) {
List<SettlementCustomersParameters> list = this.list(new LambdaQueryWrapper<SettlementCustomersParameters>()
.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());
}
}
@@ -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;
}
@@ -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;
}
@@ -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<SettlementCustomersParametersPO> 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<SettlementCustomersParametersPO> getListBySettlementCustomersId(Long settlementCustomersId) {
return settlementCustomersParametersService.getListBySettlementCustomersId(settlementCustomersId);
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -264,5 +264,6 @@ public class BillingStatementDTO extends BaseVOEntity{
private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码")
private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
}
@@ -215,4 +215,8 @@ public class BusinessDocumentDTO extends BaseVOEntity{
private String paymentAccountName;
private Long billManageId;
@ApiModelProperty("仓库类型")
private String warehouseType;
@ApiModelProperty("是否推送")
private Integer isPush;
}
@@ -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<SettlementCustomersParametersDTO> settlementCustomersParameters;
@ApiModelProperty("结算对象nc配置")
private List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigs;
}
@@ -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;
}
@@ -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;
}
@@ -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());
}
}
}
@@ -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());
}
}
/**
* 保存业务单据
*/
@@ -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{
}
}
@@ -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<SettlementCustomersNcConfigPO> 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()));
}
}
@@ -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<SettlementCustomersParametersPO> 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));
}
}
@@ -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;
}
}
@@ -271,4 +271,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
</sql>
<select id="getTaxRate" resultType="java.util.Map">
SELECT
RATE as "taxRate"
FROM
EXPENSE_ACCOUNT
WHERE
SUBJECT_CODE = #{subjectCode}
AND SUBJECT_NAME = #{subjectName}
AND DEL_FLAG = 1
AND ORGANIZATION_ID = #{organizationId}
</select>
</mapper>
@@ -43,6 +43,10 @@
<result property="documentType" column="document_type" />
<result property="documentTypeCode" column="document_type_code" />
<result property="businessCreateTime" column="business_create_time" />
<result property="orgCode" column="org_code" />
<result property="pushBillingRecordJobId" column="push_billing_record_job_id" />
<result property="pushContractManageToBmsJobId" column="push_contract_manage_to_bms_job_id" />
<result property="pushBillManageJobId" column="push_bill_manage_job_id" />
</resultMap>
<sql id="business_document_where">
@@ -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

Some files were not shown because too many files have changed in this diff Show More