diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java index 12993e41f..4ce362167 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java @@ -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); + /** * 根据结算主体获取合同信息 */ diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteSystemFeignFallbackFactory.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteSystemFeignFallbackFactory.java index 41f189f1f..ead5581ff 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteSystemFeignFallbackFactory.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteSystemFeignFallbackFactory.java @@ -284,6 +284,10 @@ public class RemoteSystemFeignFallbackFactory implements FallbackFactory UserContractManages = contractManageMapper.selectList(new LambdaQueryWrapper() - .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 contractManagePOS = contractManageMapper.queryList(contractManageDO); + if (contractManagePOS != null && contractManagePOS.size() > 1) { + throw new RuntimeException("同一费用科目存在多条合同,请检查"); + } + List 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 contractManagePOList = contractManageDomainService.queryList(queryParam); + List 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 contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(resultContract.getContractManageId()); + List 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 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 diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java index 611e07714..541778197 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/todo/ContractManageDO.java @@ -214,4 +214,6 @@ public class ContractManageDO extends BaseVOEntity{ @ApiModelProperty(name = "是否包含运输费用(1-包含,2-包含)") private Integer transportationCosts; + @ApiModelProperty("一级费用科目code") + private String firstSubjectCode; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java index 999e08026..db2ba5435 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java @@ -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 codelist = storageSectionService.list(new QueryWrapper().lambda() + .eq(StorageSection::getStorageCode, storageCode) + .eq(StorageSection::getWarehouseId, warehouseId) + .eq(StorageSection::getDelFlag, 1)); + List namelist = storageSectionService.list(new QueryWrapper().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 codelist = storageSectionService.list(new QueryWrapper().lambda() + .eq(StorageSection::getStorageCode, storageCode) + .eq(StorageSection::getWarehouseId, warehouseId) + .ne(StorageSection::getStorageSectionId, storageSectionDO.getStorageSectionId()) + .eq(StorageSection::getDelFlag, 1)); + List namelist = storageSectionService.list(new QueryWrapper().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 { } -} +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java index 1e2039f0e..c48ef479b 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java @@ -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) diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml index 3fabe03cc..7b1b8a9db 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml @@ -6,11 +6,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - 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 @@ -46,7 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and contract_state = #{contractState} - and signing_unit = #{signingUnit} + and asigning_unit = #{signingUnit} and settlement_customers = #{settlementCustomers} @@ -108,6 +109,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and they_operator_phone = #{theyOperatorPhone} + @@ -132,73 +134,76 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - and contract_number like concat('%', #{contractManageDO.contractNumber}, '%') + and a.contract_number like concat('%', #{contractManageDO.contractNumber}, '%') - and original_contract_number like concat('%', #{contractManageDO.originalContractNumber}, '%') + and a.original_contract_number like concat('%', #{contractManageDO.originalContractNumber}, '%') - and common_contract_flag = #{contractManageDO.commonContractFlag} + and a.common_contract_flag = #{contractManageDO.commonContractFlag} - and contract_type = #{contractManageDO.contractType} + and a.contract_type = #{contractManageDO.contractType} - and settlement_customers like concat('%', #{contractManageDO.settlementCustomers}, '%') + and a.settlement_customers like concat('%', #{contractManageDO.settlementCustomers}, '%') - and settlement_customers_code = #{contractManageDO.settlementCustomersCode} + and a.settlement_customers_code = #{contractManageDO.settlementCustomersCode} - and signing_unit like concat('%', #{contractManageDO.signingUnit}, '%') + and a.signing_unit like concat('%', #{contractManageDO.signingUnit}, '%') - and contract_name like concat('%', #{contractManageDO.contractName}, '%') + and a.contract_name like concat('%', #{contractManageDO.contractName}, '%') - and contract_state = #{contractManageDO.contractState} + and a.contract_state = #{contractManageDO.contractState} - AND date_format(signing_date,'%Y-%m-%d') =]]> #{contractManageDO.signingDateStart} + AND date_format(a.signing_date,'%Y-%m-%d') =]]> #{contractManageDO.signingDateStart} - AND date_format(signing_date,'%Y-%m-%d') #{contractManageDO.signingDateEnd} + AND date_format(a.signing_date,'%Y-%m-%d') #{contractManageDO.signingDateEnd} - AND date_format(effective_date,'%Y-%m-%d') =]]> #{contractManageDO.effectiveDateStart} + AND date_format(a.effective_date,'%Y-%m-%d') =]]> #{contractManageDO.effectiveDateStart} - AND date_format(effective_date,'%Y-%m-%d') #{contractManageDO.effectiveDateEnd} + AND date_format(a.effective_date,'%Y-%m-%d') #{contractManageDO.effectiveDateEnd} - AND date_format(expiration_date,'%Y-%m-%d') =]]> #{contractManageDO.expirationDateStart} + AND date_format(a.expiration_date,'%Y-%m-%d') =]]> #{contractManageDO.expirationDateStart} - AND date_format(expiration_date,'%Y-%m-%d') #{contractManageDO.expirationDateEnd} + AND date_format(a.expiration_date,'%Y-%m-%d') #{contractManageDO.expirationDateEnd} AND ( - date_format(effective_date,'%Y-%m-%d') #{contractManageDO.expirationDateString} - AND date_format(expiration_date,'%Y-%m-%d') =]]> #{contractManageDO.effectiveDateString} + date_format(a.effective_date,'%Y-%m-%d') #{contractManageDO.expirationDateString} + AND date_format(a.expiration_date,'%Y-%m-%d') =]]> #{contractManageDO.effectiveDateString} ) AND ( - date_format(expiration_date,'%Y-%m-%d') =]]> #{contractManageDO.nowDateString} - AND date_format(effective_date,'%Y-%m-%d') #{contractManageDO.nowDateString} + date_format(a.expiration_date,'%Y-%m-%d') =]]> #{contractManageDO.nowDateString} + AND date_format(a.effective_date,'%Y-%m-%d') #{contractManageDO.nowDateString} ) - and organization_id = #{contractManageDO.organizationId} + and a.organization_id = #{contractManageDO.organizationId} - and top_organization_id = #{contractManageDO.topOrganizationId} + and a.top_organization_id = #{contractManageDO.topOrganizationId} + + + and b.FIRST_SUBJECT_CODE = #{contractManageDO.firstSubjectCode} - + \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java index ce684c175..f833c59e8 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java @@ -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 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 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 billingStatements = billingStatementMapper.selectList(new LambdaQueryWrapper() + .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("合同信息未找到"); } diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java index 0adec6d8a..6e326dc95 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java @@ -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); diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java index 899da7af5..8b2e0e056 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/businessDocument/repository/todo/BusinessDocumentDO.java @@ -218,4 +218,6 @@ public class BusinessDocumentDO extends BaseVOEntity{ private BigDecimal billingUnitPrice; @ApiModelProperty("nc科目编码") private String ncSubjectCode; + + private Long billManageId; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java index aefb1c14b..3e6a93304 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/dto/businessDocument/BusinessDocumentDTO.java @@ -213,4 +213,6 @@ public class BusinessDocumentDTO extends BaseVOEntity{ private String paymentAccountId; @ApiModelProperty("收款帐户名称") private String paymentAccountName; + + private Long billManageId; } \ No newline at end of file diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java index 8301bc5d9..ad94d9f94 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BusinessDocumentApi.java @@ -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()); + } + + } + /** * 保存业务单据 diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java index 8d7aae772..f21dd00a0 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java @@ -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> 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 qw = new LambdaQueryWrapper<>(); + qw.eq(ErpCountry::getDelFlag, 1); + if (areaId != null) { + qw.eq(ErpCountry::getErpCountryCode, areaId); + } + List list = erpCountryMapper.selectList(qw); + if (!list.isEmpty()) return list.get(0).getErpCountryCode(); + // 按名称模糊匹配 + if (areaName != null) { + LambdaQueryWrapper qw2 = new LambdaQueryWrapper<>(); + qw2.eq(ErpCountry::getDelFlag, 1).like(ErpCountry::getErpCountryName, areaName); + List 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 { diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/originalImportExportDocument/OrderWithMaterialDTO.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/originalImportExportDocument/OrderWithMaterialDTO.java index 58614bc6d..15bfe06ff 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/originalImportExportDocument/OrderWithMaterialDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/originalImportExportDocument/OrderWithMaterialDTO.java @@ -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; diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java index d408c8a10..836497683 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java @@ -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 page = (Page) orderList; List 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 resultList, List 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 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 qw = new LambdaQueryWrapper<>(); + qw.eq(ErpCountry::getDelFlag, 1); + if (areaId != null) qw.eq(ErpCountry::getErpCountryCode, areaId); + List list = erpCountryMapper.selectList(qw); + if (!list.isEmpty()) return list.get(0).getErpCountryCode(); + if (areaName != null) { + LambdaQueryWrapper qw2 = new LambdaQueryWrapper<>(); + qw2.eq(ErpCountry::getDelFlag, 1).like(ErpCountry::getErpCountryName, areaName); + List 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") diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java index 8e884d7c7..0329feb68 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java @@ -336,6 +336,17 @@ public class ReviewOrderApplicationService { syncOutOrderCheckQtyByReviewConfirm(reviewOrderId, loginUser); // 与出库单「复核确认」一致:复核数量与拣货数量不一致时生成复核异常单(FHYC) genOutOrderAbnormalAfterReviewConfirm(reviewOrderId); + // 校验:复核确认前,已复核数量必须等于计划数量 + List 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; diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java index f3054e140..6d9b63602 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java @@ -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 list = inMaterialDetailService.list(new LambdaQueryWrapper() + .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() + .eq(StockReceiptOrder::getInOrderNumber, stockInOrderPO.getInOrderNumber()) + .eq(StockReceiptOrder::getDelFlag, 1),false); + if (stockReceiptOrder != null) { + stockReceiptOrder.setDelFlag(2); + stockReceiptOrderService.updateById(stockReceiptOrder); + List list1 = receiptMaterialDetailService.list(new LambdaQueryWrapper() + .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); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java index 6cf39f901..dd8fafbb0 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java @@ -229,4 +229,8 @@ public class MaterialInventoryPO extends MaterialBasePO { @ApiModelProperty("LOT编号") @Excel(name = "LOT编号") private String lotNumber; + + @ApiModelProperty("规格型号") + @Excel(name = "规格型号") + private String specificationModel; } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java index 4b2f8097f..aedd365af 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java @@ -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; } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/po/PickingOrderPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/po/PickingOrderPO.java index 02fa68661..3e75cd15a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/po/PickingOrderPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/po/PickingOrderPO.java @@ -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 = "业务单号") diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/po/ShelfMaterialDetailPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/po/ShelfMaterialDetailPO.java index 316595d5a..053cd7ecb 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/po/ShelfMaterialDetailPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/shelfMaterialDetail/repository/po/ShelfMaterialDetailPO.java @@ -405,4 +405,7 @@ public class ShelfMaterialDetailPO extends BaseVOEntity { private BigDecimal erpPriceGw; //申报总价 private BigDecimal amountGw; + + @ApiModelProperty("规格型号") + private String specificationModel; } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java index b93f8b1e0..afaa73354 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java @@ -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("申报地关区不能为空; "); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java index 010d2e757..3c8f19dba 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/HeaderListener.java @@ -34,7 +34,12 @@ public class HeaderListener extends AnalysisEventListener> // 将Map转换为List再转为数组 List 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、仓库联系人、车型及车牌、委托编码 diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java index b907c2a0c..53b9dc775 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/mapper/StockOutOrderMapper.java @@ -37,6 +37,8 @@ public interface StockOutOrderMapper extends BaseMapper { 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); diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java index 659d265fb..2c5009552 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java @@ -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; + } \ No newline at end of file diff --git a/mhd_wms/src/main/resources/mapper/materialBaseInfo/MaterialBaseInfoMapper.xml b/mhd_wms/src/main/resources/mapper/materialBaseInfo/MaterialBaseInfoMapper.xml index 7b55c4761..2333f93c2 100644 --- a/mhd_wms/src/main/resources/mapper/materialBaseInfo/MaterialBaseInfoMapper.xml +++ b/mhd_wms/src/main/resources/mapper/materialBaseInfo/MaterialBaseInfoMapper.xml @@ -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 diff --git a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml index fdca9e280..f6f32760c 100644 --- a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml +++ b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml @@ -64,6 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -241,6 +242,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND TO_CHAR(a.update_time, 'yyyy-MM-dd') = #{updateTimeStr} + + + and a.update_time >= #{updateTimeStart} + + + and a.update_time DATEADD(DAY, 1, #{updateTimeEnd}) + + + and a.production_date >= #{productionDateStart} + + + and a.production_date DATEADD(DAY, 1, #{productionDateEnd}) + + + and a.expiry_date >= #{expiryDateStart} + + + and a.expiry_date DATEADD(DAY, 1, #{expiryDateEnd}) + diff --git a/mhd_wms/src/main/resources/mapper/pickingOrder/PickingOrderMapper.xml b/mhd_wms/src/main/resources/mapper/pickingOrder/PickingOrderMapper.xml index f665330df..0bf8586fa 100644 --- a/mhd_wms/src/main/resources/mapper/pickingOrder/PickingOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/pickingOrder/PickingOrderMapper.xml @@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -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" ,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 diff --git a/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml b/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml index a4c0cdc5d..f192fdeec 100644 --- a/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml +++ b/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml @@ -84,198 +84,284 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - 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 - - and organization_id = #{organizationId} - - - and organization_name like concat('%', #{organizationName}, '%') - - - and top_organization_id = #{topOrganizationId} - - - and unique_id = #{uniqueId} - - - and shelf_order_number = #{shelfOrderNumber} - - - and material_base_info_id = #{materialBaseInfoId} - - - and material_code = #{materialCode} - - - and material_name like concat('%', #{materialName}, '%') - - - and bar_code = #{barCode} - - - and quantity = #{quantity} - - - and shelves_quantity = #{shelvesQuantity} - - - and already_shelves_quantity = #{alreadyShelvesQuantity} - - - and shelves_status = #{shelvesStatus} - - - and pack_id = #{packId} - - - and pack_code = #{packCode} - - - and pack_name like concat('%', #{packName}, '%') - - - and pack_detail_id = #{packDetailId} - - - and unit_code = #{unitCode} - - - and unit_name like concat('%', #{unitName}, '%') - - - and unit_number = #{unitNumber} - - - and material_warehouse_control_id = #{materialWarehouseControlId} - - - and serial_number_manage = #{serialNumberManage} - - - and quality_inspection_manage = #{qualityInspectionManage} - - - and quality_inspection_stage = #{qualityInspectionStage} - - - and quality_inspection_rule = #{qualityInspectionRule} - - - and quality_inspection_ratio = #{qualityInspectionRatio} - - - and quality_inspection_term = #{qualityInspectionTerm} - - - and quality_inspection_results = #{qualityInspectionResults} - - - and allow_overcharge = #{allowOvercharge} - - - and overcharge_ratio = #{overchargeRatio} - - - and batch_number = #{batchNumber} - - - and lot_number = #{lotNumber} - - - and pallet_number like concat('%', #{palletNumber}, '%') - - - and material_status_code = #{materialStatusCode} - - - and material_status_name like concat('%', #{materialStatusName}, '%') - - - and distribute_rule_id = #{distributeRuleId} - - - and distribute_rule_code = #{distributeRuleCode} - - - and distribute_rule_name like concat('%', #{distributeRuleName}, '%') - - - and container_id = #{containerId} - - - and container_code = #{containerCode} - - - and container_type = #{containerType} - - - and container_type_name like concat('%', #{containerTypeName}, '%') - - - and warehouse_id = #{warehouseId} - - - and warehouse_code = #{warehouseCode} - - - and warehouse_name like concat('%', #{warehouseName}, '%') - - - and storage_section_id = #{storageSectionId} - - - and storage_code = #{storageCode} - - - and storage_name like concat('%', #{storageName}, '%') - - - and storage_location_id = #{storageLocationId} - - - and storage_location_code = #{storageLocationCode} - - - and storage_location_name like concat('%', #{storageLocationName}, '%') - - - and level = #{level} - - - and parent_unique_id = #{parentUniqueId} - - - and create_by_name like concat('%', #{createByName}, '%') - - - and update_by_name like concat('%', #{updateByName}, '%') - - - and del_flag = #{delFlag} - and del_flag = 1 - + + and a.organization_id = #{organizationId} + + + and a.organization_name like concat('%', #{organizationName}, '%') + + + and a.top_organization_id = #{topOrganizationId} + + + and a.unique_id = #{uniqueId} + + + and a.shelf_order_number = #{shelfOrderNumber} + + + and a.material_base_info_id = #{materialBaseInfoId} + + + and a.material_code = #{materialCode} + + + and a.material_name like concat('%', #{materialName}, '%') + + + and a.bar_code = #{barCode} + + + and a.quantity = #{quantity} + + + and a.shelves_quantity = #{shelvesQuantity} + + + and a.already_shelves_quantity = #{alreadyShelvesQuantity} + + + and a.shelves_status = #{shelvesStatus} + + + and a.pack_id = #{packId} + + + and a.pack_code = #{packCode} + + + and a.pack_name like concat('%', #{packName}, '%') + + + and a.pack_detail_id = #{packDetailId} + + + and a.unit_code = #{unitCode} + + + and a.unit_name like concat('%', #{unitName}, '%') + + + and a.unit_number = #{unitNumber} + + + and a.material_warehouse_control_id = #{materialWarehouseControlId} + + + and a.serial_number_manage = #{serialNumberManage} + + + and a.quality_inspection_manage = #{qualityInspectionManage} + + + and a.quality_inspection_stage = #{qualityInspectionStage} + + + and a.quality_inspection_rule = #{qualityInspectionRule} + + + and a.quality_inspection_ratio = #{qualityInspectionRatio} + + + and a.quality_inspection_term = #{qualityInspectionTerm} + + + and a.quality_inspection_results = #{qualityInspectionResults} + + + and a.allow_overcharge = #{allowOvercharge} + + + and a.overcharge_ratio = #{overchargeRatio} + + + and a.batch_number = #{batchNumber} + + + and a.lot_number = #{lotNumber} + + + and a.pallet_number like concat('%', #{palletNumber}, '%') + + + and a.material_status_code = #{materialStatusCode} + + + and a.material_status_name like concat('%', #{materialStatusName}, '%') + + + and a.distribute_rule_id = #{distributeRuleId} + + + and a.distribute_rule_code = #{distributeRuleCode} + + + and a.distribute_rule_name like concat('%', #{distributeRuleName}, '%') + + + and a.container_id = #{containerId} + + + and a.container_code = #{containerCode} + + + and a.container_type = #{containerType} + + + and a.container_type_name like concat('%', #{containerTypeName}, '%') + + + and a.warehouse_id = #{warehouseId} + + + and a.warehouse_code = #{warehouseCode} + + + and a.warehouse_name like concat('%', #{warehouseName}, '%') + + + and a.storage_section_id = #{storageSectionId} + + + and a.storage_code = #{storageCode} + + + and a.storage_name like concat('%', #{storageName}, '%') + + + and a.storage_location_id = #{storageLocationId} + + + and a.storage_location_code = #{storageLocationCode} + + + and a.storage_location_name like concat('%', #{storageLocationName}, '%') + + + and a.level = #{level} + + + and a.parent_unique_id = #{parentUniqueId} + + + and a.create_by_name like concat('%', #{createByName}, '%') + + + and a.update_by_name like concat('%', #{updateByName}, '%') + + + and a.del_flag = #{delFlag} + and a.del_flag = 1 + diff --git a/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml b/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml index c090be1c8..87b8b297b 100644 --- a/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml @@ -480,6 +480,10 @@ + +