bms改造;

This commit is contained in:
王奎兴
2026-09-04 11:11:39 +08:00
parent 2c60dc8f84
commit 6108606daa
54 changed files with 1052 additions and 81 deletions
@@ -70,6 +70,6 @@ public interface BmsServiceFeign {
@PostMapping("/businessDocumentApi/wholeRentSynchronizationZXF") @PostMapping("/businessDocumentApi/wholeRentSynchronizationZXF")
public AjaxResult wholeRentSynchronizationZXF(@RequestBody BusinessDataPushDTO businessDataPushDTO); public AjaxResult wholeRentSynchronizationZXF(@RequestBody BusinessDataPushDTO businessDataPushDTO);
@PostMapping("/businessDocumentApi/save") @PostMapping("/businessDocumentApi/feignSave")
public AjaxResult feignSaveBusinessDocument(@RequestBody BusinessDocumentFeign businessDocumentFeign); public AjaxResult feignSaveBusinessDocument(@RequestBody BusinessDocumentFeign businessDocumentFeign);
} }
@@ -194,4 +194,10 @@ public class BusinessDocumentFeign extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("是否推送")
private Integer isPush;
@ApiModelProperty("仓库类型")
private String warehouseType;
} }
+5
View File
@@ -111,6 +111,11 @@
<version>2.24</version> <version>2.24</version>
</dependency> </dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
<!-- JPush推送 --> <!-- JPush推送 -->
<!-- jpush极光推送导入start --> <!-- jpush极光推送导入start -->
<!-- <dependency>--> <!-- <dependency>-->
@@ -18,6 +18,8 @@ import com.mhd.basic.domain.contractManageDetail.repository.po.ContractManageDet
import com.mhd.basic.domain.contractManageDetail.repository.todo.ContractManageDetailDO; import com.mhd.basic.domain.contractManageDetail.repository.todo.ContractManageDetailDO;
import com.mhd.basic.domain.contractManageDetail.service.ContractManageDetailDomainService; import com.mhd.basic.domain.contractManageDetail.service.ContractManageDetailDomainService;
import com.mhd.basic.domain.contractManageParameters.entity.ContractManageParameters; 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.po.ContractManageParametersPO;
import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO; import com.mhd.basic.domain.contractManageParameters.repository.todo.ContractManageParametersDO;
import com.mhd.basic.domain.contractManageParameters.service.ContractManageParametersDomainService; import com.mhd.basic.domain.contractManageParameters.service.ContractManageParametersDomainService;
@@ -38,6 +40,8 @@ import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils; import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.system.api.BmsServiceFeign; import com.mhd.system.api.BmsServiceFeign;
import com.mhd.system.api.SystemServiceFeign; 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.domain.SysDictData;
import com.mhd.system.api.model.LoginUser; import com.mhd.system.api.model.LoginUser;
import com.mhd.system.service.ISysDictTypeService; import com.mhd.system.service.ISysDictTypeService;
@@ -86,6 +90,10 @@ public class ContractManageApplicationService {
@Autowired @Autowired
private ContractManageParametersAssembler contractManageParametersAssembler; private ContractManageParametersAssembler contractManageParametersAssembler;
@Autowired
private ContractManageParametersMapper contractManageParametersMapper;
@Autowired
private IContractManageParametersService contractManageParametersService;
/** /**
@@ -1275,4 +1283,95 @@ public class ContractManageApplicationService {
} }
return exportList; 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;
}
}
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<ContractManage> contractManages = contractManageMapper.selectList(new LambdaQueryWrapper<ContractManage>()
.eq(ContractManage::getContractRentType, "NORMAL")
.eq(ContractManage::getContractState, 2)
.eq(ContractManage::getDelFlag, 1)
.eq(ContractManage::getSettlementCustomersId, settlementCustomers.getSettlementCustomersId()));
if (contractManages == null || contractManages.isEmpty()) {
log.warn("未找到正式合同");
return;
}
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,"","","");
}
}
private void buildBusinessDocument(BigDecimal fee, SettlementCustomersPO settlementCustomers,ContractManage contractManage, String code, String name, String warehouseType) {
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("干仓仓租费用");
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调用异常");
}
}
} }
@@ -23,10 +23,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -244,4 +241,8 @@ public class ContractManageDomainService {
} }
return contractManagePO; return contractManagePO;
} }
public Map<String,Object> getSettlementCustomers(String shipperId) {
}
} }
@@ -413,4 +413,20 @@ public class MaterialBaseInfo extends BaseVOEntity{
@ApiModelProperty(name = "是否正常物料: 0-是 1-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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 = "单位") @Excel(name = "单位")
private String unit; 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 = "单位") @Excel(name = "单位")
private String unit; 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("单位") @ApiModelProperty("单位")
@Excel(name = "单位") @Excel(name = "单位")
private String unit; 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;
} }
@@ -385,4 +385,19 @@ public class MaterialBaseInfoDTO extends BaseVOEntity{
@ApiModelProperty(name = "是否正常物料: 0-是 1-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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("单位") @ApiModelProperty("单位")
@Excel(name = "单位") @Excel(name = "单位")
private String unit; 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;
} }
@@ -9,6 +9,8 @@ import com.mhd.basic.interfaces.dto.contractManage.ContractManageExportVO;
import com.mhd.basic.interfaces.dto.contractManage.SubjectAndPriceDTO; import com.mhd.basic.interfaces.dto.contractManage.SubjectAndPriceDTO;
import com.mhd.basic.interfaces.dto.contractManage.SubjectAndPriceReturn; import com.mhd.basic.interfaces.dto.contractManage.SubjectAndPriceReturn;
import com.mhd.system.api.domain.ContractManageFeignDTO; 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 io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -250,4 +252,23 @@ public class ContractManageApi extends BaseController{
util.exportExcel(response, list, "合同导出"); 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 {
// 设置任务执行结果
XxlJobHelper.handleSuccess("入库业务单推送bms计费流水执行成功");
} catch (Exception e) {
logger.error("XXL-JOB 执行失败", e);
XxlJobHelper.handleFail("入库业务单推送bms计费流水执行失败:" + e.getMessage());
}
}
} }
@@ -27,13 +27,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delFlag" column="del_flag" /> <result property="delFlag" column="del_flag" />
<result property="chargeStandard" column="charge_standard" /> <result property="chargeStandard" column="charge_standard" />
<result property="unit" column="unit" /> <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> </resultMap>
<sql id="selectMaterialClassifyPo"> <sql id="selectMaterialClassifyPo">
select material_classify_id, organization_id, organization_name, top_organization_id, code, name, level, parent_code, 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, 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 from material_classify
</sql> </sql>
+6
View File
@@ -94,6 +94,12 @@
<artifactId>DmJdbcDriver18</artifactId> <artifactId>DmJdbcDriver18</artifactId>
<version>8.1.1.193</version> <version>8.1.1.193</version>
</dependency> </dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
<!--添加druid连接池 依赖 --> <!--添加druid连接池 依赖 -->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
@@ -3,17 +3,27 @@ package com.mhd.bms.application.server.billingStatement;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; 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.application.server.billManage.BillManageApplicationService;
import com.mhd.bms.domain.billManage.repository.po.BillManagePO; import com.mhd.bms.domain.billManage.repository.po.BillManagePO;
import com.mhd.bms.domain.billManage.service.BillManageDomainService; 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.BillingStatementCollectPO;
import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementPO; 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.BillingStatementCollectDO;
import com.mhd.bms.domain.billingStatement.repository.todo.BillingStatementDO; import com.mhd.bms.domain.billingStatement.repository.todo.BillingStatementDO;
import com.mhd.bms.domain.billingStatement.service.BillingStatementDomainService; 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.businessDocument.repository.po.BusinessDocumentPO;
import com.mhd.bms.domain.settlementCustomers.entity.SettlementCustomers; 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.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.ContractManagePO;
import com.mhd.bms.infrastructure.feign.vo.ExpenseAccountPO; import com.mhd.bms.infrastructure.feign.vo.ExpenseAccountPO;
import com.mhd.bms.interfaces.assembler.billingStatement.BillingStatementAssembler; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -64,6 +75,16 @@ public class BillingStatementApplicationService {
private BillManageApplicationService billManageApplicationService; private BillManageApplicationService billManageApplicationService;
@Autowired @Autowired
private BillManageDomainService billManageDomainService; 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,108 @@ public class BillingStatementApplicationService {
} }
return billingStatementDomainService.getBillDetailsList(billingStatementDO); 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));
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) {
List<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
.eq(BusinessDocument::getIsPush, 1)
.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();
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 = "MOP";
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 {
}
}
} }
@@ -151,7 +151,7 @@ public class SettlementCustomersApplicationService {
settlementCustomersDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); settlementCustomersDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
Boolean insert = settlementCustomersDomainService.insert(settlementCustomersDO); Boolean insert = settlementCustomersDomainService.insert(settlementCustomersDO);
if (insert) { if (insert) {
List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigDTOList(); List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigs();
if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) { if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) {
for (SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO : settlementCustomersNcConfigDTOList) { for (SettlementCustomersNcConfigDTO settlementCustomersNcConfigDTO : settlementCustomersNcConfigDTOList) {
SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig(); SettlementCustomersNcConfig settlementCustomersNcConfig = new SettlementCustomersNcConfig();
@@ -163,7 +163,7 @@ public class SettlementCustomersApplicationService {
settlementCustomersNcConfigService.save(settlementCustomersNcConfig); settlementCustomersNcConfigService.save(settlementCustomersNcConfig);
} }
} }
List<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParametersDTOList(); List<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParameters();
if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) { if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) {
for (SettlementCustomersParametersDTO settlementCustomersParametersDTO : settlementCustomersParametersDTOList) { for (SettlementCustomersParametersDTO settlementCustomersParametersDTO : settlementCustomersParametersDTOList) {
SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters(); SettlementCustomersParameters settlementCustomersParameters = new SettlementCustomersParameters();
@@ -260,7 +260,7 @@ public class SettlementCustomersApplicationService {
//处理数据字典 //处理数据字典
handleDict(settlementCustomersDO); handleDict(settlementCustomersDO);
List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigDTOList(); List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList = settlementCustomersDO.getSettlementCustomersNcConfigs();
if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) { if (CollectionUtil.isNotEmpty(settlementCustomersNcConfigDTOList)) {
settlementCustomersNcConfigService.remove(new LambdaQueryWrapper<SettlementCustomersNcConfig>() settlementCustomersNcConfigService.remove(new LambdaQueryWrapper<SettlementCustomersNcConfig>()
.eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersDO.getSettlementCustomersId())); .eq(SettlementCustomersNcConfig::getSettlementCustomersId, settlementCustomersDO.getSettlementCustomersId()));
@@ -274,7 +274,7 @@ public class SettlementCustomersApplicationService {
settlementCustomersNcConfigService.save(settlementCustomersNcConfig); settlementCustomersNcConfigService.save(settlementCustomersNcConfig);
} }
} }
List<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParametersDTOList(); List<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList = settlementCustomersDO.getSettlementCustomersParameters();
if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) { if (CollectionUtil.isNotEmpty(settlementCustomersParametersDTOList)) {
settlementCustomersParametersService.remove(new LambdaQueryWrapper<SettlementCustomersParameters>() settlementCustomersParametersService.remove(new LambdaQueryWrapper<SettlementCustomersParameters>()
.eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersDO.getSettlementCustomersId())); .eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersDO.getSettlementCustomersId()));
@@ -222,4 +222,7 @@ public class BillingStatement extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
} }
@@ -1,6 +1,8 @@
package com.mhd.bms.domain.billingStatement.repository.mapper; package com.mhd.bms.domain.billingStatement.repository.mapper;
import java.util.List; import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.bms.domain.billingStatement.entity.BillingStatement; import com.mhd.bms.domain.billingStatement.entity.BillingStatement;
import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementCollectPO; import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementCollectPO;
@@ -42,4 +44,9 @@ public interface BillingStatementMapper extends BaseMapper<BillingStatement>
* 根据账单id查询流水明细列表 * 根据账单id查询流水明细列表
*/ */
List<BillingStatementPO> getDetailsByManageId(@Param("billManageId") Long billManageId); 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; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
} }
@@ -254,4 +254,6 @@ public class BillingStatementDO extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
} }
@@ -396,7 +396,7 @@ public class BillingStatementDomainService {
public Boolean generateFlow(BusinessDocumentPO businessDocumentPO) { public Boolean generateFlow(BusinessDocumentPO businessDocumentPO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) { if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT); // throw new DigitalLogisticsException(UserError.TIMEOUT);
} }
BillingStatementDO billingStatementDO = new BillingStatementDO(); BillingStatementDO billingStatementDO = new BillingStatementDO();
String[] ignroreFields = new String[]{"billingStatementId","dataSources","createBy","createByName","createTime","updateBy","updateByName","updateTime"}; String[] ignroreFields = new String[]{"billingStatementId","dataSources","createBy","createByName","createTime","updateBy","updateByName","updateTime"};
@@ -414,13 +414,24 @@ public class BillingStatementDomainService {
billingStatementDO.setBillingAmount(businessDocumentPO.getBillAmount()); billingStatementDO.setBillingAmount(businessDocumentPO.getBillAmount());
billingStatementDO.setBillingState(1); billingStatementDO.setBillingState(1);
billingStatementDO.setDataSources(1); billingStatementDO.setDataSources(1);
billingStatementDO.setCreateBy(loginUser.getUserPo().getUserId()); if (loginUser==null) {
billingStatementDO.setCreateByName(loginUser.getUserPo().getUserName()); billingStatementDO.setCreateBy(businessDocumentPO.getCreateBy());
billingStatementDO.setCreateTime(new Date()); billingStatementDO.setCreateByName(businessDocumentPO.getCreateByName());
billingStatementDO.setBillingFlow(businessDocumentPO.getBusinessFlow()); billingStatementDO.setCreateTime(new Date());
billingStatementDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); billingStatementDO.setBillingFlow(businessDocumentPO.getBusinessFlow());
billingStatementDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); billingStatementDO.setTopOrganizationId(businessDocumentPO.getTopOrganizationId());
billingStatementDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); 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.setPaymentAccountId(businessDocumentPO.getPaymentAccountId()); //收款帐户ID
billingStatementDO.setPaymentAccountName(businessDocumentPO.getPaymentAccountName()); //收款帐户名称 billingStatementDO.setPaymentAccountName(businessDocumentPO.getPaymentAccountName()); //收款帐户名称
@@ -194,4 +194,9 @@ public class BusinessDocument extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("是否推送")
private Integer isPush;
@ApiModelProperty("仓库类型")
private String warehouseType;
} }
@@ -198,4 +198,9 @@ public class BusinessDocumentPO extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("是否推送")
private Integer isPush;
@ApiModelProperty("仓库类型")
private String warehouseType;
} }
@@ -218,6 +218,9 @@ public class BusinessDocumentDO extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
private Long billManageId; private Long billManageId;
@ApiModelProperty("是否推送")
private Integer isPush;
@ApiModelProperty("仓库类型")
private String warehouseType;
} }
@@ -121,7 +121,13 @@ public class BusinessDocumentDomainService {
public Boolean takeEffectByIds(List<Long> businessDocumentIdLongList) { public Boolean takeEffectByIds(List<Long> businessDocumentIdLongList) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) { 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){ if(businessDocumentIdLongList != null && businessDocumentIdLongList.size() > 0){
LambdaUpdateWrapper<BusinessDocument> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<BusinessDocument> updateWrapper = new LambdaUpdateWrapper<>();
@@ -160,7 +166,20 @@ public class BusinessDocumentDomainService {
public Boolean auditByIds(List<Long> businessDocumentIdLongList, BusinessDocumentDTO businessDocumentDTO) { public Boolean auditByIds(List<Long> businessDocumentIdLongList, BusinessDocumentDTO businessDocumentDTO) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) { 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){ if(businessDocumentIdLongList != null && businessDocumentIdLongList.size() > 0){
LambdaUpdateWrapper<BusinessDocument> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<BusinessDocument> updateWrapper = new LambdaUpdateWrapper<>();
@@ -136,9 +136,9 @@ public class SettlementCustomersDO extends BaseVOEntity{
@ApiModelProperty(name = "组织代码") @ApiModelProperty(name = "组织代码")
private String orgCode; private String orgCode;
@ApiModelProperty("结算对象参数") @ApiModelProperty("结算对象参数")
private List<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList; private List<SettlementCustomersParametersDTO> settlementCustomersParameters;
@ApiModelProperty("结算对象nc配置") @ApiModelProperty("结算对象nc配置")
private List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList; private List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigs;
} }
@@ -264,5 +264,6 @@ public class BillingStatementDTO extends BaseVOEntity{
private BigDecimal billingUnitPrice; private BigDecimal billingUnitPrice;
@ApiModelProperty("nc科目编码") @ApiModelProperty("nc科目编码")
private String ncSubjectCode; private String ncSubjectCode;
@ApiModelProperty("仓储单号")
private String wmsNumber;
} }
@@ -215,4 +215,8 @@ public class BusinessDocumentDTO extends BaseVOEntity{
private String paymentAccountName; private String paymentAccountName;
private Long billManageId; private Long billManageId;
@ApiModelProperty("仓库类型")
private String warehouseType;
@ApiModelProperty("是否推送")
private Integer isPush;
} }
@@ -137,7 +137,7 @@ public class SettlementCustomersDTO extends BaseVOEntity{
private String orgCode; private String orgCode;
@ApiModelProperty("结算对象参数") @ApiModelProperty("结算对象参数")
private List<SettlementCustomersParametersDTO> settlementCustomersParametersDTOList; private List<SettlementCustomersParametersDTO> settlementCustomersParameters;
@ApiModelProperty("结算对象nc配置") @ApiModelProperty("结算对象nc配置")
private List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigDTOList; private List<SettlementCustomersNcConfigDTO> settlementCustomersNcConfigs;
} }
@@ -21,6 +21,8 @@ import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.StringUtils;
import com.mhd.common.redis.enums.RedisLockTypeEnum; import com.mhd.common.redis.enums.RedisLockTypeEnum;
import com.mhd.common.redis.service.RedisLock; 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 lombok.extern.slf4j.Slf4j;
import org.redisson.RedissonMultiLock; import org.redisson.RedissonMultiLock;
import org.redisson.api.RLock; import org.redisson.api.RLock;
@@ -327,4 +329,23 @@ public class BillingStatementApi extends BaseController {
return getDataTable(list); 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; package com.mhd.bms.interfaces.facadeApi;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.mhd.bms.application.server.businessDocument.BusinessDocumentApplicationService; 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.domain.dto.BusinessDataPushDTO;
import com.mhd.common.core.utils.IgnoreNullUtil; import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.system.api.domain.BusinessDocumentFeign;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +46,9 @@ public class BusinessDocumentApi extends BaseController{
@Resource @Resource
private BusinessDocumentAssembler businessDocumentAssembler; 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());
}
}
/** /**
* 保存业务单据 * 保存业务单据
*/ */
@@ -271,4 +271,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if> </if>
</sql> </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> </mapper>
@@ -23,6 +23,8 @@ import com.mhd.wms.domain.handoverTaskOrder.repository.facade.IHandoverTaskOrder
import com.mhd.wms.domain.handoverTaskOrder.repository.po.HandoverTaskOrderPO; import com.mhd.wms.domain.handoverTaskOrder.repository.po.HandoverTaskOrderPO;
import com.mhd.wms.domain.handoverTaskOrder.repository.todo.HandoverTaskOrderDO; import com.mhd.wms.domain.handoverTaskOrder.repository.todo.HandoverTaskOrderDO;
import com.mhd.wms.domain.handoverTaskOrder.service.HandoverTaskOrderDomainService; import com.mhd.wms.domain.handoverTaskOrder.service.HandoverTaskOrderDomainService;
import com.mhd.wms.application.service.materialInventory.MaterialInventoryApplicationService;
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryParamDO;
import com.mhd.wms.domain.shiftManage.repository.todo.ShiftManageDO; import com.mhd.wms.domain.shiftManage.repository.todo.ShiftManageDO;
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder; import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService; import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
@@ -33,6 +35,7 @@ import org.springframework.stereotype.Service;
import java.text.ParseException; import java.text.ParseException;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -58,6 +61,9 @@ public class HandoverTaskOrderApplicationService {
@Autowired @Autowired
private IStockOutOrderService stockOutOrderService; private IStockOutOrderService stockOutOrderService;
@Autowired
private MaterialInventoryApplicationService materialInventoryApplicationService;
/** /**
* 分页查询交接作业单列表 * 分页查询交接作业单列表
@@ -200,7 +206,12 @@ public class HandoverTaskOrderApplicationService {
* @return Boolean * @return Boolean
*/ */
public Boolean completeHandover(HandoverTaskOrderDO handoverTaskOrderDO){ public Boolean completeHandover(HandoverTaskOrderDO handoverTaskOrderDO){
return handoverTaskOrderDomainService.completeHandover(handoverTaskOrderDO); Boolean result = handoverTaskOrderDomainService.completeHandover(handoverTaskOrderDO);
List<MaterialInventoryParamDO> clearoutParamDOs = handoverTaskOrderDomainService.getLastClearoutParamDOs();
for (MaterialInventoryParamDO paramDO : clearoutParamDOs) {
materialInventoryApplicationService.pushBillingRecordClearout(paramDO.getMaterialInventoryId(), paramDO.getQuantity());
}
return result;
} }
@@ -297,6 +308,10 @@ public class HandoverTaskOrderApplicationService {
completeDO.setHandoverTaskOrderIds(handoverTaskOrderIds.stream().map(String::valueOf).collect(Collectors.toList())); completeDO.setHandoverTaskOrderIds(handoverTaskOrderIds.stream().map(String::valueOf).collect(Collectors.toList()));
completeDO.setBillingJson(handoverTaskOrderDO.getBillingJson()); completeDO.setBillingJson(handoverTaskOrderDO.getBillingJson());
handoverTaskOrderDomainService.completeHandover(completeDO); handoverTaskOrderDomainService.completeHandover(completeDO);
List<MaterialInventoryParamDO> clearoutParamDOs = handoverTaskOrderDomainService.getLastClearoutParamDOs();
for (MaterialInventoryParamDO paramDO : clearoutParamDOs) {
materialInventoryApplicationService.pushBillingRecordClearout(paramDO.getMaterialInventoryId(), paramDO.getQuantity());
}
} }
} }
} }
@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.core.utils.bean.BeanUtils; import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.StringUtils;
import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.core.web.domain.AjaxResult;
@@ -18,6 +19,7 @@ import com.mhd.system.api.domain.cache.SystemServiceCacheUtil;
import com.mhd.system.api.model.LoginUser; import com.mhd.system.api.model.LoginUser;
import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo; import com.mhd.wms.domain.materialBaseInfo.entity.MaterialBaseInfo;
import com.mhd.wms.domain.materialBaseInfo.repository.mapper.MaterialBaseInfoMapper; import com.mhd.wms.domain.materialBaseInfo.repository.mapper.MaterialBaseInfoMapper;
import com.mhd.wms.domain.materialInventory.entity.MaterialInventory;
import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper; import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper;
import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO; import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO;
import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryQueryListPO; import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryQueryListPO;
@@ -33,6 +35,7 @@ import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailM
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService; import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
import com.mhd.wms.domain.stockOutOrder.repository.po.StockOutOrderPO; import com.mhd.wms.domain.stockOutOrder.repository.po.StockOutOrderPO;
import com.mhd.wms.util.BatchNoTokenUtil; import com.mhd.wms.util.BatchNoTokenUtil;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -43,6 +46,7 @@ import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -886,16 +890,36 @@ public class MaterialInventoryApplicationService {
} }
} }
public void pushBillingRecord(String shipperId) { //推送清仓计费记录
//非首次推送 public void pushBillingRecordClearout(Long materialInventoryId,BigDecimal quantity) {
List<MaterialInventoryPO> materialInventoryPOS = materialInventoryDomainService.queryPushBms(shipperId);
if (materialInventoryPOS==null || materialInventoryPOS.size()==0) return; MaterialInventory materialInventory = materialInventoryMapper.selectById(materialInventoryId);
for (MaterialInventoryPO materialInventoryPO : materialInventoryPOS) { MaterialInventoryPO materialInventoryPO = new MaterialInventoryPO();
Date createTime = materialInventoryPO.getCreateTime(); BeanUtils.copyProperties(materialInventory, materialInventoryPO);
Long materialBaseInfoId = materialInventoryPO.getMaterialBaseInfoId(); //未查询到库存记录
String lotNumber = materialInventoryPO.getLotNumber(); Long shipperId = materialInventoryPO.getShipperId();
String inOrderNumber = materialInventoryPO.getInOrderNumber(); Date createTime = materialInventoryPO.getCreateTime();
Long materialBaseInfoId = materialInventoryPO.getMaterialBaseInfoId();
String lotNumber = materialInventoryPO.getLotNumber();
String inOrderNumber = materialInventoryPO.getInOrderNumber();
Long warehouseId = materialInventoryPO.getWarehouseId();
Date lastBillingTime = materialInventoryPO.getLastBillingTime();
if (warehouseId==19) {//干仓计费
Map<String,Object> shipperParameters = materialInventoryDomainService.queryShipperParameters(shipperId,"干仓计费配置");
//客户未配置干仓计费配置
if (shipperParameters == null || shipperParameters.size()==0) return;
Long contractManageId = (Long) shipperParameters.get("contractManageId");
Long settlementCustomersId = (Long) shipperParameters.get("settlementCustomersId");
String contractNumber = (String) shipperParameters.get("contractNumber");
String content = (String) shipperParameters.get("content");
Map<String, Object> contentMap = content != null ? JSON.parseObject(content, Map.class) : new HashMap<>();
Integer sfzdcz = (Integer) contentMap.get("sfzdcz");
//客户未配置或是否自动推送设置为否
if (sfzdcz==null) return;
if (sfzdcz!=1) return;
//计算费用
List<Map<String, Object>> monthFee = materialInventoryDomainService.getMonthFee(inOrderNumber, materialBaseInfoId,lotNumber); List<Map<String, Object>> monthFee = materialInventoryDomainService.getMonthFee(inOrderNumber, materialBaseInfoId,lotNumber);
//入库业务单未设置每月仓租
if (monthFee == null || monthFee.size()==0) return; if (monthFee == null || monthFee.size()==0) return;
Map<String, Object> feeMap = monthFee.get(0); Map<String, Object> feeMap = monthFee.get(0);
//半月仓租 //半月仓租
@@ -912,7 +936,7 @@ public class MaterialInventoryApplicationService {
if (isYesterday) { if (isYesterday) {
//首次计费 需要夫力费 //首次计费 需要夫力费
//库存数量 //库存数量
BigDecimal inventoryQuantity = materialInventoryPO.getInventoryQuantity(); BigDecimal inventoryQuantity = quantity;
//仓租 //仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(monthlyWarehouseFee); BigDecimal totalWarehouseRent = inventoryQuantity.multiply(monthlyWarehouseFee);
//夫力费 //夫力费
@@ -921,7 +945,9 @@ public class MaterialInventoryApplicationService {
BigDecimal unitPrice = materialBaseInfo.getUnitPrice(); BigDecimal unitPrice = materialBaseInfo.getUnitPrice();
//火险保费 //火险保费
BigDecimal fireInsureFee = unitPrice.multiply(inventoryQuantity).multiply(new BigDecimal("0.0003")); BigDecimal fireInsureFee = unitPrice.multiply(inventoryQuantity).multiply(new BigDecimal("0.0003"));
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","干仓仓租费用",contractManageId,"干仓");
buildBusinessDocument(manpowerFee, materialInventoryPO,"0D082","夫力费",contractManageId,"干仓");
buildBusinessDocument(fireInsureFee, materialInventoryPO,"0D083","火险保费",contractManageId,"干仓");
} else { } else {
//期间付费 不需要夫力费 //期间付费 不需要夫力费
@@ -933,13 +959,188 @@ public class MaterialInventoryApplicationService {
BigDecimal unitPrice = materialBaseInfo.getUnitPrice(); BigDecimal unitPrice = materialBaseInfo.getUnitPrice();
//火险保费 //火险保费
BigDecimal fireInsureFee = unitPrice.multiply(inventoryQuantity).multiply(new BigDecimal("0.0003")); BigDecimal fireInsureFee = unitPrice.multiply(inventoryQuantity).multiply(new BigDecimal("0.0003"));
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","干仓仓租费用",contractManageId,"冻仓");
buildBusinessDocument(fireInsureFee, materialInventoryPO,"0D083","火险保费",contractManageId,"冻仓");
}
} else if (warehouseId==20) {//冻仓计费
Map<String,Object> shipperParameters = materialInventoryDomainService.queryShipperParameters(Long.valueOf(shipperId),"冻仓计费配置");
if (shipperParameters == null || shipperParameters.size()==0) return;
Long contractManageId = (Long) shipperParameters.get("contractManageId");
Long settlementCustomersId = (Long) shipperParameters.get("settlementCustomersId");
String contractNumber = (String) shipperParameters.get("contractNumber");
String content = (String) shipperParameters.get("content");
Map<String, Object> contentMap = content != null ? JSON.parseObject(content, Map.class) : new HashMap<>();
Integer sfzdcz = (Integer) contentMap.get("sfzdcz");
//客户未配置或是否自动推送设置为否
if (sfzdcz==null) return;
if (sfzdcz!=1) return;
//计算费用
MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(materialBaseInfoId);
BigDecimal unitPrice = materialBaseInfo.getUnitPrice();
String materialClassifyId = materialBaseInfo.getMaterialClassifyId();
BigDecimal weightLimit = materialBaseInfo.getWeightLimit();
Map<String,Object> materialClassify = materialInventoryDomainService.queryMaterialClassify(Long.valueOf(materialClassifyId));
//物料分类不存在
if (materialClassify == null || materialClassify.size()==0) return;
BigDecimal monthlyWarehouseRent = (BigDecimal) materialClassify.get("monthlyWarehouseRent");
BigDecimal halfMonthWarehouseRent = (BigDecimal) materialClassify.get("halfMonthWarehouseRent");
String monthlyWarehouseRentUnit = (String) materialClassify.get("monthlyWarehouseRentUnit");
String halfMonthWarehouseRentUnit = (String) materialClassify.get("halfMonthWarehouseRentUnit");
//半月仓租
BigDecimal halfMonthWhFee = halfMonthWarehouseRent;
//整月仓租
BigDecimal monthlyWarehouseFee = monthlyWarehouseRent;
long daysDiff = 0;
if (lastBillingTime != null) {
LocalDate lastBillingDate = lastBillingTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
daysDiff = ChronoUnit.DAYS.between(lastBillingDate, LocalDate.now());
} else {
daysDiff = -1;
}
BigDecimal inventoryQuantity = quantity;
if (daysDiff < 15) {
// 不足半月: 收半月仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(halfMonthWhFee).multiply(weightLimit);
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","冻仓仓租费用",contractManageId,"冻仓");
} else {
// 大于等于半月: 收整月仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(monthlyWarehouseFee).multiply(weightLimit);
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","冻仓仓租费用",contractManageId,"冻仓");
}
//更新最后计费时间
Long id = materialInventoryPO.getMaterialInventoryId();
MaterialInventory Inventory = materialInventoryMapper.selectById(id);
Inventory.setLastBillingTime(new Date());
materialInventoryMapper.updateById(Inventory);
}
}
public void pushBillingRecord(String shipperId) {
List<MaterialInventoryPO> materialInventoryPOS = materialInventoryDomainService.queryPushBms(shipperId);
//未查询到库存记录
if (materialInventoryPOS==null || materialInventoryPOS.size()==0) return;
for (MaterialInventoryPO materialInventoryPO : materialInventoryPOS) {
Date createTime = materialInventoryPO.getCreateTime();
Long materialBaseInfoId = materialInventoryPO.getMaterialBaseInfoId();
String lotNumber = materialInventoryPO.getLotNumber();
String inOrderNumber = materialInventoryPO.getInOrderNumber();
Long warehouseId = materialInventoryPO.getWarehouseId();
Date lastBillingTime = materialInventoryPO.getLastBillingTime();
if (warehouseId==19) {//干仓计费
Map<String,Object> shipperParameters = materialInventoryDomainService.queryShipperParameters(Long.valueOf(shipperId),"干仓计费配置");
//客户未配置干仓计费配置
if (shipperParameters == null || shipperParameters.size()==0) continue;
Long contractManageId = (Long) shipperParameters.get("contractManageId");
Long settlementCustomersId = (Long) shipperParameters.get("settlementCustomersId");
String contractNumber = (String) shipperParameters.get("contractNumber");
String content = (String) shipperParameters.get("content");
Map<String, Object> contentMap = content != null ? JSON.parseObject(content, Map.class) : new HashMap<>();
Integer sfzdcz = (Integer) contentMap.get("sfzdcz");
//客户未配置或是否自动推送设置为否
if (sfzdcz==null) continue;
if (sfzdcz!=1) continue;
//计算费用
List<Map<String, Object>> monthFee = materialInventoryDomainService.getMonthFee(inOrderNumber, materialBaseInfoId,lotNumber);
//入库业务单未设置每月仓租
if (monthFee == null || monthFee.size()==0) continue;
Map<String, Object> feeMap = monthFee.get(0);
//半月仓租
BigDecimal halfMonthWhFee = (BigDecimal) feeMap.get("halfMonthWhFee");
//整月仓租
BigDecimal monthlyWarehouseFee = (BigDecimal) feeMap.get("monthlyWarehouseFee");
// 判断是否为昨天
boolean isYesterday = false;
if (createTime != null) {
LocalDate yesterday = LocalDate.now().minusDays(1);
LocalDate createDate = createTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
isYesterday = yesterday.isEqual(createDate);
}
if (isYesterday) {
//首次计费 需要夫力费
//库存数量
BigDecimal inventoryQuantity = materialInventoryPO.getInventoryQuantity();
//仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(monthlyWarehouseFee);
//夫力费
BigDecimal manpowerFee = totalWarehouseRent.multiply(new BigDecimal("0.2"));
MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(materialBaseInfoId);
BigDecimal unitPrice = materialBaseInfo.getUnitPrice();
//火险保费
BigDecimal fireInsureFee = unitPrice.multiply(inventoryQuantity).multiply(new BigDecimal("0.0003"));
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","干仓仓租费用",contractManageId,"干仓");
buildBusinessDocument(manpowerFee, materialInventoryPO,"0D082","夫力费",contractManageId,"干仓");
buildBusinessDocument(fireInsureFee, materialInventoryPO,"0D083","火险保费",contractManageId,"干仓");
} else {
//期间付费 不需要夫力费
//库存数量
BigDecimal inventoryQuantity = materialInventoryPO.getInventoryQuantity();
//仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(monthlyWarehouseFee);
MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(materialBaseInfoId);
BigDecimal unitPrice = materialBaseInfo.getUnitPrice();
//火险保费
BigDecimal fireInsureFee = unitPrice.multiply(inventoryQuantity).multiply(new BigDecimal("0.0003"));
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","干仓仓租费用",contractManageId,"干仓");
buildBusinessDocument(fireInsureFee, materialInventoryPO,"0D083","火险保费",contractManageId,"干仓");
}
} else if (warehouseId==20) {//冻仓计费
Map<String,Object> shipperParameters = materialInventoryDomainService.queryShipperParameters(Long.valueOf(shipperId),"冻仓计费配置");
if (shipperParameters == null || shipperParameters.size()==0) continue;
Long contractManageId = (Long) shipperParameters.get("contractManageId");
Long settlementCustomersId = (Long) shipperParameters.get("settlementCustomersId");
String contractNumber = (String) shipperParameters.get("contractNumber");
String content = (String) shipperParameters.get("content");
Map<String, Object> contentMap = content != null ? JSON.parseObject(content, Map.class) : new HashMap<>();
Integer sfzdcz = (Integer) contentMap.get("sfzdcz");
//客户未配置或是否自动推送设置为否
if (sfzdcz==null) continue;
if (sfzdcz!=1) continue;
//计算费用
MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(materialBaseInfoId);
BigDecimal unitPrice = materialBaseInfo.getUnitPrice();
String materialClassifyId = materialBaseInfo.getMaterialClassifyId();
BigDecimal weightLimit = materialBaseInfo.getWeightLimit();
Map<String,Object> materialClassify = materialInventoryDomainService.queryMaterialClassify(Long.valueOf(materialClassifyId));
//物料分类不存在
if (materialClassify == null || materialClassify.size()==0) continue;
BigDecimal monthlyWarehouseRent = (BigDecimal) materialClassify.get("monthlyWarehouseRent");
BigDecimal halfMonthWarehouseRent = (BigDecimal) materialClassify.get("halfMonthWarehouseRent");
String monthlyWarehouseRentUnit = (String) materialClassify.get("monthlyWarehouseRentUnit");
String halfMonthWarehouseRentUnit = (String) materialClassify.get("halfMonthWarehouseRentUnit");
//半月仓租
BigDecimal halfMonthWhFee = halfMonthWarehouseRent;
//整月仓租
BigDecimal monthlyWarehouseFee = monthlyWarehouseRent;
long daysDiff = 0;
if (lastBillingTime != null) {
LocalDate lastBillingDate = lastBillingTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
daysDiff = ChronoUnit.DAYS.between(lastBillingDate, LocalDate.now());
} else {
daysDiff = -1;
}
BigDecimal inventoryQuantity = materialInventoryPO.getInventoryQuantity();
if (daysDiff < 15) {
// 不足半月: 收半月仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(halfMonthWhFee).multiply(weightLimit);
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","冻仓仓租费用",contractManageId,"冻仓");
} else {
// 大于等于半月: 收整月仓租
BigDecimal totalWarehouseRent = inventoryQuantity.multiply(monthlyWarehouseFee).multiply(weightLimit);
buildBusinessDocument(totalWarehouseRent, materialInventoryPO,"0D081","冻仓仓租费用",contractManageId,"冻仓");
}
//更新最后计费时间
Long materialInventoryId = materialInventoryPO.getMaterialInventoryId();
MaterialInventory materialInventory = materialInventoryMapper.selectById(materialInventoryId);
materialInventory.setLastBillingTime(new Date());
materialInventoryMapper.updateById(materialInventory);
} }
} }
} }
private void buildBusinessDocument(BigDecimal fee, MaterialInventoryPO materialInventoryPO) { private void buildBusinessDocument(BigDecimal fee, MaterialInventoryPO materialInventoryPO,String code,String name,Long contractManageId,String warehouseType) {
Long shipperId = materialInventoryPO.getShipperId(); Long shipperId = materialInventoryPO.getShipperId();
Map<String, Object> shipper = materialInventoryMapper.querySetlleByShipperId(shipperId); Map<String, Object> shipper = materialInventoryMapper.querySetlleByShipperId(shipperId);
if (shipper == null) { if (shipper == null) {
@@ -960,23 +1161,27 @@ public class MaterialInventoryApplicationService {
businessDocumentFeign.setSettlementEntity(settlementEntity); businessDocumentFeign.setSettlementEntity(settlementEntity);
businessDocumentFeign.setSettlementCustomersId(settlementCustomersId); businessDocumentFeign.setSettlementCustomersId(settlementCustomersId);
businessDocumentFeign.setSettlementCustomersCode(settlementCustomersCode); businessDocumentFeign.setSettlementCustomersCode(settlementCustomersCode);
businessDocumentFeign.setDocumentTypeId(5l); businessDocumentFeign.setDocumentTypeId(4l);
businessDocumentFeign.setDocumentTypeCode("CM_SZ"); businessDocumentFeign.setDocumentTypeCode("CM_ZL");
businessDocumentFeign.setDocumentType("码散租"); businessDocumentFeign.setDocumentType("库租赁单");
businessDocumentFeign.setFirstSubjectCode("0D81"); businessDocumentFeign.setFirstSubjectCode(code);
businessDocumentFeign.setFirstSubjectName("仓租费"); businessDocumentFeign.setFirstSubjectName(name);
businessDocumentFeign.setBillingTime(new Date()); businessDocumentFeign.setBillingTime(new Date());
businessDocumentFeign.setServiceItemsCode("CMCZ"); businessDocumentFeign.setServiceItemsCode("GC_CZ");
businessDocumentFeign.setServiceItemsName("干仓仓租"); businessDocumentFeign.setServiceItemsName("干仓仓租费用");
businessDocumentFeign.setSettlementWay(1); businessDocumentFeign.setSettlementWay(1);
Map<String, Object> contract = materialInventoryDomainService.queryContract(materialInventoryPO.getShipperId()); businessDocumentFeign.setOriginalBusinessNum(materialInventoryPO.getInOrderNumber());
businessDocumentFeign.setWarehouseType(warehouseType);
businessDocumentFeign.setOriginalBusinessNum(materialInventoryPO.getInOrderNumber());
Map<String, Object> contract = materialInventoryDomainService.queryContract(contractManageId);
if (contract == null) {return;} if (contract == null) {return;}
String contractName = (String) contract.get("contractName"); String contractName = (String) contract.get("contractName");
String contractNumber = (String) contract.get("contractNumber"); String contractNumber = (String) contract.get("contractNumber");
Long contractManageId = (Long) contract.get("contractManageId");
businessDocumentFeign.setContractName(contractName); businessDocumentFeign.setContractName(contractName);
businessDocumentFeign.setContractNumber(contractNumber); businessDocumentFeign.setContractNumber(contractNumber);
businessDocumentFeign.setContractManageId(contractManageId); businessDocumentFeign.setContractManageId(contractManageId);
businessDocumentFeign.setBusinessFlow(OrderSequence.getOrderCode("LS"));
businessDocumentFeign.setIsPush(1);
AjaxResult ajaxResult = bmsServiceFeign.feignSaveBusinessDocument(businessDocumentFeign); AjaxResult ajaxResult = bmsServiceFeign.feignSaveBusinessDocument(businessDocumentFeign);
if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) { if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
log.error("保存业务单据失败: {}", ajaxResult != null ? ajaxResult.get("msg") : "feign调用异常"); log.error("保存业务单据失败: {}", ajaxResult != null ? ajaxResult.get("msg") : "feign调用异常");
@@ -351,7 +351,7 @@ public class HandoverTaskOrderDomainService {
} }
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
//修改库存 //修改库存
xgkc(handoverTaskOrderIds,loginUser); List<MaterialInventoryParamDO> clearoutParamDOs = xgkc(handoverTaskOrderIds,loginUser);
//推送oms需报关的单子等海关确认放行后再推 //推送oms需报关的单子等海关确认放行后再推
for (Long handoverTaskOrderId : handoverTaskOrderIds) { for (Long handoverTaskOrderId : handoverTaskOrderIds) {
// HandoverTaskOrder hto = handoverTaskOrderService.getById(handoverTaskOrderId); // HandoverTaskOrder hto = handoverTaskOrderService.getById(handoverTaskOrderId);
@@ -371,6 +371,7 @@ public class HandoverTaskOrderDomainService {
} }
HandoverTaskOrder handoverTaskOrder = handoverTaskOrderService.getById(handoverTaskOrderIds.get(0)); HandoverTaskOrder handoverTaskOrder = handoverTaskOrderService.getById(handoverTaskOrderIds.get(0));
stockOutOrderService.update(null,new UpdateWrapper<StockOutOrder>().lambda().set(StockOutOrder::getBillingJson,handoverTaskOrderDO.getBillingJson()).eq(StockOutOrder::getOutOrderNumber,handoverTaskOrder.getOrderNumber())); stockOutOrderService.update(null,new UpdateWrapper<StockOutOrder>().lambda().set(StockOutOrder::getBillingJson,handoverTaskOrderDO.getBillingJson()).eq(StockOutOrder::getOutOrderNumber,handoverTaskOrder.getOrderNumber()));
this.lastClearoutParamDOs = clearoutParamDOs;
return handoverTaskOrderService.update(null, new UpdateWrapper<HandoverTaskOrder>().lambda() return handoverTaskOrderService.update(null, new UpdateWrapper<HandoverTaskOrder>().lambda()
.set(HandoverTaskOrder::getStatus, 2) .set(HandoverTaskOrder::getStatus, 2)
.set(HandoverTaskOrder::getUpdateBy, loginUser.getUserid()) .set(HandoverTaskOrder::getUpdateBy, loginUser.getUserid())
@@ -398,11 +399,18 @@ public class HandoverTaskOrderDomainService {
@Autowired @Autowired
private ICopyCodeReferenceService copyCodeReferenceService; private ICopyCodeReferenceService copyCodeReferenceService;
public synchronized void xgkc(List<Long> handoverTaskOrderIds,LoginUser loginUser) { private List<MaterialInventoryParamDO> lastClearoutParamDOs = new ArrayList<>();
public List<MaterialInventoryParamDO> getLastClearoutParamDOs() {
return lastClearoutParamDOs;
}
public synchronized List<MaterialInventoryParamDO> xgkc(List<Long> handoverTaskOrderIds,LoginUser loginUser) {
List<MaterialInventoryParamDO> allClearoutParamDOs = new ArrayList<>();
for (Long handoverTaskOrderId : handoverTaskOrderIds) { for (Long handoverTaskOrderId : handoverTaskOrderIds) {
HandoverTaskOrder handoverTaskOrder = handoverTaskOrderService.getById(handoverTaskOrderId); HandoverTaskOrder handoverTaskOrder = handoverTaskOrderService.getById(handoverTaskOrderId);
if (handoverTaskOrder == null) { if (handoverTaskOrder == null) {
return; continue;
} }
//交接完成节点修改库存 //交接完成节点修改库存
String orderNumber = handoverTaskOrder.getOrderNumber(); String orderNumber = handoverTaskOrder.getOrderNumber();
@@ -422,15 +430,17 @@ public class HandoverTaskOrderDomainService {
//完成交接状态改为已出库 //完成交接状态改为已出库
stockOutOrder.setStatus(9); stockOutOrder.setStatus(9);
stockOutOrderMapper.updateById(stockOutOrder); stockOutOrderMapper.updateById(stockOutOrder);
doStockOutDeduct(orderNumber, stockOutOrder, loginUser); allClearoutParamDOs.addAll(doStockOutDeduct(orderNumber, stockOutOrder, loginUser));
} }
return allClearoutParamDOs;
} }
/** /**
* 出库扣减同步OMS明细 + 联单状态 + 扣实物库存 + 推OMS库存 * 出库扣减同步OMS明细 + 联单状态 + 扣实物库存 + 推OMS库存
* xgkc 抽取不需报关交接海关确认两处复用 * xgkc 抽取不需报关交接海关确认两处复用
*/ */
private void doStockOutDeduct(String orderNumber, StockOutOrder stockOutOrder, LoginUser loginUser) { private List<MaterialInventoryParamDO> doStockOutDeduct(String orderNumber, StockOutOrder stockOutOrder, LoginUser loginUser) {
List<MaterialInventoryParamDO> clearoutParamDOs = new ArrayList<>();
List<OutMaterialDetail> outMaterialDetailList = outMaterialDetailMapper.selectList(new QueryWrapper<OutMaterialDetail>().lambda() List<OutMaterialDetail> outMaterialDetailList = outMaterialDetailMapper.selectList(new QueryWrapper<OutMaterialDetail>().lambda()
.eq(OutMaterialDetail::getOutOrderNumber, orderNumber) .eq(OutMaterialDetail::getOutOrderNumber, orderNumber)
.eq(OutMaterialDetail::getDelFlag, 1)); .eq(OutMaterialDetail::getDelFlag, 1));
@@ -489,16 +499,17 @@ public class HandoverTaskOrderDomainService {
materialInventoryOmsParamDO.setLoginUser(loginUser); materialInventoryOmsParamDO.setLoginUser(loginUser);
if (stockOutOrder != null && !"yang_pin_chu_ku".equals(stockOutOrder.getBusinessType())) { if (stockOutOrder != null && !"yang_pin_chu_ku".equals(stockOutOrder.getBusinessType())) {
materialInventoryService.kctzjl(materialInventoryParamDO,"出库",loginUser); materialInventoryService.kctzjl(materialInventoryParamDO,"出库",loginUser);
materialInventoryService.xgkc(materialInventoryParamDO); clearoutParamDOs.addAll(materialInventoryService.xgkc(materialInventoryParamDO));
//库存推送oms //库存推送oms
omsServiceFeign.omsEdit(materialInventoryOmsParamDO); omsServiceFeign.omsEdit(materialInventoryOmsParamDO);
} }
} }
} }
return clearoutParamDOs;
} }
// /** // /**
// * 定时任务入口每小时整点扫描已交接(13)状态的需报关出库单 sendDec 查报关结果 // * 定时任务入口
// * 放行/结关的 状态 139 + 扣库存 + 推OMS未放行 跳过下次再查 // * 放行/结关的 状态 139 + 扣库存 + 推OMS未放行 跳过下次再查
// * @Scheduled 触发无需在 sys_job 表配置 // * @Scheduled 触发无需在 sys_job 表配置
// */ // */
@@ -243,4 +243,20 @@ public class MaterialBaseInfo extends BaseVOEntity {
@ApiModelProperty(name = "是否正常物料: 0-是 1-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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;
} }
@@ -292,4 +292,20 @@ public class MaterialBaseInfoPO extends BaseVOEntity {
@ApiModelProperty(name = "是否正常物料: 0-是 1-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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;
} }
@@ -265,4 +265,20 @@ public class MaterialBaseInfoDO extends BaseVOEntity {
@ApiModelProperty(name = "是否正常物料: 0-是 1-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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;
} }
@@ -236,4 +236,10 @@ public class MaterialInventory extends BaseVOEntity {
@Excel(name = "LOT编号") @Excel(name = "LOT编号")
private String lotNumber; private String lotNumber;
@ApiModelProperty("上次计费时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "上次计费时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastBillingTime;
} }
@@ -15,6 +15,7 @@ import com.mhd.wms.domain.statementStatistics.todo.ImmediateInventoryDO;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* 物料库存Service接口 * 物料库存Service接口
@@ -118,7 +119,7 @@ public interface IMaterialInventoryService extends IService<MaterialInventory>
* type 类型(1:上架2:分配3:取消分配4:出库交接5:移位6:库存调整7:库存冻结) * type 类型(1:上架2:分配3:取消分配4:出库交接5:移位6:库存调整7:库存冻结)
* materialInventoryId 物料库存ID * materialInventoryId 物料库存ID
* */ * */
public void xgkc(MaterialInventoryParamDO materialInventoryParamDO); public List<MaterialInventoryParamDO> xgkc(MaterialInventoryParamDO materialInventoryParamDO);
public void kctzjl(MaterialInventoryParamDO materialInventoryParamDO,String adjustAction,LoginUser loginUser); public void kctzjl(MaterialInventoryParamDO materialInventoryParamDO,String adjustAction,LoginUser loginUser);
@@ -130,5 +131,9 @@ public interface IMaterialInventoryService extends IService<MaterialInventory>
public Map<String,Object> querySetlleByShipperId(Long ShipperId); public Map<String,Object> querySetlleByShipperId(Long ShipperId);
public Map<String,Object> queryContract(Long shipperId); public Map<String,Object> queryContract(Long contractManageId);
public Map<String,Object> queryShipperParameters(Long shipperId,String parametersName);
Map<String, Object> queryMaterialClassify(Long id);
} }
@@ -135,5 +135,9 @@ public interface MaterialInventoryMapper extends BaseMapper<MaterialInventory>
public Map<String,Object> querySetlleByShipperId(@Param("shipperId") Long shipperId); public Map<String,Object> querySetlleByShipperId(@Param("shipperId") Long shipperId);
public Map<String,Object> queryContract(@Param("shipperId") Long shipperId); public Map<String,Object> queryContract(@Param("contractManageId") Long contractManageId);
public Map<String,Object> queryShipperParameters(@Param("shipperId") Long shipperId,@Param("parametersName") String parametersName);
public Map<String, Object> queryMaterialClassify(@Param("id") Long id);
} }
@@ -544,7 +544,7 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
} }
@Override @Override
public void xgkc(MaterialInventoryParamDO materialInventoryParamDO) { public List<MaterialInventoryParamDO> xgkc(MaterialInventoryParamDO materialInventoryParamDO) {
BigDecimal netWeight = materialInventoryParamDO.getNetWeight() != null ? materialInventoryParamDO.getNetWeight() : BigDecimal.ZERO; BigDecimal netWeight = materialInventoryParamDO.getNetWeight() != null ? materialInventoryParamDO.getNetWeight() : BigDecimal.ZERO;
BigDecimal grossWeight = materialInventoryParamDO.getGrossWeight() != null ? materialInventoryParamDO.getGrossWeight() : BigDecimal.ZERO; BigDecimal grossWeight = materialInventoryParamDO.getGrossWeight() != null ? materialInventoryParamDO.getGrossWeight() : BigDecimal.ZERO;
BigDecimal volume = materialInventoryParamDO.getVolume() != null ? materialInventoryParamDO.getVolume() : BigDecimal.ZERO; BigDecimal volume = materialInventoryParamDO.getVolume() != null ? materialInventoryParamDO.getVolume() : BigDecimal.ZERO;
@@ -552,6 +552,7 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
BigDecimal quantity = materialInventoryParamDO.getQuantity() != null ? materialInventoryParamDO.getQuantity() : BigDecimal.ZERO; BigDecimal quantity = materialInventoryParamDO.getQuantity() != null ? materialInventoryParamDO.getQuantity() : BigDecimal.ZERO;
String type = materialInventoryParamDO.getType(); String type = materialInventoryParamDO.getType();
Long materialInventoryId = materialInventoryParamDO.getMaterialInventoryId(); Long materialInventoryId = materialInventoryParamDO.getMaterialInventoryId();
List<MaterialInventoryParamDO> clearoutList = new ArrayList<>();
//类型(1:上架2:分配3:取消分配4:出库交接5:移位6:库存调整7:库存冻结) //类型(1:上架2:分配3:取消分配4:出库交接5:移位6:库存调整7:库存冻结)
switch (type) { switch (type) {
@@ -569,7 +570,10 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
break; break;
case "4": case "4":
// 出库交接 // 出库交接
ckjj(netWeight, grossWeight, volume, area, quantity, materialInventoryId); MaterialInventoryPO po = ckjj(netWeight, grossWeight, volume, area, quantity, materialInventoryId);
if (po != null) {
clearoutList.add(materialInventoryParamDO);
}
break; break;
case "5": case "5":
// 移位 // 移位
@@ -586,6 +590,7 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
default: default:
throw new ServiceException("错误的类型"); throw new ServiceException("错误的类型");
} }
return clearoutList;
} }
@Override @Override
@@ -1040,7 +1045,7 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
materialInventoryMapper.updateById(materialInventory); materialInventoryMapper.updateById(materialInventory);
} }
} }
private void ckjj(BigDecimal netWeight, BigDecimal grossWeight, BigDecimal volume, BigDecimal area, BigDecimal quantity, Long materialInventoryId) { private MaterialInventoryPO ckjj(BigDecimal netWeight, BigDecimal grossWeight, BigDecimal volume, BigDecimal area, BigDecimal quantity, Long materialInventoryId) {
MaterialInventory materialInventoryPO = materialInventoryMapper.selectById(materialInventoryId); MaterialInventory materialInventoryPO = materialInventoryMapper.selectById(materialInventoryId);
if (materialInventoryPO != null) { if (materialInventoryPO != null) {
//库存数量 //库存数量
@@ -1087,7 +1092,22 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
MaterialInventory materialInventory = new MaterialInventory(); MaterialInventory materialInventory = new MaterialInventory();
com.mhd.common.core.utils.bean.BeanUtils.copyProperties(materialInventoryPO, materialInventory); com.mhd.common.core.utils.bean.BeanUtils.copyProperties(materialInventoryPO, materialInventory);
materialInventoryMapper.updateById(materialInventory); materialInventoryMapper.updateById(materialInventory);
Long warehouseId = materialInventoryPO.getWarehouseId();
boolean needPush = false;
if (warehouseId != null && warehouseId == 20) {
needPush = true;
} else if (warehouseId != null && warehouseId == 19 && newInventoryQuantity.compareTo(BigDecimal.ZERO) == 0) {
needPush = true;
}
if (needPush) {
MaterialInventoryPO resultPO = new MaterialInventoryPO();
com.mhd.common.core.utils.bean.BeanUtils.copyProperties(materialInventoryPO, resultPO);
resultPO.setMaterialInventoryId(materialInventoryId);
return resultPO;
}
} }
return null;
} }
private void yw(BigDecimal netWeight, BigDecimal grossWeight, BigDecimal volume, BigDecimal area, BigDecimal quantity, Long materialInventoryId) { private void yw(BigDecimal netWeight, BigDecimal grossWeight, BigDecimal volume, BigDecimal area, BigDecimal quantity, Long materialInventoryId) {
MaterialInventory materialInventoryPO = materialInventoryMapper.selectById(materialInventoryId); MaterialInventory materialInventoryPO = materialInventoryMapper.selectById(materialInventoryId);
@@ -1253,7 +1273,16 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
return materialInventoryMapper.querySetlleByShipperId(shipperId); return materialInventoryMapper.querySetlleByShipperId(shipperId);
} }
public Map<String,Object> queryContract(Long shipperId) { public Map<String,Object> queryContract(Long contractManageId) {
return materialInventoryMapper.queryContract(shipperId); return materialInventoryMapper.queryContract(contractManageId);
}
public Map<String,Object> queryShipperParameters(Long shipperId,String parametersName) {
return materialInventoryMapper.queryShipperParameters(shipperId,parametersName);
}
@Override
public Map<String, Object> queryMaterialClassify(Long id) {
return materialInventoryMapper.queryMaterialClassify(id);
} }
} }
@@ -233,4 +233,10 @@ public class MaterialInventoryPO extends MaterialBasePO {
@ApiModelProperty("规格型号") @ApiModelProperty("规格型号")
@Excel(name = "规格型号") @Excel(name = "规格型号")
private String specificationModel; private String specificationModel;
@ApiModelProperty("上次计费时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "上次计费时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastBillingTime;
} }
@@ -288,4 +288,10 @@ public class MaterialInventoryQueryListPO extends MaterialBasePO {
@ApiModelProperty("总面积(SQM)PDA 表单区显示") @ApiModelProperty("总面积(SQM)PDA 表单区显示")
private BigDecimal totalArea; private BigDecimal totalArea;
@ApiModelProperty("上次计费时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "上次计费时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastBillingTime;
} }
@@ -271,4 +271,13 @@ public class MaterialInventoryDO extends MaterialBaseDO {
@ApiModelProperty("库存分配匹配:Batch Ref NO's token 列表(默认不启用,仅显式赋值时参与匹配)") @ApiModelProperty("库存分配匹配:Batch Ref NO's token 列表(默认不启用,仅显式赋值时参与匹配)")
private List<String> batchRefNoList; private List<String> batchRefNoList;
@ApiModelProperty("上次计费时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "上次计费时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastBillingTime;
private String lastBillingTimeStart;
private String lastBillingTimeEnd;
} }
@@ -268,4 +268,13 @@ public class MaterialInventoryQueryListDO extends MaterialBaseDO {
private String updateTimeStart; private String updateTimeStart;
private String updateTimeEnd; private String updateTimeEnd;
@ApiModelProperty("上次计费时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "上次计费时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date lastBillingTime;
private String lastBillingTimeStart;
private String lastBillingTimeEnd;
} }
@@ -138,7 +138,15 @@ public class MaterialInventoryDomainService {
return materialInventoryService.querySetlleByShipperId(shipperId); return materialInventoryService.querySetlleByShipperId(shipperId);
} }
public Map<String,Object> queryContract(Long shipperId) { public Map<String,Object> queryContract(Long contractManageId) {
return materialInventoryService.queryContract(shipperId); return materialInventoryService.queryContract(contractManageId);
}
public Map<String,Object> queryShipperParameters(Long shipperId,String parametersName) {
return materialInventoryService.queryShipperParameters(shipperId,parametersName);
}
public Map<String,Object> queryMaterialClassify(Long id) {
return materialInventoryService.queryMaterialClassify(id);
} }
} }
@@ -316,4 +316,20 @@ public class MaterialBaseInfoDTO extends BaseVOEntity {
private String orgId; private String orgId;
@ApiModelProperty(name = "是否正常物料: 0-是 1-否") @ApiModelProperty(name = "是否正常物料: 0-是 1-否")
private Integer isNormalMaterial; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@@ -203,4 +204,10 @@ public class MaterialInventoryDTO extends MaterialBaseDTO {
private String updateTimeStart; private String updateTimeStart;
private String updateTimeEnd; private String updateTimeEnd;
@ApiModelProperty("上次计费时间")
private Date lastBillingTime;
private String lastBillingTimeStart;
private String lastBillingTimeEnd;
} }
@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@@ -201,4 +202,10 @@ public class MaterialInventoryQueryListDTO extends MaterialBaseDTO {
private String updateTimeStart; private String updateTimeStart;
private String updateTimeEnd; private String updateTimeEnd;
@ApiModelProperty("上次计费时间")
private Date lastBillingTime;
private String lastBillingTimeStart;
private String lastBillingTimeEnd;
} }
@@ -69,6 +69,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="chargeStandard" column="charge_standard" /> <result property="chargeStandard" column="charge_standard" />
<result property="chargeStandardClass" column="charge_standard_class" /> <result property="chargeStandardClass" column="charge_standard_class" />
<result property="isNormalMaterial" column="is_normal_material" /> <result property="isNormalMaterial" column="is_normal_material" />
<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> </resultMap>
@@ -78,7 +82,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
material_shape_name, a.material_size, a.material_length, a.material_width, a.material_height, a.remark, a.nullify, a.create_time, a.create_by, a.create_by_name, a.update_time, a.update_by, a.update_by_name, a.del_flag, a.common, material_shape_name, a.material_size, a.material_length, a.material_width, a.material_height, a.remark, a.nullify, a.create_time, a.create_by, a.create_by_name, a.update_time, a.update_by, a.update_by_name, a.del_flag, a.common,
sku_code, a.unit_price, a.currency, a.origin_country, a.hs_code, a.declaration_unit, a.statutory_unit, a.statutory_second_unit, a.copy_code, sku_code, a.unit_price, a.currency, a.origin_country, a.hs_code, a.declaration_unit, a.statutory_unit, a.statutory_second_unit, a.copy_code,
a.push_status,a.push_time,a.push_by,a.goods_type,a.gross_weight,a.push_by_name,a.unit,a.INSURE_AMOUNT,a.CHARGE_STANDARD, a.push_status,a.push_time,a.push_by,a.goods_type,a.gross_weight,a.push_by_name,a.unit,a.INSURE_AMOUNT,a.CHARGE_STANDARD,
specification_model as specification_model,nvl(b.stock_qty,0) as stock_quantity,c.charge_standard as charge_standard_class,a.is_normal_material specification_model as specification_model,nvl(b.stock_qty,0) as stock_quantity,c.charge_standard as charge_standard_class,a.is_normal_material,
a.monthly_warehouse_rent, a.half_month_warehouse_rent, a.monthly_warehouse_rent_unit, a.half_month_warehouse_rent_unit
from material_base_info a left join ( from material_base_info a left join (
select material_base_info_id, sum(INVENTORY_QUANTITY) as stock_qty from MATERIAL_INVENTORY group by material_base_info_id select material_base_info_id, sum(INVENTORY_QUANTITY) as stock_qty from MATERIAL_INVENTORY group by material_base_info_id
@@ -65,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="inOrderNumber" column="in_order_number" /> <result property="inOrderNumber" column="in_order_number" />
<result property="lotNumber" column="lot_number" /> <result property="lotNumber" column="lot_number" />
<result property="specificationModel" column="specification_model" /> <result property="specificationModel" column="specification_model" />
<result property="lastBillingTime" column="last_billing_time" />
</resultMap> </resultMap>
@@ -88,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO,nvl(a.unit_name,b.unit_name) as unit_name, a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO,nvl(a.unit_name,b.unit_name) as unit_name,
a.bar_code as inv_bar_code, a.bar_code as inv_bar_code,
a.in_order_number,a.lot_number, a.in_order_number,a.lot_number,
a.last_billing_time,
CASE WHEN IFNULL(sum(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END as sort_order CASE WHEN IFNULL(sum(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END as sort_order
</sql> </sql>
@@ -112,6 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO,nvl(a.unit_name,b.unit_name) as unit_name, a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO,nvl(a.unit_name,b.unit_name) as unit_name,
a.bar_code as inv_bar_code, a.bar_code as inv_bar_code,
a.in_order_number,a.lot_number, a.in_order_number,a.lot_number,
a.last_billing_time,
CASE WHEN IFNULL(sum(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END as sort_order CASE WHEN IFNULL(sum(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END as sort_order
</sql> </sql>
@@ -263,6 +266,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="expiryDateEnd != null and expiryDateEnd != ''"> <if test="expiryDateEnd != null and expiryDateEnd != ''">
and a.expiry_date <![CDATA[ < ]]> DATEADD(DAY, 1, #{expiryDateEnd}) and a.expiry_date <![CDATA[ < ]]> DATEADD(DAY, 1, #{expiryDateEnd})
</if> </if>
<if test="lastBillingTimeStart != null and lastBillingTimeStart != ''">
and a.last_billing_time >= #{lastBillingTimeStart}
</if>
<if test="lastBillingTimeEnd != null and lastBillingTimeEnd != ''">
and a.last_billing_time <![CDATA[ < ]]> DATEADD(DAY, 1, #{lastBillingTimeEnd})
</if>
</sql> </sql>
<!-- 与 selectMaterialInventoryPo1 相同条件,表别名为 mi(用于 queryListByWl 最新明细子查询) --> <!-- 与 selectMaterialInventoryPo1 相同条件,表别名为 mi(用于 queryListByWl 最新明细子查询) -->
@@ -381,6 +390,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="boxPalletNo != null and boxPalletNo != ''"> <if test="boxPalletNo != null and boxPalletNo != ''">
and mi.BOX_PALLET_NO like concat('%', #{boxPalletNo}, '%') and mi.BOX_PALLET_NO like concat('%', #{boxPalletNo}, '%')
</if> </if>
<if test="lastBillingTimeStart != null and lastBillingTimeStart != ''">
and mi.last_billing_time >= #{lastBillingTimeStart}
</if>
<if test="lastBillingTimeEnd != null and lastBillingTimeEnd != ''">
and mi.last_billing_time <![CDATA[ < ]]> DATEADD(DAY, 1, #{lastBillingTimeEnd})
</if>
</sql> </sql>
<select id="queryList" parameterType="com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryDO" resultMap="MaterialInventoryResult"> <select id="queryList" parameterType="com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryDO" resultMap="MaterialInventoryResult">
@@ -537,6 +552,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
MAX(a.batch_ref_no) AS batch_ref_no, MAX(a.sheet_ref_no) AS sheet_ref_no, MAX(a.box_pallet_no) AS box_pallet_no, MAX(a.batch_ref_no) AS batch_ref_no, MAX(a.sheet_ref_no) AS sheet_ref_no, MAX(a.box_pallet_no) AS box_pallet_no,
MAX(a.bar_code) AS inv_bar_code, MAX(a.bar_code) AS inv_bar_code,
MAX(a.in_order_number) AS in_order_number, MAX(a.lot_number) AS lot_number, MAX(a.in_order_number) AS in_order_number, MAX(a.lot_number) AS lot_number,
MAX(a.last_billing_time) AS last_billing_time,
MAX(b.specification_model) AS specification_model, MAX(b.specification_model) AS specification_model,
MAX(b.material_code) AS material_code, MAX(b.material_name) AS material_name, MAX(b.material_code) AS material_code, MAX(b.material_name) AS material_name,
CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END AS sort_order CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END AS sort_order
@@ -629,6 +645,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL(SUM(a.VOLUME), 0) AS VOLUME, IFNULL(SUM(a.VOLUME), 0) AS VOLUME,
MIN(a.create_time) AS create_time, MIN(a.create_time) AS create_time,
MAX(a.update_time) AS update_time, MAX(a.update_time) AS update_time,
MAX(a.last_billing_time) AS last_billing_time,
CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END AS sort_order CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END AS sort_order
</sql> </sql>
@@ -728,6 +745,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateByName" column="update_by_name" /> <result property="updateByName" column="update_by_name" />
<result property="delFlag" column="del_flag" /> <result property="delFlag" column="del_flag" />
<result property="lastBillingTime" column="last_billing_time" />
</resultMap> </resultMap>
<!-- 1-按货主 2-按物料 3-按批次 4-按库位 5-按物料/库位 6-按容器 0-全部 --> <!-- 1-按货主 2-按物料 3-按批次 4-按库位 5-按物料/库位 6-按容器 0-全部 -->
@@ -1705,7 +1723,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT * SELECT *
FROM MATERIAL_INVENTORY FROM MATERIAL_INVENTORY
WHERE EXTRACT(DAY FROM CREATE_TIME) = EXTRACT(DAY FROM SYSDATE - 1) AND INVENTORY_QUANTITY > 0 WHERE EXTRACT(DAY FROM CREATE_TIME) = EXTRACT(DAY FROM SYSDATE - 1) AND INVENTORY_QUANTITY > 0
AND DEL_FLAG = 1 AND SHIIPER_ID = #{shipperId} AND DEL_FLAG = 1 AND SHIPPER_ID = #{shipperId}
</select> </select>
@@ -1725,21 +1743,53 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="querySetlleByShipperId" parameterType="java.lang.Long" resultType="java.util.Map"> <select id="querySetlleByShipperId" parameterType="java.lang.Long" resultType="java.util.Map">
SELECT SELECT
SETTLEMENT_ENTITY as settlementEntity, SETTLEMENT_ENTITY as "settlementEntity",
SETTLEMENT_ENTITY_ID as settlementEntityId, SETTLEMENT_ENTITY_ID as "settlementEntityId",
SETTLEMENT_CUSTOMERS_CODE as settlementCustomersCode, SETTLEMENT_CUSTOMERS_CODE as "settlementCustomersCode",
SETTLEMENT_CUSTOMERS_ID as settlementCustomersId SETTLEMENT_CUSTOMERS_ID as "settlementCustomersId"
FROM NGWL_TEST_OMS.SETTLEMENT_CUSTOMERS where 1=1 and FROM NGWL_TEST_BMS.SETTLEMENT_CUSTOMERS where 1=1 and
SETTLEMENT_ENTITY_ID = #{settlementEntityId} SETTLEMENT_ENTITY_ID = #{shipperId} AND DEL_FLAG = 1
</select> </select>
<select id="queryContract" parameterType="java.lang.Long" resultType="java.util.Map"> <select id="queryContract" parameterType="java.lang.Long" resultType="java.util.Map">
SELECT SELECT
CONTRACT_MANAGE_ID as contractManageId, CONTRACT_MANAGE_ID AS "contractManageId",
ORIGINAL_CONTRACT_NUMBER as originalContractNumber, ORIGINAL_CONTRACT_NUMBER AS "originalContractNumber",
CONTRACT_NUMBER as contractNumber, CONTRACT_NUMBER AS "contractNumber",
CONTRACT_NAME as contractName CONTRACT_NAME AS "contractName"
FROM NGWL_TEST_SYSTEM.CONTRACT_MANAGE where 1=1 and FROM
SETTLEMENT_CUSTOMERS_ID = #{shipperId} NGWL_TEST_SYSTEM.CONTRACT_MANAGE sys
LEFT JOIN NGWL_TEST_BMS.SETTLEMENT_CUSTOMERS bms ON sys.SETTLEMENT_CUSTOMERS_ID = bms.SETTLEMENT_CUSTOMERS_ID
WHERE
1 = 1
AND CONTRACT_MANAGE_ID = #{contractManageId} AND DEL_FLAG = 1
</select>
<select id="queryShipperParameters" resultType="java.util.Map">
SELECT
PARAMETERS_NAME AS "parametersName",
CONTENT AS "content",
CONTRACT_NUMBER AS "contractNumber",
SETTLEMENT_CUSTOMERS_ID AS "settlementCustomersId",
CONTRACT_MANAGE_ID AS "contractManageId"
FROM
NGWL_TEST_BMS.SETTLEMENT_CUSTOMERS_PARAMETERS
WHERE
1 = 1
AND SETTLEMENT_ENTITY_ID = #{shipperId} and PARAMETERS_NAME = #{parametersName}
</select>
<select id="queryMaterialClassify" resultType="java.util.Map">
SELECT
MONTHLY_WAREHOUSE_RENT AS "monthlyWarehouseRent",
HALF_MONTH_WAREHOUSE_RENT AS "halfMonthWarehouseRent",
MONTHLY_WAREHOUSE_RENT_UNIT AS "monthlyWarehouseRentUnit",
HALF_MONTH_WAREHOUSE_RENT_UNIT AS "halfMonthWarehouseRentUnit"
FROM
NGWL_TEST_SYSTEM.MATERIAL_CLASSIFY
WHERE
1 = 1
AND MATERIAL_CLASSIFY_ID = #{id} AND DEL_FLAG = 1
</select> </select>
</mapper> </mapper>