Merge branch 'dev' into dev_user0622
# Conflicts: # mhd_wms/src/main/resources/mapper/pickingOrder/PickingOrderMapper.xml
This commit is contained in:
@@ -357,6 +357,10 @@ public interface SystemServiceFeign {
|
||||
@GetMapping("/contractManageApi/getInfoByCustomer")
|
||||
public AjaxResult getInfoByCustomer(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType);
|
||||
|
||||
@ApiOperation("根据结算主体和费用科目获取合同信息")
|
||||
@GetMapping(value = "/contractManageApi/getInfoByCustomerAndSecondSubjectCode")
|
||||
public AjaxResult getInfoByCustomerAndSecondSubjectCode(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType,@RequestParam("firstSubjectCode") String firstSubjectCode,@RequestParam("topOrganizationId") Long topOrganizationId,@RequestParam("organizationId") Long organizationId);
|
||||
|
||||
/**
|
||||
* 根据结算主体获取合同信息
|
||||
*/
|
||||
|
||||
+5
-1
@@ -284,6 +284,10 @@ public class RemoteSystemFeignFallbackFactory implements FallbackFactory<SystemS
|
||||
return AjaxResult.error("查询失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult getInfoByCustomerAndSecondSubjectCode(String settlementCustomersCode, Integer contractType, String firstSubjectCode, Long topOrganizationId, Long organizationId) {
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public AjaxResult getInfoByCustomer2(String settlementCustomersCode, Integer contractType, Long topOrganizationId) {
|
||||
return AjaxResult.error("查询失败");
|
||||
@@ -310,4 +314,4 @@ public class RemoteSystemFeignFallbackFactory implements FallbackFactory<SystemS
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
+94
-8
@@ -268,12 +268,25 @@ public class ContractManageApplicationService {
|
||||
Long organizationId = contractManageDTO.getOrganizationId();
|
||||
String sunjectCode = contractManageDTO.getSubjectCode();
|
||||
Long topOrganizationId = contractManageDTO.getTopOrganizationId();
|
||||
List<ContractManage> UserContractManages = contractManageMapper.selectList(new LambdaQueryWrapper<ContractManage>()
|
||||
.eq(ContractManage::getSettlementCustomersId, settlementCustomersId)
|
||||
.eq(ContractManage::getDelFlag, 1)
|
||||
.eq(ContractManage::getOrganizationId, organizationId)
|
||||
.eq(ContractManage::getTopOrganizationId, topOrganizationId)
|
||||
.eq(ContractManage::getCommonContractFlag, 2));
|
||||
ContractManageDO contractManageDO = new ContractManageDO();
|
||||
contractManageDO.setOrganizationId(organizationId);
|
||||
contractManageDO.setSettlementCustomersId(settlementCustomersId);
|
||||
contractManageDO.setTopOrganizationId(topOrganizationId);
|
||||
contractManageDO.setCommonContractFlag(2);
|
||||
contractManageDO.setDelFlag(1);
|
||||
contractManageDO.setFirstSubjectCode(sunjectCode);
|
||||
List<ContractManagePO> contractManagePOS = contractManageMapper.queryList(contractManageDO);
|
||||
if (contractManagePOS != null && contractManagePOS.size() > 1) {
|
||||
throw new RuntimeException("同一费用科目存在多条合同,请检查");
|
||||
}
|
||||
List<ContractManage> UserContractManages = new ArrayList<>();
|
||||
if (contractManagePOS != null) {
|
||||
for (ContractManagePO po : contractManagePOS) {
|
||||
ContractManage contractManage = new ContractManage();
|
||||
BeanUtils.copyProperties(po, contractManage);
|
||||
UserContractManages.add(contractManage);
|
||||
}
|
||||
}
|
||||
if (UserContractManages != null && UserContractManages.size() > 0) {
|
||||
//用户合同计费策略
|
||||
calucateSubjectAndPriceStrategy(UserContractManages, organizationId, topOrganizationId, sunjectCode, result);
|
||||
@@ -595,7 +608,8 @@ public class ContractManageApplicationService {
|
||||
通用合同:同一时间段、同一合同类型,只能存在一个
|
||||
特殊合同:同一结算主体、同一时间段、同一合同类型,只能存在一个
|
||||
*/
|
||||
checkContract(contractManageDO);
|
||||
//20260702取消同一时间段不能有相同合同校验
|
||||
//checkContract(contractManageDO);
|
||||
handleData(contractManageDO);
|
||||
handleDict(contractManageDO);
|
||||
contractManageDO.setContractNumber(OrderSequence.getOrderCode("HT"));
|
||||
@@ -831,7 +845,7 @@ public class ContractManageApplicationService {
|
||||
@Transactional
|
||||
public Boolean update(ContractManageDO contractManageDO) {
|
||||
validateContractType(contractManageDO.getContractType());
|
||||
checkContract(contractManageDO);
|
||||
//checkContract(contractManageDO);
|
||||
handleData(contractManageDO);
|
||||
handleDetils(contractManageDO);
|
||||
handleDict(contractManageDO);
|
||||
@@ -935,6 +949,78 @@ public class ContractManageApplicationService {
|
||||
return resultContract;
|
||||
}
|
||||
|
||||
public ContractManagePO getInfoByCustomerAndSecondSubjectCode(String settlementCustomersCode,Integer contractType, Long topOrganizationId, Long organizationId,String firstSubjectCode) {
|
||||
/*
|
||||
首先根据合同类型(仓储、运输、其他),以及结算客户,查询合同信息
|
||||
如果传了结算主体,则根据结算主体以及当前时间查询有效的特殊合同,如果特殊合同没有,则查询通用合同
|
||||
*/
|
||||
//获取当前登录人信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser) && topOrganizationId == null) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
if(contractType==null){
|
||||
throw new ServiceException("合同类型不能为空");
|
||||
}
|
||||
ContractManagePO resultContract = new ContractManagePO();
|
||||
//查询当前日期在有效期内的合同
|
||||
ContractManageDO queryParam = new ContractManageDO();
|
||||
queryParam.setNowDateString(DateUtil.format(new Date(),"yyyy-MM-dd"));
|
||||
queryParam.setFirstSubjectCode(firstSubjectCode);
|
||||
queryParam.setOrganizationId(organizationId);
|
||||
queryParam.setTopOrganizationId(topOrganizationId);
|
||||
List<ContractManagePO> contractManagePOList = contractManageDomainService.queryList(queryParam);
|
||||
List<ContractManagePO> contractManagePOs = contractManagePOList.stream()
|
||||
.filter(item -> item.getSettlementCustomersCode().equals(settlementCustomersCode)
|
||||
&& Objects.equals(item.getContractType(), contractType))
|
||||
.collect(Collectors.toList());
|
||||
if (contractManagePOs != null && contractManagePOs.size() > 1) {
|
||||
throw new ServiceException("存在多条相同费用科目的合同,请检查");
|
||||
}
|
||||
if(contractManagePOList != null && contractManagePOList.size()>0){
|
||||
if(StringUtils.isNotEmpty(settlementCustomersCode)){
|
||||
//根据结算对象,及合同的类型 查询对应合同信息
|
||||
ContractManagePO contractManagePO = contractManagePOList.stream()
|
||||
.filter(item -> item.getSettlementCustomersCode().equals(settlementCustomersCode) && Objects.equals(item.getContractType(), contractType)).findFirst().orElse(null);
|
||||
if(null == contractManagePO){
|
||||
resultContract = findGeneralContract(contractManagePOList, contractType);
|
||||
}else {
|
||||
resultContract = contractManagePO;
|
||||
}
|
||||
}else {
|
||||
resultContract = findGeneralContract(contractManagePOList, contractType);
|
||||
}
|
||||
if(null == resultContract){
|
||||
throw new ServiceException("找不到匹配的合同,请重试");
|
||||
}
|
||||
//得到合同后,查询合同明细
|
||||
List<ContractManageDetailPO> contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(resultContract.getContractManageId());
|
||||
List<ContractManageDetailPO> contractManageDetailSaveList = new ArrayList<>();
|
||||
if(contractManageDetailPOList != null && contractManageDetailPOList.size()>0){
|
||||
//将临时合同中没有,但是通用合同中有的数据过滤出(使用 ObjectUtil.equal 避免 firstSubjectCode/secondSubjectCode 为 null 时 NPE)
|
||||
contractManageDetailSaveList = contractManageDetailPOList.stream().filter(item -> contractManageDetailPOList.stream().noneMatch(item1 -> ObjectUtil.equal(item1.getFirstSubjectCode(), item.getFirstSubjectCode()) && ObjectUtil.equal(item1.getSecondSubjectCode(), item.getSecondSubjectCode()) && item1.getSubjectType()==1)).collect(Collectors.toList());
|
||||
//首先根据结算科目类型将临时合同过滤出
|
||||
List<ContractManageDetailPO> tempContractManageDetailPOList = contractManageDetailPOList.stream().filter(item -> item.getSubjectType()==2).collect(Collectors.toList());
|
||||
//遍历两个集合,将相同费用科目code的数据,进行比较,如果结算科目类型是临时且合同有效期有效,则使用该条数据,将另一条移除
|
||||
for (ContractManageDetailPO manageDetailPO : tempContractManageDetailPOList) {
|
||||
for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOList) {
|
||||
if(ObjectUtil.equal(contractManageDetailPO.getFirstSubjectCode(), manageDetailPO.getFirstSubjectCode()) && ObjectUtil.equal(contractManageDetailPO.getSecondSubjectCode(), manageDetailPO.getSecondSubjectCode())){
|
||||
//判断如果是临时合同在有效期内,则将该条数据保存到集合contractManageDetailSaveList
|
||||
DateTime start = DateUtil.parseDate(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd"));
|
||||
DateTime end = DateUtil.parseDateTime(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd"));
|
||||
DateTime now = DateUtil.beginOfDay(DateUtil.date());
|
||||
if (now.isAfterOrEquals(start) && now.isBefore(end)) {
|
||||
contractManageDetailSaveList.add(manageDetailPO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
resultContract.setContractManageDetailPOList(contractManageDetailSaveList);
|
||||
}
|
||||
return resultContract;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据结算主体获取合同信息
|
||||
* @param settlementCustomersCode 结算主体code
|
||||
|
||||
+2
@@ -214,4 +214,6 @@ public class ContractManageDO extends BaseVOEntity{
|
||||
@ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)")
|
||||
private Integer transportationCosts;
|
||||
|
||||
@ApiModelProperty("一级费用科目code")
|
||||
private String firstSubjectCode;
|
||||
}
|
||||
+31
-1
@@ -68,6 +68,20 @@ public class StorageSectionDomainService {
|
||||
storageSectionDO.getStorageCode(), storageSectionDO.getStorageName(), null);
|
||||
//设置仓库
|
||||
setWarehouseInfo(storageSectionDO);
|
||||
String storageCode = storageSectionDO.getStorageCode();
|
||||
String storageName = storageSectionDO.getStorageName();
|
||||
Long warehouseId = storageSectionDO.getWarehouseId();
|
||||
List<StorageSection> codelist = storageSectionService.list(new QueryWrapper<StorageSection>().lambda()
|
||||
.eq(StorageSection::getStorageCode, storageCode)
|
||||
.eq(StorageSection::getWarehouseId, warehouseId)
|
||||
.eq(StorageSection::getDelFlag, 1));
|
||||
List<StorageSection> namelist = storageSectionService.list(new QueryWrapper<StorageSection>().lambda()
|
||||
.eq(StorageSection::getStorageName, storageName)
|
||||
.eq(StorageSection::getWarehouseId, warehouseId)
|
||||
.eq(StorageSection::getDelFlag, 1));
|
||||
if ((codelist != null && codelist.size() > 0) || (namelist != null && namelist.size() > 0)) {
|
||||
throw new ServiceException("库区编码或名称已存在");
|
||||
}
|
||||
return storageSectionService.insert(storageSectionDO);
|
||||
}
|
||||
|
||||
@@ -86,6 +100,22 @@ public class StorageSectionDomainService {
|
||||
storageSectionDO.getStorageSectionId());
|
||||
//设置仓库
|
||||
setWarehouseInfo(storageSectionDO);
|
||||
String storageCode = storageSectionDO.getStorageCode();
|
||||
String storageName = storageSectionDO.getStorageName();
|
||||
Long warehouseId = storageSectionDO.getWarehouseId();
|
||||
List<StorageSection> codelist = storageSectionService.list(new QueryWrapper<StorageSection>().lambda()
|
||||
.eq(StorageSection::getStorageCode, storageCode)
|
||||
.eq(StorageSection::getWarehouseId, warehouseId)
|
||||
.ne(StorageSection::getStorageSectionId, storageSectionDO.getStorageSectionId())
|
||||
.eq(StorageSection::getDelFlag, 1));
|
||||
List<StorageSection> namelist = storageSectionService.list(new QueryWrapper<StorageSection>().lambda()
|
||||
.eq(StorageSection::getStorageName, storageName)
|
||||
.eq(StorageSection::getWarehouseId, warehouseId)
|
||||
.ne(StorageSection::getStorageSectionId, storageSectionDO.getStorageSectionId())
|
||||
.eq(StorageSection::getDelFlag, 1));
|
||||
if ((codelist != null && codelist.size() > 0) || (namelist != null && namelist.size() > 0)) {
|
||||
throw new ServiceException("库区编码或名称已存在");
|
||||
}
|
||||
return storageSectionService.update(storageSectionDO);
|
||||
}
|
||||
|
||||
@@ -168,4 +198,4 @@ public class StorageSectionDomainService {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
+7
@@ -160,6 +160,13 @@ public class ContractManageApi extends BaseController{
|
||||
return AjaxResult.success(contractManageApplicationService.getInfoByCustomer(settlementCustomersCode,contractType,null));
|
||||
}
|
||||
|
||||
@ApiOperation("根据结算主体和费用科目获取合同信息")
|
||||
@GetMapping(value = "/getInfoByCustomerAndSecondSubjectCode")
|
||||
public AjaxResult getInfoByCustomerAndSecondSubjectCode(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType,@RequestParam("firstSubjectCode") String firstSubjectCode,@RequestParam("topOrganizationId") Long topOrganizationId,@RequestParam("organizationId") Long organizationId)
|
||||
{
|
||||
return AjaxResult.success(contractManageApplicationService.getInfoByCustomerAndSecondSubjectCode(settlementCustomersCode,contractType,topOrganizationId,organizationId,firstSubjectCode));
|
||||
}
|
||||
|
||||
@ApiOperation("根据结算主体获取合同信息")
|
||||
@GetMapping(value = "/getInfoByCustomer2")
|
||||
public AjaxResult getInfoByCustomer2(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType,@RequestParam("topOrganizationId") Long topOrganizationId)
|
||||
|
||||
@@ -6,11 +6,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
|
||||
<sql id="selectContractManagePo">
|
||||
select
|
||||
*
|
||||
from contract_manage
|
||||
SELECT DISTINCT a.*
|
||||
FROM CONTRACT_MANAGE a
|
||||
INNER JOIN CONTRACT_MANAGE_DETAIL b
|
||||
ON a.CONTRACT_MANAGE_ID = b.CONTRACT_MANAGE_ID
|
||||
where
|
||||
del_flag = 1
|
||||
a.del_flag = 1
|
||||
</sql>
|
||||
|
||||
<sql id="selectContractManagePo1">
|
||||
@@ -46,7 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and contract_state = #{contractState}
|
||||
</if>
|
||||
<if test="signingUnit != null and signingUnit != ''">
|
||||
and signing_unit = #{signingUnit}
|
||||
and asigning_unit = #{signingUnit}
|
||||
</if>
|
||||
<if test="settlementCustomers != null and settlementCustomers != ''">
|
||||
and settlement_customers = #{settlementCustomers}
|
||||
@@ -108,6 +109,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="theyOperatorPhone != null and theyOperatorPhone != ''">
|
||||
and they_operator_phone = #{theyOperatorPhone}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
@@ -132,73 +134,76 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<sql id="common_where">
|
||||
<if test="contractManageDO.contractNumber != null and contractManageDO.contractNumber != ''">
|
||||
and contract_number like concat('%', #{contractManageDO.contractNumber}, '%')
|
||||
and a.contract_number like concat('%', #{contractManageDO.contractNumber}, '%')
|
||||
</if>
|
||||
<if test="contractManageDO.originalContractNumber != null and contractManageDO.originalContractNumber != ''">
|
||||
and original_contract_number like concat('%', #{contractManageDO.originalContractNumber}, '%')
|
||||
and a.original_contract_number like concat('%', #{contractManageDO.originalContractNumber}, '%')
|
||||
</if>
|
||||
<if test="contractManageDO.commonContractFlag != null">
|
||||
and common_contract_flag = #{contractManageDO.commonContractFlag}
|
||||
and a.common_contract_flag = #{contractManageDO.commonContractFlag}
|
||||
</if>
|
||||
<if test="contractManageDO.contractType != null">
|
||||
and contract_type = #{contractManageDO.contractType}
|
||||
and a.contract_type = #{contractManageDO.contractType}
|
||||
</if>
|
||||
<if test="contractManageDO.settlementCustomers != null and contractManageDO.settlementCustomers != '' " >
|
||||
and settlement_customers like concat('%', #{contractManageDO.settlementCustomers}, '%')
|
||||
and a.settlement_customers like concat('%', #{contractManageDO.settlementCustomers}, '%')
|
||||
</if>
|
||||
<if test="contractManageDO.settlementCustomersCode != null">
|
||||
and settlement_customers_code = #{contractManageDO.settlementCustomersCode}
|
||||
and a.settlement_customers_code = #{contractManageDO.settlementCustomersCode}
|
||||
</if>
|
||||
<if test="contractManageDO.signingUnit != null and contractManageDO.signingUnit != ''">
|
||||
and signing_unit like concat('%', #{contractManageDO.signingUnit}, '%')
|
||||
and a.signing_unit like concat('%', #{contractManageDO.signingUnit}, '%')
|
||||
</if>
|
||||
<if test="contractManageDO.contractName != null and contractManageDO.contractName != ''">
|
||||
and contract_name like concat('%', #{contractManageDO.contractName}, '%')
|
||||
and a.contract_name like concat('%', #{contractManageDO.contractName}, '%')
|
||||
</if>
|
||||
<if test="contractManageDO.contractState != null">
|
||||
and contract_state = #{contractManageDO.contractState}
|
||||
and a.contract_state = #{contractManageDO.contractState}
|
||||
</if>
|
||||
<if test="contractManageDO.signingDateStart != null and contractManageDO.signingDateStart != ''">
|
||||
AND date_format(signing_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.signingDateStart}
|
||||
AND date_format(a.signing_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.signingDateStart}
|
||||
</if>
|
||||
<if test="contractManageDO.signingDateEnd != null and contractManageDO.signingDateEnd != ''">
|
||||
AND date_format(signing_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.signingDateEnd}
|
||||
AND date_format(a.signing_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.signingDateEnd}
|
||||
</if>
|
||||
|
||||
<if test="contractManageDO.effectiveDateStart != null and contractManageDO.effectiveDateStart != ''">
|
||||
AND date_format(effective_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.effectiveDateStart}
|
||||
AND date_format(a.effective_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.effectiveDateStart}
|
||||
</if>
|
||||
<if test="contractManageDO.effectiveDateEnd != null and contractManageDO.effectiveDateEnd != ''">
|
||||
AND date_format(effective_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.effectiveDateEnd}
|
||||
AND date_format(a.effective_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.effectiveDateEnd}
|
||||
</if>
|
||||
|
||||
<if test="contractManageDO.expirationDateStart != null and contractManageDO.expirationDateStart != ''">
|
||||
AND date_format(expiration_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.expirationDateStart}
|
||||
AND date_format(a.expiration_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.expirationDateStart}
|
||||
</if>
|
||||
<if test="contractManageDO.expirationDateEnd != null and contractManageDO.expirationDateEnd != ''">
|
||||
AND date_format(expiration_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.expirationDateEnd}
|
||||
AND date_format(a.expiration_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.expirationDateEnd}
|
||||
</if>
|
||||
<!-- 时间段重叠判断:只有当已有合同与传入的有效期真正有交集时才算冲突
|
||||
条件:已有合同开始日期 <= 新合同结束日期 且 已有合同结束日期 >= 新合同开始日期 -->
|
||||
<if test="contractManageDO.effectiveDateString != null and contractManageDO.effectiveDateString != ''
|
||||
and contractManageDO.expirationDateString != null and contractManageDO.expirationDateString != ''">
|
||||
AND (
|
||||
date_format(effective_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.expirationDateString}
|
||||
AND date_format(expiration_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.effectiveDateString}
|
||||
date_format(a.effective_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.expirationDateString}
|
||||
AND date_format(a.expiration_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.effectiveDateString}
|
||||
)
|
||||
</if>
|
||||
<if test="contractManageDO.nowDateString != null and contractManageDO.nowDateString != ''">
|
||||
AND (
|
||||
date_format(expiration_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.nowDateString}
|
||||
AND date_format(effective_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.nowDateString}
|
||||
date_format(a.expiration_date,'%Y-%m-%d') <![CDATA[>=]]> #{contractManageDO.nowDateString}
|
||||
AND date_format(a.effective_date,'%Y-%m-%d') <![CDATA[<=]]> #{contractManageDO.nowDateString}
|
||||
)
|
||||
</if>
|
||||
<if test="contractManageDO.organizationId != null">
|
||||
and organization_id = #{contractManageDO.organizationId}
|
||||
and a.organization_id = #{contractManageDO.organizationId}
|
||||
</if>
|
||||
<if test="contractManageDO.topOrganizationId != null">
|
||||
and top_organization_id = #{contractManageDO.topOrganizationId}
|
||||
and a.top_organization_id = #{contractManageDO.topOrganizationId}
|
||||
</if>
|
||||
<if test="contractManageDO.firstSubjectCode != null and contractManageDO.firstSubjectCode != ''">
|
||||
and b.FIRST_SUBJECT_CODE = #{contractManageDO.firstSubjectCode}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
</mapper>
|
||||
+124
-1
@@ -7,10 +7,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.mhd.bms.application.server.billingRules.CostCalculationApplicationService;
|
||||
import com.mhd.bms.application.server.settlementCustomers.SettlementCustomersApplicationService;
|
||||
import com.mhd.bms.domain.billManage.entity.BillDetail;
|
||||
import com.mhd.bms.domain.billManage.entity.BillManage;
|
||||
import com.mhd.bms.domain.billManage.repository.facade.IBillDetailService;
|
||||
import com.mhd.bms.domain.billManage.repository.facade.IBillManageService;
|
||||
import com.mhd.bms.domain.billingRules.repository.po.BillingParamsPO;
|
||||
import com.mhd.bms.domain.billingRules.repository.po.BillingRulesPO;
|
||||
import com.mhd.bms.domain.billingStatement.entity.BillingStatement;
|
||||
import com.mhd.bms.domain.billingStatement.repository.mapper.BillingStatementMapper;
|
||||
import com.mhd.bms.domain.billingStatement.repository.todo.BillingStatementDO;
|
||||
import com.mhd.bms.domain.billingStatement.service.BillingStatementDomainService;
|
||||
import com.mhd.bms.domain.businessDocument.entity.BusinessDocument;
|
||||
import com.mhd.bms.domain.businessDocument.repository.mapper.BusinessDocumentMapper;
|
||||
import com.mhd.bms.domain.businessDocument.repository.po.BusinessDocumentPO;
|
||||
import com.mhd.bms.domain.businessDocument.repository.todo.BusinessDocumentDO;
|
||||
import com.mhd.bms.domain.businessDocument.service.BusinessDocumentDomainService;
|
||||
@@ -30,6 +38,7 @@ import com.mhd.bms.infrastructure.feign.vo.ContractManagePO;
|
||||
import com.mhd.bms.infrastructure.feign.vo.ExpenseAccountPO;
|
||||
import com.mhd.bms.interfaces.assembler.businessDocument.BusinessDocumentAssembler;
|
||||
import com.mhd.bms.interfaces.dto.billingRules.CostCalculationDTO;
|
||||
import com.mhd.bms.interfaces.dto.billingStatement.BillingStatementDTO;
|
||||
import com.mhd.bms.interfaces.dto.businessDocument.BusinessDocumentDTO;
|
||||
import com.mhd.common.core.domain.dto.BusinessDataPushDTO;
|
||||
import com.mhd.common.core.domain.po.OrganizationPo;
|
||||
@@ -86,6 +95,14 @@ public class BusinessDocumentApplicationService {
|
||||
private CostCalculationApplicationService costCalculationApplicationService;
|
||||
@Autowired
|
||||
private ISettlementCustomersService settlementCustomersService;
|
||||
@Autowired
|
||||
private BusinessDocumentMapper businessDocumentMapper;
|
||||
@Autowired
|
||||
private BillingStatementMapper billingStatementMapper;
|
||||
@Autowired
|
||||
private IBillManageService billManageService;
|
||||
@Autowired
|
||||
private IBillDetailService billDetailService;
|
||||
|
||||
|
||||
/**
|
||||
@@ -202,6 +219,112 @@ public class BusinessDocumentApplicationService {
|
||||
return businessDocumentDomainService.insert(businessDocumentDO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean manageAddFee(BusinessDocumentDO businessDocumentDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
//先设置组织信息,因为handleDate方法中需要使用topOrganizationId
|
||||
businessDocumentDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
businessDocumentDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
businessDocumentDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
businessDocumentDO.setCreateBy(userPo.getUserId());
|
||||
businessDocumentDO.setCreateByName(userPo.getUserName());
|
||||
//校验使用的表单是否必填校验
|
||||
checkDoucumentType(businessDocumentDO);
|
||||
//处理数据
|
||||
handleDate(businessDocumentDO);
|
||||
businessDocumentDO.setDataSources(2);
|
||||
businessDocumentDO.setBusinessFlow(OrderSequence.getOrderCode("LS"));
|
||||
//调用费用计算,计算费用金额进行保存
|
||||
CostCalculationDTO costCalculationDTO = new CostCalculationDTO();
|
||||
costCalculationDTO.setOriginalBusinessNum(businessDocumentDO.getOriginalBusinessNum());
|
||||
costCalculationDTO.setContractNumber(businessDocumentDO.getContractNumber());
|
||||
costCalculationDTO.setFormJson(businessDocumentDO.getDocumentFormJson());
|
||||
costCalculationDTO.setSubjectCode(StringUtils.isEmpty(businessDocumentDO.getSecondSubjectCode()) ? businessDocumentDO.getFirstSubjectCode():businessDocumentDO.getSecondSubjectCode());
|
||||
costCalculationDTO.setDocumentTypeCode(businessDocumentDO.getDocumentTypeCode());
|
||||
costCalculationDTO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
costCalculationDTO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
costCalculationDTO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
BillingCostPo billingCostPo = costCalculationApplicationService.costCalculation(costCalculationDTO);
|
||||
businessDocumentDO.setEstimatedCost(billingCostPo.getComputationalCost());
|
||||
BillingRulesPO billingRulesPO = billingCostPo.getBillingRulesPO();
|
||||
List<BillingParamsPO> billingParamsPOList = billingRulesPO.getBillingParamsPOList();
|
||||
if (ObjectUtil.isNotNull(billingParamsPOList)&&billingParamsPOList.size()>0) {
|
||||
BillingParamsPO billingParamsPO = billingParamsPOList.get(0);
|
||||
String billingParamsJson = billingParamsPO.getBillingParamsJson();
|
||||
String preSetRules = billingParamsPO.getPreSetRules();
|
||||
String documentFormJson = businessDocumentDO.getDocumentFormJson();
|
||||
JSONObject paramObj = JSONObject.parseObject(documentFormJson);
|
||||
List<BillingParamsEntity> billingParamsEntityList = JSON.parseArray(billingParamsJson, BillingParamsEntity.class);
|
||||
for (BillingParamsEntity billingParamsEntity : billingParamsEntityList) {
|
||||
String isFee = billingParamsEntity.getIsFee();
|
||||
String fields = billingParamsEntity.getFields();
|
||||
// 安全获取值并转 BigDecimal(不会报错)
|
||||
BigDecimal value = getSafeBigDecimal(paramObj, fields);
|
||||
|
||||
if ("1".equals(isFee)) {
|
||||
businessDocumentDO.setBillingUnitPrice(value.setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
} else {
|
||||
businessDocumentDO.setBillingNum(value.setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||
}
|
||||
}
|
||||
}
|
||||
BusinessDocument businessDocument = businessDocumentDomainService.insertRetrun(businessDocumentDO);
|
||||
BusinessDocumentDTO businessDocumentDTO = new BusinessDocumentDTO();
|
||||
businessDocumentDTO.setBusinessDocumentIds(businessDocument.getBusinessDocumentId().toString());
|
||||
businessDocumentDTO.setAuditOperation(1);
|
||||
takeEffectByIds(businessDocumentDTO);
|
||||
auditByIds(businessDocumentDTO);
|
||||
List<BillingStatement> billingStatements = billingStatementMapper.selectList(new LambdaQueryWrapper<BillingStatement>()
|
||||
.eq(BillingStatement::getBusinessDocumentId, businessDocument.getBusinessDocumentId())
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
BillingStatement billingStatement = null;
|
||||
if (ObjectUtil.isNotNull(billingStatements)&&billingStatements.size()>0) {
|
||||
billingStatement = billingStatements.get(0);
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(billingStatement.getBillingStatementId().toString());
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
billingStatementDomainService.reviewBilling(billingStatementDTO);
|
||||
}
|
||||
|
||||
BillManage billManage = billManageService.getById(businessDocumentDO.getBillManageId());
|
||||
BillDetail billDetail = new BillDetail();
|
||||
billDetail.setBillManageId(businessDocumentDO.getBillManageId());
|
||||
billDetail.setBillNumber(billManage.getBillNumber());
|
||||
billDetail.setBillingStatementId(billingStatement.getBillingStatementId());
|
||||
billDetail.setBillingFlow(billingStatement.getBillingFlow());
|
||||
billDetail.setOrganizationId(billManage.getOrganizationId());
|
||||
billDetail.setOrganizationName(billManage.getOrganizationName());
|
||||
billDetail.setTopOrganizationId(billManage.getTopOrganizationId());
|
||||
billDetail.setCreateBy(userPo.getUserId());
|
||||
billDetail.setCreateByName(userPo.getUserName());
|
||||
billDetail.setCreateTime(new Date());
|
||||
billDetail.setDelFlag(1);
|
||||
billDetail.setBillingTotalAmount(billingStatement.getBillingAmount());
|
||||
billDetail.setBillingDiscountAmount(BigDecimal.ZERO);
|
||||
billDetail.setBillingAmount(billingStatement.getBillingAmount());
|
||||
billDetail.setBillType(1);
|
||||
billDetail.setBillingExpectedAmount(BigDecimal.ZERO);
|
||||
billDetail.setFeeType(billingStatement.getServiceItemsName());
|
||||
billDetail.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billDetail.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billDetail.setSettlementCurrency(billingStatement.getSettlementCurrency());
|
||||
billDetail.setTaxAmount(billingStatement.getTaxAmount());
|
||||
billDetail.setTaxFreeFee(billingStatement.getTaxFreeFee());
|
||||
billDetail.setTaxRate(billingStatement.getTaxRate());
|
||||
billDetailService.save(billDetail);
|
||||
BigDecimal billAmount = billManage.getBillAmount();
|
||||
BigDecimal amount = billAmount.add(billDetail.getBillingAmount());
|
||||
billManage.setBillAmount(amount);
|
||||
billManage.setBillTotalAmount(amount);
|
||||
billManageService.updateById(billManage);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 从 JSONObject 安全获取 BigDecimal,支持:
|
||||
* 数字、整数字符串、小数字符串、null、空字符串
|
||||
@@ -484,7 +607,7 @@ public class BusinessDocumentApplicationService {
|
||||
if(businessDocumentDO.getBelongModuleCode().equals(BelongModuleCode.WMS.getCode())){
|
||||
contractType = 1;
|
||||
}
|
||||
AjaxResult ajaxResult = systemServiceFeign.getInfoByCustomerAndOrganizationId(businessDocumentDO.getSettlementCustomersCode(),contractType,businessDocumentDO.getTopOrganizationId(),businessDocumentDO.getOrganizationId());
|
||||
AjaxResult ajaxResult = systemServiceFeign.getInfoByCustomerAndSecondSubjectCode(businessDocumentDO.getSettlementCustomersCode(),contractType,businessDocumentDO.getFirstSubjectCode(),businessDocumentDO.getTopOrganizationId(),businessDocumentDO.getOrganizationId());
|
||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
throw new ServiceException("合同信息未找到");
|
||||
}
|
||||
|
||||
+2
-2
@@ -675,8 +675,8 @@ public class BillingStatementDomainService {
|
||||
billingStatementDO.setSettlementCustomersCode(billManagePO.getSettlementCustomersCode());
|
||||
billingStatementDO.setBelongModuleCode(billManagePO.getBelongModuleCode());
|
||||
billingStatementDO.setAccountExpenseType(billManagePO.getBillType());
|
||||
billingStatementDO.setCycleBeginTime(billManagePO.getCycleBeginTime());
|
||||
billingStatementDO.setCycleEndTime(billManagePO.getCycleEndTime());
|
||||
// billingStatementDO.setCycleBeginTime(billManagePO.getCycleBeginTime());
|
||||
// billingStatementDO.setCycleEndTime(billManagePO.getCycleEndTime());
|
||||
billingStatementDO.setBillingState(2);
|
||||
startPage();
|
||||
return billingStatementService.queryList(billingStatementDO);
|
||||
|
||||
+2
@@ -218,4 +218,6 @@ public class BusinessDocumentDO extends BaseVOEntity{
|
||||
private BigDecimal billingUnitPrice;
|
||||
@ApiModelProperty("nc科目编码")
|
||||
private String ncSubjectCode;
|
||||
|
||||
private Long billManageId;
|
||||
}
|
||||
+2
@@ -213,4 +213,6 @@ public class BusinessDocumentDTO extends BaseVOEntity{
|
||||
private String paymentAccountId;
|
||||
@ApiModelProperty("收款帐户名称")
|
||||
private String paymentAccountName;
|
||||
|
||||
private Long billManageId;
|
||||
}
|
||||
@@ -79,6 +79,25 @@ public class BusinessDocumentApi extends BaseController{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存业务单据
|
||||
*/
|
||||
@ApiOperation("账单添加费用")
|
||||
@PostMapping("/manageAddFee")
|
||||
public AjaxResult manageAddFee(@RequestBody BusinessDocumentDTO businessDocumentDTO)
|
||||
{
|
||||
try {
|
||||
//转换实体
|
||||
BusinessDocumentDO businessDocumentDO = businessDocumentAssembler.toDO(businessDocumentDTO);
|
||||
return toAjax(businessDocumentApplicationService.manageAddFee(businessDocumentDO));
|
||||
} catch (ServiceException e) {
|
||||
return AjaxResult.error(e.getMessage());
|
||||
} catch (Exception e){
|
||||
return AjaxResult.error("保存业务单据失败:" + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 保存业务单据
|
||||
|
||||
+72
-13
@@ -25,6 +25,8 @@ import com.mhd.oms.domain.gwLog.entity.GwLog;
|
||||
import com.mhd.oms.domain.gwLog.repository.mapper.GwLogMapper;
|
||||
import com.mhd.oms.domain.documentPushMaterialRecord.entity.DocumentPushMaterialRecord;
|
||||
import com.mhd.oms.domain.documentPushMaterialRecord.repository.mapper.DocumentPushMaterialRecordMapper;
|
||||
import com.mhd.oms.domain.erpCountry.entity.ErpCountry;
|
||||
import com.mhd.oms.domain.erpCountry.repository.mapper.ErpCountryMapper;
|
||||
import com.mhd.oms.interfaces.dto.businessDocumentAddressMulti.BusinessAuditDTO;
|
||||
import com.mhd.oms.interfaces.dto.businessDocumentOrder.BusinessDocumentOrderDTO;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
@@ -42,6 +44,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@@ -93,6 +96,9 @@ public class BusinessDocumentOrderApplicationService {
|
||||
@Resource
|
||||
private DocumentPushMaterialRecordMapper documentPushMaterialRecordMapper;
|
||||
|
||||
@Resource
|
||||
private ErpCountryMapper erpCountryMapper;
|
||||
|
||||
/**
|
||||
* 分页查询【请填写功能名称】列表
|
||||
*/
|
||||
@@ -246,6 +252,10 @@ public class BusinessDocumentOrderApplicationService {
|
||||
body.put("goodsType", goodsType != null ? goodsType : "");
|
||||
body.put("ieFlag", order.getIeType() != null ? order.getIeType() : "");
|
||||
body.put("corpCode", corpCode != null ? corpCode : "");
|
||||
// 启运/运抵国地区(收货地→ErpCountry表)
|
||||
body.put("stshipTrsarvNatcd", lookupErpCountryCode(order.getUnloadAreaId(), order.getUnloadName()));
|
||||
// 贸易国地区(发货地→ErpCountry表)
|
||||
body.put("tradeAreaCode", lookupErpCountryCode(order.getLoadingAreaId(), order.getLoadingName()));
|
||||
|
||||
List<Map<String, Object>> billList = new ArrayList<>();
|
||||
if (cargoList != null && !cargoList.isEmpty()) {
|
||||
@@ -257,28 +267,53 @@ public class BusinessDocumentOrderApplicationService {
|
||||
billMap.put("packNo", cargo.getCargoNum() != null ? cargo.getCargoNum() : "");
|
||||
billMap.put("erpQty", cargo.getCargoNum() != null ? cargo.getCargoNum() : "");
|
||||
|
||||
// 查询物料基础信息,计算净重和毛重
|
||||
// 查询物料基础信息
|
||||
MaterialBaseInfoPO material = null;
|
||||
if (cargo.getMaterialBaseInfoId() != null) {
|
||||
MaterialBaseInfoPO material = reservationStockInOrderMapper.getinfo(cargo.getMaterialBaseInfoId());
|
||||
if (material != null && cargo.getCargoNum() != null) {
|
||||
if (material.getWeightLimit() != null) {
|
||||
billMap.put("netWt", material.getWeightLimit().multiply(cargo.getCargoNum()));
|
||||
} else {
|
||||
billMap.put("netWt", "");
|
||||
}
|
||||
if (material.getGrossWeight() != null) {
|
||||
billMap.put("grossWt", material.getGrossWeight().multiply(cargo.getCargoNum()));
|
||||
} else {
|
||||
billMap.put("grossWt", "");
|
||||
}
|
||||
material = reservationStockInOrderMapper.getinfo(cargo.getMaterialBaseInfoId());
|
||||
}
|
||||
if (material != null) {
|
||||
// 净重和毛重
|
||||
if (cargo.getCargoNum() != null) {
|
||||
billMap.put("netWt", material.getWeightLimit() != null
|
||||
? material.getWeightLimit().multiply(cargo.getCargoNum()) : "");
|
||||
billMap.put("grossWt", material.getGrossWeight() != null
|
||||
? material.getGrossWeight().multiply(cargo.getCargoNum()) : "");
|
||||
} else {
|
||||
billMap.put("netWt", "");
|
||||
billMap.put("grossWt", "");
|
||||
}
|
||||
// 货物名称
|
||||
billMap.put("goodsName", material.getMaterialName() != null ? material.getMaterialName() : "");
|
||||
// 成交单位(申报单位)
|
||||
billMap.put("gUnit", material.getDeclarationUnit() != null ? material.getDeclarationUnit() : "");
|
||||
// 币制
|
||||
billMap.put("currency", material.getCurrency() != null ? material.getCurrency() : "");
|
||||
// 原产国(countryCode)
|
||||
billMap.put("countryCode", material.getOriginCountry() != null ? material.getOriginCountry() : "");
|
||||
// 单价(企业单价)
|
||||
BigDecimal unitPrice = material.getUnitPrice();
|
||||
billMap.put("unitPrice", unitPrice != null ? unitPrice : "");
|
||||
// 总价(entTotal = 成交数量 × 单价)
|
||||
if (unitPrice != null && cargo.getCargoNum() != null) {
|
||||
billMap.put("entTotal", unitPrice.multiply(cargo.getCargoNum()));
|
||||
} else {
|
||||
billMap.put("entTotal", "");
|
||||
}
|
||||
} else {
|
||||
billMap.put("netWt", "");
|
||||
billMap.put("grossWt", "");
|
||||
billMap.put("goodsName", "");
|
||||
billMap.put("gUnit", "");
|
||||
billMap.put("currency", "");
|
||||
billMap.put("countryCode", "");
|
||||
billMap.put("unitPrice", "");
|
||||
billMap.put("entTotal", "");
|
||||
}
|
||||
// 最终目的国(收货地)
|
||||
billMap.put("destinationCountry", order.getUnloadName() != null ? order.getUnloadName() : "");
|
||||
// 境内货源地(发货地)
|
||||
billMap.put("domesticSourcePlace", order.getLoadingName() != null ? order.getLoadingName() : "");
|
||||
billList.add(billMap);
|
||||
}
|
||||
}
|
||||
@@ -401,6 +436,30 @@ public class BusinessDocumentOrderApplicationService {
|
||||
|
||||
}
|
||||
|
||||
/** 根据区域ID或名称查ErpCountry表获取国别编码 */
|
||||
private String lookupErpCountryCode(String areaId, String areaName) {
|
||||
if (areaId == null && areaName == null) return "";
|
||||
try {
|
||||
LambdaQueryWrapper<ErpCountry> qw = new LambdaQueryWrapper<>();
|
||||
qw.eq(ErpCountry::getDelFlag, 1);
|
||||
if (areaId != null) {
|
||||
qw.eq(ErpCountry::getErpCountryCode, areaId);
|
||||
}
|
||||
List<ErpCountry> list = erpCountryMapper.selectList(qw);
|
||||
if (!list.isEmpty()) return list.get(0).getErpCountryCode();
|
||||
// 按名称模糊匹配
|
||||
if (areaName != null) {
|
||||
LambdaQueryWrapper<ErpCountry> qw2 = new LambdaQueryWrapper<>();
|
||||
qw2.eq(ErpCountry::getDelFlag, 1).like(ErpCountry::getErpCountryName, areaName);
|
||||
List<ErpCountry> list2 = erpCountryMapper.selectList(qw2);
|
||||
if (!list2.isEmpty()) return list2.get(0).getErpCountryCode();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("查ErpCountry失败 areaId={} areaName={}", areaId, areaName, e);
|
||||
}
|
||||
return areaId != null ? areaId : "";
|
||||
}
|
||||
|
||||
|
||||
private void updatePushStatus(Long id, Integer pushStatus, Date pushTime, String pushBy, String pushByName) {
|
||||
try {
|
||||
|
||||
+12
@@ -819,6 +819,18 @@ public class OrderWithMaterialDTO {
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty("启运/运抵国地区")
|
||||
private String stshipTrsarvNatcd;
|
||||
|
||||
@ApiModelProperty("贸易国地区")
|
||||
private String tradeAreaCode;
|
||||
|
||||
@ApiModelProperty("企业总价")
|
||||
private BigDecimal entTotal;
|
||||
|
||||
@ApiModelProperty("原产国(与originCountry同源)")
|
||||
private String countryCode;
|
||||
|
||||
@ApiModelProperty("删改单申请类型:0-改单 1-删除 2-作废")
|
||||
private Integer reviseApplyType;
|
||||
|
||||
|
||||
+61
@@ -13,11 +13,16 @@ import com.mhd.oms.domain.businessDocumentCargoMulti.entity.BusinessDocumentCarg
|
||||
import com.mhd.oms.domain.businessDocumentCargoMulti.repository.mapper.BusinessDocumentCargoMultiMapper;
|
||||
import com.mhd.oms.domain.businessDocumentOrder.repository.po.BusinessDocumentOrderPO;
|
||||
import com.mhd.oms.domain.businessDocumentOrder.repository.todo.BusinessDocumentOrderDO;
|
||||
import com.mhd.oms.domain.erpCountry.entity.ErpCountry;
|
||||
import com.mhd.oms.domain.erpCountry.repository.mapper.ErpCountryMapper;
|
||||
import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper;
|
||||
import com.mhd.oms.domain.reservationStockInOrder.repository.po.MaterialBaseInfoPO;
|
||||
import com.mhd.oms.interfaces.assembler.businessDocumentOrder.BusinessDocumentOrderAssembler;
|
||||
import com.mhd.oms.interfaces.dto.businessDocumentOrder.BusinessDocumentOrderDTO;
|
||||
import com.mhd.oms.interfaces.dto.originalImportExportDocument.OrderWithMaterialDTO;
|
||||
import com.mhd.system.api.WmsServiceFeign;
|
||||
import com.mhd.system.api.domain.MaterialInfoDTO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -29,6 +34,8 @@ import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.reflections.Reflections.log;
|
||||
|
||||
@Api(tags = "进出口原始单证")
|
||||
@RestController
|
||||
@RequestMapping("/OriginalImportExportDocumentApi")
|
||||
@@ -43,6 +50,12 @@ public class OriginalImportExportDocumentApi extends BaseController {
|
||||
@Resource
|
||||
private BusinessDocumentOrderAssembler businessDocumentOrderAssembler;
|
||||
|
||||
@Resource
|
||||
private ErpCountryMapper erpCountryMapper;
|
||||
|
||||
@Resource
|
||||
private ReservationStockInOrderMapper reservationStockInOrderMapper;
|
||||
|
||||
@Resource
|
||||
private WmsServiceFeign wmsServiceFeign;
|
||||
|
||||
@@ -117,6 +130,7 @@ public class OriginalImportExportDocumentApi extends BaseController {
|
||||
Page<BusinessDocumentOrderPO> page = (Page<BusinessDocumentOrderPO>) orderList;
|
||||
|
||||
List<OrderWithMaterialDTO> resultList = convertToOrderWithMaterialList(orderList);
|
||||
populateTradeFields(resultList, orderList);
|
||||
//return getDataTable(resultList);
|
||||
TableDataInfo tableDataInfo = new TableDataInfo();
|
||||
tableDataInfo.setData(resultList);
|
||||
@@ -185,6 +199,53 @@ public class OriginalImportExportDocumentApi extends BaseController {
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/** 填充贸易相关字段:启运/运抵国地区、贸易国地区、企业总价、原产国 */
|
||||
private void populateTradeFields(List<OrderWithMaterialDTO> resultList, List<BusinessDocumentOrderPO> orderList) {
|
||||
for (int i = 0; i < resultList.size(); i++) {
|
||||
OrderWithMaterialDTO dto = resultList.get(i);
|
||||
BusinessDocumentOrderPO order = orderList.get(i);
|
||||
|
||||
// 启运/运抵国地区(收货地 → ErpCountry)
|
||||
dto.setStshipTrsarvNatcd(lookupCountryCode(order.getUnloadAreaId(), order.getUnloadName()));
|
||||
// 贸易国地区(发货地 → ErpCountry)
|
||||
dto.setTradeAreaCode(lookupCountryCode(order.getLoadingAreaId(), order.getLoadingName()));
|
||||
|
||||
// 原产国(直接取originCountry)
|
||||
dto.setCountryCode(dto.getOriginCountry());
|
||||
|
||||
// 企业总价 = 数量 × 单价
|
||||
List<BusinessDocumentCargoMulti> cargoList = order.getBusinessDocumentCargoMultiList();
|
||||
if (cargoList != null && !cargoList.isEmpty()) {
|
||||
BusinessDocumentCargoMulti cargo = cargoList.get(0);
|
||||
if (cargo.getMaterialBaseInfoId() != null) {
|
||||
MaterialBaseInfoPO material = reservationStockInOrderMapper.getinfo(cargo.getMaterialBaseInfoId());
|
||||
if (material != null && material.getUnitPrice() != null && cargo.getCargoNum() != null) {
|
||||
dto.setEntTotal(material.getUnitPrice().multiply(cargo.getCargoNum()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** 查 ErpCountry 表获取国别编码 */
|
||||
private String lookupCountryCode(String areaId, String areaName) {
|
||||
if (areaId == null && areaName == null) return "";
|
||||
try {
|
||||
LambdaQueryWrapper<ErpCountry> qw = new LambdaQueryWrapper<>();
|
||||
qw.eq(ErpCountry::getDelFlag, 1);
|
||||
if (areaId != null) qw.eq(ErpCountry::getErpCountryCode, areaId);
|
||||
List<ErpCountry> list = erpCountryMapper.selectList(qw);
|
||||
if (!list.isEmpty()) return list.get(0).getErpCountryCode();
|
||||
if (areaName != null) {
|
||||
LambdaQueryWrapper<ErpCountry> qw2 = new LambdaQueryWrapper<>();
|
||||
qw2.eq(ErpCountry::getDelFlag, 1).like(ErpCountry::getErpCountryName, areaName);
|
||||
List<ErpCountry> list2 = erpCountryMapper.selectList(qw2);
|
||||
if (!list2.isEmpty()) return list2.get(0).getErpCountryCode();
|
||||
}
|
||||
} catch (Exception e) { log.warn("查ErpCountry失败", e); }
|
||||
return areaId != null ? areaId : "";
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("批量推送")
|
||||
@PostMapping("/batchPushForReviseApply")
|
||||
|
||||
+11
@@ -336,6 +336,17 @@ public class ReviewOrderApplicationService {
|
||||
syncOutOrderCheckQtyByReviewConfirm(reviewOrderId, loginUser);
|
||||
// 与出库单「复核确认」一致:复核数量与拣货数量不一致时生成复核异常单(FHYC)
|
||||
genOutOrderAbnormalAfterReviewConfirm(reviewOrderId);
|
||||
// 校验:复核确认前,已复核数量必须等于计划数量
|
||||
List<ReviewMaterialDetailPO> details = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId);
|
||||
if (!CollectionUtils.isEmpty(details)) {
|
||||
for (ReviewMaterialDetailPO detail : details) {
|
||||
BigDecimal reviewed = nz(detail.getReviewedQty());
|
||||
BigDecimal plan = nz(detail.getMaterialPlanQty());
|
||||
if (reviewed.compareTo(plan) != 0) {
|
||||
throw new ServiceException("该物料已复核数量不等于计划数量");
|
||||
}
|
||||
}
|
||||
}
|
||||
ReviewOrder order = reviewOrderMapper.selectById(reviewOrderId);
|
||||
if (order == null) {
|
||||
continue;
|
||||
|
||||
+33
-2
@@ -38,6 +38,8 @@ import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoSe
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper;
|
||||
import com.mhd.wms.domain.receiptMaterialDetail.entity.ReceiptMaterialDetail;
|
||||
import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService;
|
||||
import com.mhd.wms.domain.receiptOrderAccount.entity.ReceiptOrderAccount;
|
||||
import com.mhd.wms.domain.receiptOrderAccount.repository.facade.IReceiptOrderAccountService;
|
||||
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
|
||||
@@ -107,6 +109,8 @@ public class StockInOrderApplicationService {
|
||||
@Autowired
|
||||
private IStockReceiptOrderService stockReceiptOrderService;
|
||||
@Autowired
|
||||
private IReceiptMaterialDetailService receiptMaterialDetailService;
|
||||
@Autowired
|
||||
private IStockOutOrderService stockOutOrderService;
|
||||
@Autowired
|
||||
private IHandoverTaskOrderService handoverTaskOrderService;
|
||||
@@ -452,9 +456,36 @@ public class StockInOrderApplicationService {
|
||||
throw new ServiceException("入库单不存在,入库单ID:" + inOrderId);
|
||||
}
|
||||
// 只有已创建状态(status = 1)的入库单可以删除
|
||||
if (stockInOrderPO.getStatus() == null || !stockInOrderPO.getStatus().equals(1)) {
|
||||
throw new ServiceException("只有已创建状态的入库单可以删除,入库单号:" + stockInOrderPO.getInOrderNumber() + ",当前状态:" + getStatusName(stockInOrderPO.getStatus()));
|
||||
// if (stockInOrderPO.getStatus() == null || !stockInOrderPO.getStatus().equals(1)) {
|
||||
// throw new ServiceException("只有已创建状态的入库单可以删除,入库单号:" + stockInOrderPO.getInOrderNumber() + ",当前状态:" + getStatusName(stockInOrderPO.getStatus()));
|
||||
// }
|
||||
List<InMaterialDetail> list = inMaterialDetailService.list(new LambdaQueryWrapper<InMaterialDetail>()
|
||||
.eq(InMaterialDetail::getInOrderNumber, stockInOrderPO.getInOrderNumber())
|
||||
.eq(InMaterialDetail::getDelFlag, 1));
|
||||
if (list != null && list.size() > 0) {
|
||||
for (InMaterialDetail inMaterialDetail : list) {
|
||||
inMaterialDetail.setDelFlag(2);
|
||||
inMaterialDetailService.updateById(inMaterialDetail);
|
||||
}
|
||||
}
|
||||
|
||||
StockReceiptOrder stockReceiptOrder = stockReceiptOrderService.getOne(new LambdaQueryWrapper<StockReceiptOrder>()
|
||||
.eq(StockReceiptOrder::getInOrderNumber, stockInOrderPO.getInOrderNumber())
|
||||
.eq(StockReceiptOrder::getDelFlag, 1),false);
|
||||
if (stockReceiptOrder != null) {
|
||||
stockReceiptOrder.setDelFlag(2);
|
||||
stockReceiptOrderService.updateById(stockReceiptOrder);
|
||||
List<ReceiptMaterialDetail> list1 = receiptMaterialDetailService.list(new LambdaQueryWrapper<ReceiptMaterialDetail>()
|
||||
.eq(ReceiptMaterialDetail::getReceiptOrderNumber, stockReceiptOrder.getReceiptOrderNumber())
|
||||
.eq(ReceiptMaterialDetail::getDelFlag, 1));
|
||||
if (list1 != null && list1.size() > 0) {
|
||||
for (ReceiptMaterialDetail receiptMaterialDetail : list1) {
|
||||
receiptMaterialDetail.setDelFlag(2);
|
||||
receiptMaterialDetailService.updateById(receiptMaterialDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return stockInOrderDomainService.delete(inOrderIds);
|
||||
|
||||
+4
@@ -229,4 +229,8 @@ public class MaterialInventoryPO extends MaterialBasePO {
|
||||
@ApiModelProperty("LOT编号")
|
||||
@Excel(name = "LOT编号")
|
||||
private String lotNumber;
|
||||
|
||||
@ApiModelProperty("规格型号")
|
||||
@Excel(name = "规格型号")
|
||||
private String specificationModel;
|
||||
}
|
||||
+9
@@ -250,4 +250,13 @@ public class MaterialInventoryDO extends MaterialBaseDO {
|
||||
private String expiryDateStr;
|
||||
private String productionDateStr;
|
||||
private String updateTimeStr;
|
||||
|
||||
private String expiryDateStart;
|
||||
private String expiryDateEnd;
|
||||
|
||||
private String productionDateStart;
|
||||
private String productionDateEnd;
|
||||
|
||||
private String updateTimeStart;
|
||||
private String updateTimeEnd;
|
||||
}
|
||||
+3
@@ -125,6 +125,9 @@ public class PickingOrderPO extends StockOutOrderBasePO {
|
||||
@ApiModelProperty("出库单号")
|
||||
@Excel(name = "出库单号")
|
||||
private String outOrderNumber;
|
||||
@ApiModelProperty("出库单id")
|
||||
@Excel(name = "出库单id")
|
||||
private String outOrderId;
|
||||
|
||||
@ApiModelProperty("业务单号")
|
||||
@Excel(name = "业务单号")
|
||||
|
||||
+3
@@ -405,4 +405,7 @@ public class ShelfMaterialDetailPO extends BaseVOEntity {
|
||||
private BigDecimal erpPriceGw;
|
||||
//申报总价
|
||||
private BigDecimal amountGw;
|
||||
|
||||
@ApiModelProperty("规格型号")
|
||||
private String specificationModel;
|
||||
}
|
||||
+11
-4
@@ -27,6 +27,7 @@ import com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
|
||||
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.mapper.StockOutOrderMapper;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.todo.StockOutOrderDO;
|
||||
import com.mhd.wms.domain.stockOutOrder.service.StockOutOrderDomainService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -58,6 +59,8 @@ public class ExcelParseService {
|
||||
private MaterialBaseInfoApplicationService materialBaseInfoService;
|
||||
@Autowired
|
||||
private StockOutOrderDomainService stockOutOrderDomainService;
|
||||
@Autowired
|
||||
private StockOutOrderMapper stockOutOrderMapper;
|
||||
@Resource
|
||||
private UserServiceFeign userServiceFeign;
|
||||
/**
|
||||
@@ -111,6 +114,10 @@ public class ExcelParseService {
|
||||
stockOutOrder.setWarehouseName(warehouseName);
|
||||
stockOutOrder.setWarehouseCode(warehouseCode);
|
||||
stockOutOrder.setWarehouseId(warehouseId);
|
||||
stockOutOrder.setSalesmanId(String.valueOf(loginUser.getUserPo().getUserId()));
|
||||
stockOutOrder.setSalesmanName(loginUser.getUserPo().getUserName());
|
||||
String settlementCurrency = stockOutOrderMapper.getSettlementCurrency(shipperId);
|
||||
stockOutOrder.setSettlementCurrency(settlementCurrency);
|
||||
initDict(stockOutOrder);
|
||||
if (loginUser != null){
|
||||
stockOutOrder.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
@@ -236,17 +243,17 @@ public class ExcelParseService {
|
||||
errorMsg.append(validateShipperMaterialDetails(stockOutOrder));
|
||||
if (stockOutOrder.getMaterialDetailList() == null || stockOutOrder.getMaterialDetailList().isEmpty()) errorMsg.append("物料明细列表不能为空或匹配不上物料信息; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getTo())) errorMsg.append("To不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getEntrustNo())) errorMsg.append("委托单号不能为空; ");
|
||||
// if (StringUtils.isEmpty(stockOutOrder.getEntrustNo())) errorMsg.append("委托单号不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getCarrier())) errorMsg.append("承运商不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getTransportModeCode())) errorMsg.append("运输方式不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getSupervisionModeCode())) errorMsg.append("监督方式不能为空; ");
|
||||
// if (StringUtils.isEmpty(stockOutOrder.getContainerNo())) errorMsg.append("柜号不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getDepartureArrivalCountry())) errorMsg.append("出发/到达国家不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getManufacturer())) errorMsg.append("制造商不能为空; ");
|
||||
// if (StringUtils.isEmpty(stockOutOrder.getManufacturer())) errorMsg.append("制造商不能为空; ");
|
||||
// if (ObjectUtil.isEmpty(stockOutOrder.getOutboundDate())) errorMsg.append("出仓日期不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getContactPerson())) errorMsg.append("联系人不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getTel())) errorMsg.append("Tel不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getFax())) errorMsg.append("Fax不能为空; ");
|
||||
// if (StringUtils.isEmpty(stockOutOrder.getTel())) errorMsg.append("Tel不能为空; ");
|
||||
// if (StringUtils.isEmpty(stockOutOrder.getFax())) errorMsg.append("Fax不能为空; ");
|
||||
if (ObjectUtil.isEmpty(stockOutOrder.getShipperId())) errorMsg.append("客户名称不能为空或匹配不上客户信息; ");
|
||||
//if (StringUtils.isEmpty(stockOutOrder.getNeedDeclareFlag())) errorMsg.append("是否需要申报不能为空; ");
|
||||
if (StringUtils.isEmpty(stockOutOrder.getDeclareCustoms())) errorMsg.append("申报地关区不能为空; ");
|
||||
|
||||
+6
-1
@@ -34,7 +34,12 @@ public class HeaderListener extends AnalysisEventListener<Map<Integer, Object>>
|
||||
// 将Map转换为List再转为数组
|
||||
List<String> dataList = mapToList(stringData);
|
||||
Object[] rowData = listToArray(dataList);
|
||||
|
||||
String stringValue1 = getStringValue(rowData[0]);
|
||||
if (stringValue1 != null && !stringValue1.isEmpty()) {
|
||||
if ("备注:".equals(stringValue1)) {
|
||||
stockOutOrder.setRemark(getStringValue(rowData[1]));
|
||||
}
|
||||
}
|
||||
// 根据行号提取对应信息
|
||||
switch (rowNum) {
|
||||
case 4: // 第5行:to、仓库联系人、车型及车牌、委托编码
|
||||
|
||||
+2
@@ -37,6 +37,8 @@ public interface StockOutOrderMapper extends BaseMapper<StockOutOrder> {
|
||||
|
||||
public String getUserNcCode(@Param("id") Long id);
|
||||
|
||||
public String getSettlementCurrency(@Param("id") Long id);
|
||||
|
||||
public Long getKcId(@Param("lotNo") String lotNo);
|
||||
|
||||
public String getInOrderNumber(@Param("id") Long id);
|
||||
|
||||
+9
@@ -194,4 +194,13 @@ public class MaterialInventoryDTO extends MaterialBaseDTO {
|
||||
private String productionDateStr;
|
||||
private String updateTimeStr;
|
||||
|
||||
private String expiryDateStart;
|
||||
private String expiryDateEnd;
|
||||
|
||||
private String productionDateStart;
|
||||
private String productionDateEnd;
|
||||
|
||||
private String updateTimeStart;
|
||||
private String updateTimeEnd;
|
||||
|
||||
}
|
||||
@@ -99,6 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
b.common,
|
||||
b.pack_id,
|
||||
b.pack_code,
|
||||
b.SPECIFICATION_MODEL,
|
||||
b.pack_name
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -64,6 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="barCode" column="inv_bar_code" />
|
||||
<result property="inOrderNumber" column="in_order_number" />
|
||||
<result property="lotNumber" column="lot_number" />
|
||||
<result property="specificationModel" column="specification_model" />
|
||||
</resultMap>
|
||||
|
||||
|
||||
@@ -241,6 +242,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="updateTimeStr != null and updateTimeStr != ''">
|
||||
AND TO_CHAR(a.update_time, 'yyyy-MM-dd') = #{updateTimeStr}
|
||||
</if>
|
||||
|
||||
<if test="updateTimeStart != null and updateTimeStart != ''">
|
||||
and a.update_time >= #{updateTimeStart}
|
||||
</if>
|
||||
<if test="updateTimeEnd != null and updateTimeEnd != ''">
|
||||
and a.update_time <![CDATA[ < ]]> DATEADD(DAY, 1, #{updateTimeEnd})
|
||||
</if>
|
||||
<if test="productionDateStart != null and productionDateStart != ''">
|
||||
and a.production_date >= #{productionDateStart}
|
||||
</if>
|
||||
<if test="productionDateEnd != null and productionDateEnd != ''">
|
||||
and a.production_date <![CDATA[ < ]]> DATEADD(DAY, 1, #{productionDateEnd})
|
||||
</if>
|
||||
<if test="expiryDateStart != null and expiryDateStart != ''">
|
||||
and a.expiry_date >= #{expiryDateStart}
|
||||
</if>
|
||||
<if test="expiryDateEnd != null and expiryDateEnd != ''">
|
||||
and a.expiry_date <![CDATA[ < ]]> DATEADD(DAY, 1, #{expiryDateEnd})
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<!-- 与 selectMaterialInventoryPo1 相同条件,表别名为 mi(用于 queryListByWl 最新明细子查询) -->
|
||||
|
||||
@@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="pushBy" column="push_by" />
|
||||
<result property="pushByName" column="push_by_name" />
|
||||
<result property="goodsType" column="goods_type" />
|
||||
<result property="outOrderId" column="out_order_id" />
|
||||
</resultMap>
|
||||
|
||||
|
||||
@@ -45,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
a.picking_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.order_number, a.picking_order_number,
|
||||
a.status, a.type, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_name, a.quantity, a.weight_limit, a.volume_limit, a.material_quantity,
|
||||
IFNULL((SELECT SUM(b.picking_quantity) FROM picking_material_detail b WHERE b.picking_order_number = a.picking_order_number AND b.del_flag = 1), 0) AS picking_quantity,
|
||||
a.picking_material_quantity, a.abnormal, a.task_distribution, a.remark, a.create_time, a.create_by, a.create_by_name, a.update_time,
|
||||
a.picking_material_quantity, a.abnormal, a.task_distribution, a.remark, a.create_time, a.create_by, a.create_by_name, a.update_time,b.out_order_id,
|
||||
a.update_by, a.update_by_name, a.del_flag,a.out_order_number, a.business_order_no, a.order_type_code, a.order_type_name, a.priority_level_code, a.priority_level_name
|
||||
,a.push_status,a.push_time,a.push_by,a.push_by_name,
|
||||
(SELECT m.goods_type FROM PICKING_MATERIAL_DETAIL d
|
||||
@@ -144,7 +145,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectPickingOrderPo"/>
|
||||
,b.need_Declare_Flag
|
||||
from picking_order a
|
||||
left join STOCK_OUT_ORDER b ON a.order_number = b.out_Order_number and b.del_flag = 1 and a.del_flag = 1
|
||||
left join STOCK_OUT_ORDER b ON a.order_number = b.out_order_number and b.del_flag = 1 and a.del_flag = 1
|
||||
<where>
|
||||
<include refid="selectPickingOrderPo1"/>
|
||||
</where>
|
||||
|
||||
+270
-184
@@ -84,198 +84,284 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="erpCurrGw" column="erp_curr_gw" />
|
||||
<result property="erpPriceGw" column="erp_price_gw" />
|
||||
<result property="amountGw" column="amount_gw" />
|
||||
<result property="specificationModel" column="SPECIFICATION_MODEL" />
|
||||
</resultMap>
|
||||
|
||||
|
||||
<sql id="selectShelfMaterialDetailPo">
|
||||
select material_detail_id, organization_id, organization_name, top_organization_id, unique_id, shelf_order_number, material_base_info_id, material_code, material_name, bar_code, dimensions, quantity, already_shelves_quantity, shelves_quantity, shelves_status, pack_id, pack_code, pack_name, OMS_IN_MATERIAL_DETAIL,
|
||||
CASE
|
||||
WHEN pack_detail_id IS NULL OR TRIM(pack_detail_id) = '' THEN NULL
|
||||
ELSE CAST(pack_detail_id AS BIGINT)
|
||||
END as pack_detail_id, unit_code,
|
||||
line_num_gw,
|
||||
spec_gw,
|
||||
unit_gw,
|
||||
qty_gw,
|
||||
erp_curr_gw,
|
||||
erp_price_gw,
|
||||
amount_gw,
|
||||
in_order_number_gw,
|
||||
in_line_num_gw,
|
||||
unit_name, unit_number, material_warehouse_control_id, serial_number_manage, quality_inspection_manage, quality_inspection_stage, quality_inspection_rule, quality_inspection_ratio, quality_inspection_term, quality_inspection_results, allow_overcharge, overcharge_ratio, batch_number, material_status_code, material_status_name, distribute_rule_id, distribute_rule_code, distribute_rule_name, container_id, container_code, container_type, container_type_name, warehouse_id, warehouse_code, warehouse_name, storage_section_id, storage_code, storage_name, storage_location_id, storage_location_code, storage_location_name, level, parent_unique_id, in_unique_id, receipt_unique_id, allow_modify, remark, batch_ref_no, sheet_ref_no, box_pallet_no, ext_attr_1, ext_attr_2, production_date, expiry_date, inventory_date, ext_attr_3, ext_attr_4, create_time, create_by, create_by_name, update_time, update_by, update_by_name, del_flag,total_net_weight,total_gross_weight,total_volume,total_area,in_order_number,lot_number,pallet_number,copy_batch,copy_quantity,copy_details from shelf_material_detail
|
||||
select a.material_detail_id,
|
||||
a.organization_id,
|
||||
a.organization_name,
|
||||
a.top_organization_id,
|
||||
a.unique_id,
|
||||
a.shelf_order_number,
|
||||
a.material_base_info_id,
|
||||
a.material_code,
|
||||
a.material_name,
|
||||
a.bar_code,
|
||||
a.dimensions,
|
||||
a.quantity,
|
||||
a.already_shelves_quantity,
|
||||
a.shelves_quantity,
|
||||
a.shelves_status,
|
||||
a.pack_id,
|
||||
a.pack_code,
|
||||
a.pack_name,
|
||||
a.OMS_IN_MATERIAL_DETAIL,
|
||||
CASE
|
||||
WHEN a.pack_detail_id IS NULL OR TRIM(a.pack_detail_id) = '' THEN NULL
|
||||
ELSE CAST(a.pack_detail_id AS BIGINT)
|
||||
END as pack_detail_id,
|
||||
a.unit_code,
|
||||
a.line_num_gw,
|
||||
a.spec_gw,
|
||||
a.unit_gw,
|
||||
a.qty_gw,
|
||||
a.erp_curr_gw,
|
||||
a.erp_price_gw,
|
||||
a.amount_gw,
|
||||
a.in_order_number_gw,
|
||||
a.in_line_num_gw,
|
||||
a.unit_name,
|
||||
a.unit_number,
|
||||
a.material_warehouse_control_id,
|
||||
a.serial_number_manage,
|
||||
a.quality_inspection_manage,
|
||||
a.quality_inspection_stage,
|
||||
a.quality_inspection_rule,
|
||||
a.quality_inspection_ratio,
|
||||
a.quality_inspection_term,
|
||||
a.quality_inspection_results,
|
||||
a.allow_overcharge,
|
||||
a.overcharge_ratio,
|
||||
a.batch_number,
|
||||
a.material_status_code,
|
||||
a.material_status_name,
|
||||
a.distribute_rule_id,
|
||||
a.distribute_rule_code,
|
||||
a.distribute_rule_name,
|
||||
a.container_id,
|
||||
a.container_code,
|
||||
a.container_type,
|
||||
a.container_type_name,
|
||||
a.warehouse_id,
|
||||
a.warehouse_code,
|
||||
a.warehouse_name,
|
||||
a.storage_section_id,
|
||||
a.storage_code,
|
||||
a.storage_name,
|
||||
a.storage_location_id,
|
||||
a.storage_location_code,
|
||||
a.storage_location_name,
|
||||
a.level,
|
||||
a.parent_unique_id,
|
||||
a.in_unique_id,
|
||||
a.receipt_unique_id,
|
||||
a.allow_modify,
|
||||
a.remark,
|
||||
a.batch_ref_no,
|
||||
a.sheet_ref_no,
|
||||
a.box_pallet_no,
|
||||
a.ext_attr_1,
|
||||
a.ext_attr_2,
|
||||
a.production_date,
|
||||
a.expiry_date,
|
||||
a.inventory_date,
|
||||
a.ext_attr_3,
|
||||
a.ext_attr_4,
|
||||
a.create_time,
|
||||
a.create_by,
|
||||
a.create_by_name,
|
||||
a.update_time,
|
||||
a.update_by,
|
||||
a.update_by_name,
|
||||
a.del_flag,
|
||||
a.total_net_weight,
|
||||
a.total_gross_weight,
|
||||
a.total_volume,
|
||||
a.total_area,
|
||||
a.in_order_number,
|
||||
a.lot_number,
|
||||
a.pallet_number,
|
||||
a.copy_batch,
|
||||
a.copy_quantity,
|
||||
a.copy_details,
|
||||
c.SPECIFICATION_MODEL
|
||||
from shelf_material_detail a
|
||||
LEFT JOIN MATERIAL_BASE_INFO c ON a.MATERIAL_BASE_INFO_ID = c.MATERIAL_BASE_INFO_ID AND c.DEL_FLAG = 1
|
||||
</sql>
|
||||
|
||||
<sql id="selectShelfMaterialDetailPo1">
|
||||
<where>
|
||||
<if test="organizationId != null ">
|
||||
and organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="organizationName != null and organizationName != ''">
|
||||
and organization_name like concat('%', #{organizationName}, '%')
|
||||
</if>
|
||||
<if test="topOrganizationId != null ">
|
||||
and top_organization_id = #{topOrganizationId}
|
||||
</if>
|
||||
<if test="uniqueId != null ">
|
||||
and unique_id = #{uniqueId}
|
||||
</if>
|
||||
<if test="shelfOrderNumber != null and shelfOrderNumber != ''">
|
||||
and shelf_order_number = #{shelfOrderNumber}
|
||||
</if>
|
||||
<if test="materialBaseInfoId != null ">
|
||||
and material_base_info_id = #{materialBaseInfoId}
|
||||
</if>
|
||||
<if test="materialCode != null and materialCode != ''">
|
||||
and material_code = #{materialCode}
|
||||
</if>
|
||||
<if test="materialName != null and materialName != ''">
|
||||
and material_name like concat('%', #{materialName}, '%')
|
||||
</if>
|
||||
<if test="barCode != null and barCode != ''">
|
||||
and bar_code = #{barCode}
|
||||
</if>
|
||||
<if test="quantity != null ">
|
||||
and quantity = #{quantity}
|
||||
</if>
|
||||
<if test="shelvesQuantity != null ">
|
||||
and shelves_quantity = #{shelvesQuantity}
|
||||
</if>
|
||||
<if test="alreadyShelvesQuantity != null ">
|
||||
and already_shelves_quantity = #{alreadyShelvesQuantity}
|
||||
</if>
|
||||
<if test="shelvesStatus != null ">
|
||||
and shelves_status = #{shelvesStatus}
|
||||
</if>
|
||||
<if test="packId != null ">
|
||||
and pack_id = #{packId}
|
||||
</if>
|
||||
<if test="packCode != null and packCode != ''">
|
||||
and pack_code = #{packCode}
|
||||
</if>
|
||||
<if test="packName != null and packName != ''">
|
||||
and pack_name like concat('%', #{packName}, '%')
|
||||
</if>
|
||||
<if test="packDetailId != null and packDetailId != ''">
|
||||
and pack_detail_id = #{packDetailId}
|
||||
</if>
|
||||
<if test="unitCode != null and unitCode != ''">
|
||||
and unit_code = #{unitCode}
|
||||
</if>
|
||||
<if test="unitName != null and unitName != ''">
|
||||
and unit_name like concat('%', #{unitName}, '%')
|
||||
</if>
|
||||
<if test="unitNumber != null ">
|
||||
and unit_number = #{unitNumber}
|
||||
</if>
|
||||
<if test="materialWarehouseControlId != null ">
|
||||
and material_warehouse_control_id = #{materialWarehouseControlId}
|
||||
</if>
|
||||
<if test="serialNumberManage != null ">
|
||||
and serial_number_manage = #{serialNumberManage}
|
||||
</if>
|
||||
<if test="qualityInspectionManage != null ">
|
||||
and quality_inspection_manage = #{qualityInspectionManage}
|
||||
</if>
|
||||
<if test="qualityInspectionStage != null ">
|
||||
and quality_inspection_stage = #{qualityInspectionStage}
|
||||
</if>
|
||||
<if test="qualityInspectionRule != null ">
|
||||
and quality_inspection_rule = #{qualityInspectionRule}
|
||||
</if>
|
||||
<if test="qualityInspectionRatio != null ">
|
||||
and quality_inspection_ratio = #{qualityInspectionRatio}
|
||||
</if>
|
||||
<if test="qualityInspectionTerm != null ">
|
||||
and quality_inspection_term = #{qualityInspectionTerm}
|
||||
</if>
|
||||
<if test="qualityInspectionResults != null ">
|
||||
and quality_inspection_results = #{qualityInspectionResults}
|
||||
</if>
|
||||
<if test="allowOvercharge != null ">
|
||||
and allow_overcharge = #{allowOvercharge}
|
||||
</if>
|
||||
<if test="overchargeRatio != null ">
|
||||
and overcharge_ratio = #{overchargeRatio}
|
||||
</if>
|
||||
<if test="batchNumber != null and batchNumber != ''">
|
||||
and batch_number = #{batchNumber}
|
||||
</if>
|
||||
<if test="lotNumber != null and lotNumber != ''">
|
||||
and lot_number = #{lotNumber}
|
||||
</if>
|
||||
<if test="palletNumber != null and palletNumber != ''">
|
||||
and pallet_number like concat('%', #{palletNumber}, '%')
|
||||
</if>
|
||||
<if test="materialStatusCode != null and materialStatusCode != ''">
|
||||
and material_status_code = #{materialStatusCode}
|
||||
</if>
|
||||
<if test="materialStatusName != null and materialStatusName != ''">
|
||||
and material_status_name like concat('%', #{materialStatusName}, '%')
|
||||
</if>
|
||||
<if test="distributeRuleId != null ">
|
||||
and distribute_rule_id = #{distributeRuleId}
|
||||
</if>
|
||||
<if test="distributeRuleCode != null and distributeRuleCode != ''">
|
||||
and distribute_rule_code = #{distributeRuleCode}
|
||||
</if>
|
||||
<if test="distributeRuleName != null and distributeRuleName != ''">
|
||||
and distribute_rule_name like concat('%', #{distributeRuleName}, '%')
|
||||
</if>
|
||||
<if test="containerId != null ">
|
||||
and container_id = #{containerId}
|
||||
</if>
|
||||
<if test="containerCode != null and containerCode != ''">
|
||||
and container_code = #{containerCode}
|
||||
</if>
|
||||
<if test="containerType != null and containerType != ''">
|
||||
and container_type = #{containerType}
|
||||
</if>
|
||||
<if test="containerTypeName != null and containerTypeName != ''">
|
||||
and container_type_name like concat('%', #{containerTypeName}, '%')
|
||||
</if>
|
||||
<if test="warehouseId != null ">
|
||||
and warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
<if test="warehouseCode != null and warehouseCode != ''">
|
||||
and warehouse_code = #{warehouseCode}
|
||||
</if>
|
||||
<if test="warehouseName != null and warehouseName != ''">
|
||||
and warehouse_name like concat('%', #{warehouseName}, '%')
|
||||
</if>
|
||||
<if test="storageSectionId != null ">
|
||||
and storage_section_id = #{storageSectionId}
|
||||
</if>
|
||||
<if test="storageCode != null and storageCode != ''">
|
||||
and storage_code = #{storageCode}
|
||||
</if>
|
||||
<if test="storageName != null and storageName != ''">
|
||||
and storage_name like concat('%', #{storageName}, '%')
|
||||
</if>
|
||||
<if test="storageLocationId != null ">
|
||||
and storage_location_id = #{storageLocationId}
|
||||
</if>
|
||||
<if test="storageLocationCode != null and storageLocationCode != ''">
|
||||
and storage_location_code = #{storageLocationCode}
|
||||
</if>
|
||||
<if test="storageLocationName != null and storageLocationName != ''">
|
||||
and storage_location_name like concat('%', #{storageLocationName}, '%')
|
||||
</if>
|
||||
<if test="level != null ">
|
||||
and level = #{level}
|
||||
</if>
|
||||
<if test="parentUniqueId != null ">
|
||||
and parent_unique_id = #{parentUniqueId}
|
||||
</if>
|
||||
<if test="createByName != null and createByName != ''">
|
||||
and create_by_name like concat('%', #{createByName}, '%')
|
||||
</if>
|
||||
<if test="updateByName != null and updateByName != ''">
|
||||
and update_by_name like concat('%', #{updateByName}, '%')
|
||||
</if>
|
||||
<choose>
|
||||
<when test="delFlag != null"> and del_flag = #{delFlag} </when>
|
||||
<otherwise> and del_flag = 1 </otherwise>
|
||||
</choose>
|
||||
<if test="organizationId != null ">
|
||||
and a.organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="organizationName != null and organizationName != ''">
|
||||
and a.organization_name like concat('%', #{organizationName}, '%')
|
||||
</if>
|
||||
<if test="topOrganizationId != null ">
|
||||
and a.top_organization_id = #{topOrganizationId}
|
||||
</if>
|
||||
<if test="uniqueId != null ">
|
||||
and a.unique_id = #{uniqueId}
|
||||
</if>
|
||||
<if test="shelfOrderNumber != null and shelfOrderNumber != ''">
|
||||
and a.shelf_order_number = #{shelfOrderNumber}
|
||||
</if>
|
||||
<if test="materialBaseInfoId != null ">
|
||||
and a.material_base_info_id = #{materialBaseInfoId}
|
||||
</if>
|
||||
<if test="materialCode != null and materialCode != ''">
|
||||
and a.material_code = #{materialCode}
|
||||
</if>
|
||||
<if test="materialName != null and materialName != ''">
|
||||
and a.material_name like concat('%', #{materialName}, '%')
|
||||
</if>
|
||||
<if test="barCode != null and barCode != ''">
|
||||
and a.bar_code = #{barCode}
|
||||
</if>
|
||||
<if test="quantity != null ">
|
||||
and a.quantity = #{quantity}
|
||||
</if>
|
||||
<if test="shelvesQuantity != null ">
|
||||
and a.shelves_quantity = #{shelvesQuantity}
|
||||
</if>
|
||||
<if test="alreadyShelvesQuantity != null ">
|
||||
and a.already_shelves_quantity = #{alreadyShelvesQuantity}
|
||||
</if>
|
||||
<if test="shelvesStatus != null ">
|
||||
and a.shelves_status = #{shelvesStatus}
|
||||
</if>
|
||||
<if test="packId != null ">
|
||||
and a.pack_id = #{packId}
|
||||
</if>
|
||||
<if test="packCode != null and packCode != ''">
|
||||
and a.pack_code = #{packCode}
|
||||
</if>
|
||||
<if test="packName != null and packName != ''">
|
||||
and a.pack_name like concat('%', #{packName}, '%')
|
||||
</if>
|
||||
<if test="packDetailId != null and packDetailId != ''">
|
||||
and a.pack_detail_id = #{packDetailId}
|
||||
</if>
|
||||
<if test="unitCode != null and unitCode != ''">
|
||||
and a.unit_code = #{unitCode}
|
||||
</if>
|
||||
<if test="unitName != null and unitName != ''">
|
||||
and a.unit_name like concat('%', #{unitName}, '%')
|
||||
</if>
|
||||
<if test="unitNumber != null ">
|
||||
and a.unit_number = #{unitNumber}
|
||||
</if>
|
||||
<if test="materialWarehouseControlId != null ">
|
||||
and a.material_warehouse_control_id = #{materialWarehouseControlId}
|
||||
</if>
|
||||
<if test="serialNumberManage != null ">
|
||||
and a.serial_number_manage = #{serialNumberManage}
|
||||
</if>
|
||||
<if test="qualityInspectionManage != null ">
|
||||
and a.quality_inspection_manage = #{qualityInspectionManage}
|
||||
</if>
|
||||
<if test="qualityInspectionStage != null ">
|
||||
and a.quality_inspection_stage = #{qualityInspectionStage}
|
||||
</if>
|
||||
<if test="qualityInspectionRule != null ">
|
||||
and a.quality_inspection_rule = #{qualityInspectionRule}
|
||||
</if>
|
||||
<if test="qualityInspectionRatio != null ">
|
||||
and a.quality_inspection_ratio = #{qualityInspectionRatio}
|
||||
</if>
|
||||
<if test="qualityInspectionTerm != null ">
|
||||
and a.quality_inspection_term = #{qualityInspectionTerm}
|
||||
</if>
|
||||
<if test="qualityInspectionResults != null ">
|
||||
and a.quality_inspection_results = #{qualityInspectionResults}
|
||||
</if>
|
||||
<if test="allowOvercharge != null ">
|
||||
and a.allow_overcharge = #{allowOvercharge}
|
||||
</if>
|
||||
<if test="overchargeRatio != null ">
|
||||
and a.overcharge_ratio = #{overchargeRatio}
|
||||
</if>
|
||||
<if test="batchNumber != null and batchNumber != ''">
|
||||
and a.batch_number = #{batchNumber}
|
||||
</if>
|
||||
<if test="lotNumber != null and lotNumber != ''">
|
||||
and a.lot_number = #{lotNumber}
|
||||
</if>
|
||||
<if test="palletNumber != null and palletNumber != ''">
|
||||
and a.pallet_number like concat('%', #{palletNumber}, '%')
|
||||
</if>
|
||||
<if test="materialStatusCode != null and materialStatusCode != ''">
|
||||
and a.material_status_code = #{materialStatusCode}
|
||||
</if>
|
||||
<if test="materialStatusName != null and materialStatusName != ''">
|
||||
and a.material_status_name like concat('%', #{materialStatusName}, '%')
|
||||
</if>
|
||||
<if test="distributeRuleId != null ">
|
||||
and a.distribute_rule_id = #{distributeRuleId}
|
||||
</if>
|
||||
<if test="distributeRuleCode != null and distributeRuleCode != ''">
|
||||
and a.distribute_rule_code = #{distributeRuleCode}
|
||||
</if>
|
||||
<if test="distributeRuleName != null and distributeRuleName != ''">
|
||||
and a.distribute_rule_name like concat('%', #{distributeRuleName}, '%')
|
||||
</if>
|
||||
<if test="containerId != null ">
|
||||
and a.container_id = #{containerId}
|
||||
</if>
|
||||
<if test="containerCode != null and containerCode != ''">
|
||||
and a.container_code = #{containerCode}
|
||||
</if>
|
||||
<if test="containerType != null and containerType != ''">
|
||||
and a.container_type = #{containerType}
|
||||
</if>
|
||||
<if test="containerTypeName != null and containerTypeName != ''">
|
||||
and a.container_type_name like concat('%', #{containerTypeName}, '%')
|
||||
</if>
|
||||
<if test="warehouseId != null ">
|
||||
and a.warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
<if test="warehouseCode != null and warehouseCode != ''">
|
||||
and a.warehouse_code = #{warehouseCode}
|
||||
</if>
|
||||
<if test="warehouseName != null and warehouseName != ''">
|
||||
and a.warehouse_name like concat('%', #{warehouseName}, '%')
|
||||
</if>
|
||||
<if test="storageSectionId != null ">
|
||||
and a.storage_section_id = #{storageSectionId}
|
||||
</if>
|
||||
<if test="storageCode != null and storageCode != ''">
|
||||
and a.storage_code = #{storageCode}
|
||||
</if>
|
||||
<if test="storageName != null and storageName != ''">
|
||||
and a.storage_name like concat('%', #{storageName}, '%')
|
||||
</if>
|
||||
<if test="storageLocationId != null ">
|
||||
and a.storage_location_id = #{storageLocationId}
|
||||
</if>
|
||||
<if test="storageLocationCode != null and storageLocationCode != ''">
|
||||
and a.storage_location_code = #{storageLocationCode}
|
||||
</if>
|
||||
<if test="storageLocationName != null and storageLocationName != ''">
|
||||
and a.storage_location_name like concat('%', #{storageLocationName}, '%')
|
||||
</if>
|
||||
<if test="level != null ">
|
||||
and a.level = #{level}
|
||||
</if>
|
||||
<if test="parentUniqueId != null ">
|
||||
and a.parent_unique_id = #{parentUniqueId}
|
||||
</if>
|
||||
<if test="createByName != null and createByName != ''">
|
||||
and a.create_by_name like concat('%', #{createByName}, '%')
|
||||
</if>
|
||||
<if test="updateByName != null and updateByName != ''">
|
||||
and a.update_by_name like concat('%', #{updateByName}, '%')
|
||||
</if>
|
||||
<choose>
|
||||
<when test="delFlag != null"> and a.del_flag = #{delFlag} </when>
|
||||
<otherwise> and a.del_flag = 1 </otherwise>
|
||||
</choose>
|
||||
</where>
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -480,6 +480,10 @@
|
||||
<select id="getUserNcCode" parameterType="java.lang.Long" resultType="java.lang.String">
|
||||
select CUSTOMER_NC_CODE from "NGWL_TEST_USER".USER_SHIPPER where 1 = 1 and DEL_FLAG = 1 and USER_ID = #{id} limit 1
|
||||
</select>
|
||||
|
||||
<select id="getSettlementCurrency" parameterType="java.lang.Long" resultType="java.lang.String">
|
||||
select SETTLEMENT_CURRENCY from "NGWL_TEST_USER".USER_SHIPPER where 1 = 1 and DEL_FLAG = 1 and USER_ID = #{id} limit 1
|
||||
</select>
|
||||
<select id="getKcId" parameterType="java.lang.String" resultType="java.lang.Long">
|
||||
select MATERIAL_INVENTORY_ID from "NGWL_TEST_WMS".OUT_MATERIAL_DETAIL where lot_no = #{lotNo}
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user