Explorar o código

Merge remote-tracking branch 'origin/dev' into dev

liyuan hai 10 meses
pai
achega
8c10ead230
Modificáronse 23 ficheiros con 945 adicións e 147 borrados
  1. 5 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/fees/entity/BFees.java
  2. 12 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/aea/entity/AeaBills.java
  3. 1 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/amends/entity/Amends.java
  4. 12 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/customsDeclaration/entity/CustomsDeclaration.java
  5. 20 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/generalBill/entity/GeneralBill.java
  6. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/entity/BillLocks.java
  7. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  8. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/mapper/FeesMapper.xml
  9. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  10. 8 6
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/controller/AmendsController.java
  11. 28 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java
  12. 49 10
      blade-service/blade-los/src/main/java/org/springblade/los/business/generalBill/controller/GeneralBillController.java
  13. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/generalBill/service/IGeneralBillService.java
  14. 52 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/generalBill/service/impl/GeneralBillServiceImpl.java
  15. 458 60
      blade-service/blade-los/src/main/java/org/springblade/los/business/locks/service/impl/BillLocksServiceImpl.java
  16. 122 50
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  17. 0 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java
  18. 4 2
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  19. 66 1
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  20. 21 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java
  21. 57 3
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java
  22. 4 4
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FinAccBillsMapper.xml
  23. 3 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java

+ 5 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/fees/entity/BFees.java

@@ -208,5 +208,10 @@ public class BFees implements Serializable {
 	@ApiModelProperty(value = "是否强制币别")
 	private Integer whetherForceCurNo;
 
+	/**
+	 * 是否允许只有应付无应收费用
+	 */
+	@ApiModelProperty(value = "是否允许只有应付无应收费用")
+	private Integer allowNoDr;
 
 }

+ 12 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/aea/entity/AeaBills.java

@@ -1253,6 +1253,18 @@ public class AeaBills implements Serializable {
 	@ApiModelProperty(value = "出库日期")
 	private Date outboundDate;
 
+	/**
+	 * 单据锁
+	 */
+	@ApiModelProperty(value = "单据锁")
+	private Integer locked;
+
+	/**
+	 * 解锁日期
+	 */
+	@ApiModelProperty(value = "解锁日期")
+	private Date lockedDate;
+
 	@TableField(exist = false)
 	private String FM;
 

+ 1 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/amends/entity/Amends.java

@@ -99,6 +99,7 @@ public class Amends implements Serializable {
 	private Date updateTime;
 	/**
 	 * 业务类型, SEA=海运出口AMEND SIA=海运进口AMEND AEA=空运出口AMEND AIA=空运进口AMEND
+	 *EXPA=快递amend  TRUCKA=海运派车amend  MFAA=空运舱单amend  MFSA=海运舱单amend
 	 */
 	@ApiModelProperty(value = "业务类型, SEA=海运出口AMEND SIA=海运进口AMEND AEA=空运出口AMEND AIA=空运进口AMEND")
 	private String businessType;

+ 12 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/customsDeclaration/entity/CustomsDeclaration.java

@@ -635,6 +635,18 @@ public class CustomsDeclaration implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	/**
+	 * 单据锁
+	 */
+	@ApiModelProperty(value = "单据锁")
+	private Integer locked;
+
+	/**
+	 * 解锁日期
+	 */
+	@ApiModelProperty(value = "解锁日期")
+	private Date lockedDate;
+
 
 	/**
 	 * 物流-费用中心(付)

+ 20 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/generalBill/entity/GeneralBill.java

@@ -94,9 +94,9 @@ public class GeneralBill implements Serializable {
 	@ApiModelProperty(value = "修改时间")
 	private Date updateTime;
 	/**
-	 * 单据类型, MFS=海运舱单 MFA=空运运舱单, EXP=快递业务,TRUCK=海运派车
+	 * 单据类型, SECMS=海运舱单 MFA=空运运舱单, EXP=快递业务,TRUCK=海运派车
 	 */
-	@ApiModelProperty(value = "单据类型, MFS=海运舱单 MFA=空运运舱单, EXP=快递业务,TRUCK=海运派车")
+	@ApiModelProperty(value = "单据类型, SECMS=海运舱单 MFA=空运运舱单, EXP=快递业务,TRUCK=海运派车")
 	private String billType;
 	/**
 	 * 业务类型,根据单据类型不同,取不同的值
@@ -406,6 +406,12 @@ public class GeneralBill implements Serializable {
 	private BigDecimal amountProfitLoc;
 
 	/**
+	 * 运输类型
+	 */
+	@ApiModelProperty(value = "运输类型")
+	private String transportType;
+
+	/**
 	 * 编码生成code
 	 */
 	@TableField(exist = false)
@@ -445,5 +451,17 @@ public class GeneralBill implements Serializable {
 	@TableField(exist = false)
 	private List<LosAuditPathsLevels> auditPathsLevels;
 
+	/**
+	 * 开船日期
+	 */
+	@TableField(exist = false)
+	private List<String> etdList;
+
+	/**
+	 * 到港日期
+	 */
+	@TableField(exist = false)
+	private List<String> etaList;
+
 
 }

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/entity/BillLocks.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.business.locks.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -214,5 +215,11 @@ public class BillLocks implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	/**
+	 * 加锁类型
+	 */
+	@TableField(exist = false)
+	private String type;
+
 
 }

+ 8 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java

@@ -67,6 +67,14 @@ public class MagicValues {
 	public static final String BGSI = "BGSI";
 	public static final String BGAE = "BGAE";
 	public static final String BGAI = "BGAI";
+	public static final String EXPA = "EXPA";
+	public static final String TRUCKA = "TRUCKA";
+	public static final String MFAA = "MFAA";
+	public static final String MFSA = "MFSA";
+	public static final String SECMS = "SECMS";
+	public static final String MFA = "MFA";
+	public static final String EXP = "EXP";
+	public static final String TRUCK = "TRUCK";
 	public static final String USD = "USD";
 	public static final String CNY = "CNY";
 	public static final String D = "D";

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/mapper/FeesMapper.xml

@@ -31,6 +31,8 @@
         <result column="tenant_id" property="tenantId"/>
         <result column="fees_type_id" property="feesTypeId"/>
         <result column="fees_type_name" property="feesTypeName"/>
+        <result column="whether_force_cur_no" property="whetherForceCurNo"/>
+        <result column="allow_no_dr" property="allowNoDr"/>
     </resultMap>
 
 

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -223,6 +223,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			return this.getReportDataAmend(billId, reportCode, groupCode, corpIds, itemIds, type, curCode, BillNumber);
 		} else if (MagicValues.BGSE.equals(type) || MagicValues.BGSI.equals(type) || MagicValues.BGAE.equals(type) || MagicValues.BGAI.equals(type)) {
 			return this.getReportDataBG(billId, reportCode, groupCode, corpIds, itemIds, type, curCode, BillNumber);
+		}else if((MagicValues.SECMS.equals(type) || MagicValues.MFA.equals(type) || MagicValues.EXP.equals(type) || MagicValues.TRUCK.equals(type))){
+
 		} else {
 			if (MagicValues.PAID_APPLICATION.equals(reportCode) && MagicValues.PAID_APPLICATION.equals(groupCode)) {
 				FinStlBills finStlBills = finStlBillsService.getById(billId);

+ 8 - 6
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/controller/AmendsController.java

@@ -32,11 +32,9 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
-import org.springblade.los.business.aea.entity.AeaBills;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.amends.vo.AmendsVO;
-import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.*;
 
@@ -106,13 +104,17 @@ public class AmendsController extends BladeController {
 				&& !AuthUtil.getUserRole().contains("副总") && !AuthUtil.getUserRole().contains("财务")
 				&& !AuthUtil.getUserRole().contains("经理")) {
 				if (AuthUtil.getUserRole().contains("操作经理")) {
-					lambdaQueryWrapper.eq(Amends::getOperatorDept, AuthUtil.getDeptId());
+					lambdaQueryWrapper.and(i -> i.eq(Amends::getOperatorDept, AuthUtil.getDeptId()).or()
+						.eq(Amends::getCreateUser, AuthUtil.getUserId()));
 				} else if (AuthUtil.getUserRole().contains("操作员")) {
-					lambdaQueryWrapper.eq(Amends::getOperatorId, AuthUtil.getUserId());
+					lambdaQueryWrapper.and(i -> i.eq(Amends::getOperatorId, AuthUtil.getUserId()).or()
+						.eq(Amends::getCreateUser, AuthUtil.getUserId()));
 				} else if (AuthUtil.getUserRole().contains("销售经理")) {
-					lambdaQueryWrapper.eq(Amends::getSrcDeptId, AuthUtil.getDeptId());
+					lambdaQueryWrapper.and(i -> i.eq(Amends::getSrcDeptId, AuthUtil.getDeptId()).or()
+						.eq(Amends::getCreateUser, AuthUtil.getUserId()));
 				} else if (AuthUtil.getUserRole().contains("业务员")) {
-					lambdaQueryWrapper.eq(Amends::getSrcId, AuthUtil.getUserId());
+					lambdaQueryWrapper.and(i -> i.eq(Amends::getSrcId, AuthUtil.getUserId()).or()
+						.eq(Amends::getCreateUser, AuthUtil.getUserId()));
 				} else {
 					lambdaQueryWrapper.eq(Amends::getCreateUser, AuthUtil.getUserId());
 				}

+ 28 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java

@@ -21,7 +21,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -163,7 +162,7 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 				return R.fail(500, "生成订单编号失败");
 			}
 			amends.setBillNo((String) clientBillNo.getData());
-			amends.setCreateTime(new Date());
+			//amends.setCreateTime(new Date());
 			amends.setCreateUser(AuthUtil.getUserId());
 			amends.setCreateUserName(AuthUtil.getUserName());
 			if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
@@ -180,7 +179,17 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 		if (ObjectUtils.isNotNull(amends.getFeeCenterList())) {
 			for (FeeCenter item : amends.getFeeCenterList()) {
 				item.setBillNo(amends.getBillNo());
-				item.setBillDate(amends.getBillDate());
+				if ("SEA".equals(amends.getBusinessType())){
+					item.setBillDate(amends.getEtd());
+				} else if ("SIA".equals(amends.getBusinessType())) {
+					item.setBillDate(amends.getEta());
+				} else if ("AEA".equals(amends.getBusinessType())) {
+					item.setBillDate(amends.getEtd());
+				} else if ("AIA".equals(amends.getBusinessType())) {
+					item.setBillDate(amends.getEta());
+				} else {
+					item.setBillDate(amends.getBillDate());
+				}
 				item.setSrcType(amends.getSrcType());
 				item.setSrcId(amends.getSrcId());
 				item.setSrcEnName(amends.getSrcEnName());
@@ -241,6 +250,22 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 			actId = 1112;
 			processType = "空运进口AMEND";
 			checkType = "aia-approve";
+		}else if ("EXPA".equals(declare.getBusinessType())) {
+			actId = 1129;
+			processType = "快递业务amend审核";
+			checkType = "EXPA";
+		}else if ("TRUCKA".equals(declare.getBusinessType())) {
+			actId = 1135;
+			processType = "海运派车amend审核";
+			checkType = "TRUCKA";
+		}else if ("MFAA".equals(declare.getBusinessType())) {
+			actId = 1133;
+			processType = "空运舱单amend审核";
+			checkType = "MFAA";
+		}else if ("MFSA".equals(declare.getBusinessType())) {
+			actId = 1131;
+			processType = "海运舱单amend审核";
+			checkType = "MFSA";
 		}
 		//审批数据
 		LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();

+ 49 - 10
blade-service/blade-los/src/main/java/org/springblade/los/business/generalBill/controller/GeneralBillController.java

@@ -16,25 +16,29 @@
  */
 package org.springblade.los.business.generalBill.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
 import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.los.business.sea.entity.Bills;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.business.generalBill.entity.GeneralBill;
-import org.springblade.los.business.generalBill.vo.GeneralBillVO;
 import org.springblade.los.business.generalBill.service.IGeneralBillService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.los.business.generalBill.vo.GeneralBillVO;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 业务-海、空运舱单,快递业务,海运派车 控制器
@@ -68,8 +72,34 @@ public class GeneralBillController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入generalBill")
 	public R<IPage<GeneralBill>> list(GeneralBill generalBill, Query query) {
-
-		IPage<GeneralBill> pages = generalBillService.page(Condition.getPage(query), Condition.getQueryWrapper(generalBill));
+		LambdaQueryWrapper<GeneralBill> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(GeneralBill::getTenantId, AuthUtil.getTenantId())
+			.eq(GeneralBill::getIsDeleted, 0)
+			.eq(GeneralBill::getBillType, generalBill.getBillType())
+			.eq(ObjectUtils.isNotNull(generalBill.getBusinessType()), GeneralBill::getBusinessType, generalBill.getBusinessType())
+			.like(ObjectUtils.isNotNull(generalBill.getBillNo()), GeneralBill::getBillNo, generalBill.getBillNo())
+			.like(ObjectUtils.isNotNull(generalBill.getMblno()), GeneralBill::getMblno, generalBill.getMblno())
+			.like(ObjectUtils.isNotNull(generalBill.getHblno()), GeneralBill::getHblno, generalBill.getHblno())
+			.like(ObjectUtils.isNotNull(generalBill.getRefno()), GeneralBill::getRefno, generalBill.getRefno())
+			.like(ObjectUtils.isNotNull(generalBill.getCreateUserName()), GeneralBill::getCreateUserName, generalBill.getCreateUserName())
+			.like(ObjectUtils.isNotNull(generalBill.getCommodityName()), GeneralBill::getCommodityName, generalBill.getCommodityName())
+			.and(ObjectUtils.isNotNull(generalBill.getVesselCnName()), i -> i.like(GeneralBill::getVesselCnName, generalBill.getVesselCnName()).or()
+				.like(GeneralBill::getVesselEnName, generalBill.getVesselCnName()))
+			.like(ObjectUtils.isNotNull(generalBill.getVoyageNo()), GeneralBill::getVoyageNo, generalBill.getVoyageNo())
+			.and(ObjectUtils.isNotNull(generalBill.getCorpCnName()), i -> i.like(GeneralBill::getCorpCnName, generalBill.getCorpCnName()).or()
+				.like(GeneralBill::getCorpEnName, generalBill.getCorpCnName()))
+			.and(ObjectUtils.isNotNull(generalBill.getPodCnName()), i -> i.like(GeneralBill::getPodCnName, generalBill.getPodCnName()).or()
+				.like(GeneralBill::getPodEnName, generalBill.getPodCnName()).or().like(GeneralBill::getPodCode, generalBill.getPodCnName()))
+			.apply(ObjectUtils.isNotNull(generalBill.getCreateDeptName()), "find_in_set('" + generalBill.getCreateDeptName() + "',create_dept_name)");
+		if (ObjectUtils.isNotNull(generalBill.getEtdList()) && !generalBill.getEtdList().isEmpty()) {
+			lambdaQueryWrapper.ge(GeneralBill::getEtd, generalBill.getEtdList().get(0));
+			lambdaQueryWrapper.le(GeneralBill::getEtd, generalBill.getEtdList().get(1));
+		}
+		if (ObjectUtils.isNotNull(generalBill.getEtaList()) && !generalBill.getEtaList().isEmpty()) {
+			lambdaQueryWrapper.ge(GeneralBill::getEta, generalBill.getEtaList().get(0));
+			lambdaQueryWrapper.le(GeneralBill::getEta, generalBill.getEtaList().get(1));
+		}
+		IPage<GeneralBill> pages = generalBillService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -145,5 +175,14 @@ public class GeneralBillController extends BladeController {
 		return R.data(declare);
 	}
 
+	/**
+	 * amend获取单据数据
+	 */
+	@GetMapping("/getDetail")
+	public R<List<GeneralBill>> getDetail(GeneralBill bills) {
+		List<GeneralBill> detail = generalBillService.getDetail(bills);
+		return R.data(detail);
+	}
+
 
 }

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/generalBill/service/IGeneralBillService.java

@@ -22,6 +22,8 @@ import org.springblade.los.business.generalBill.vo.GeneralBillVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 业务-海、空运舱单,快递业务,海运派车 服务类
  *
@@ -46,4 +48,6 @@ public interface IGeneralBillService extends IService<GeneralBill> {
 	GeneralBill checkBills(GeneralBill generalBill);
 
 	GeneralBill revokeCheckOrder(GeneralBill generalBill);
+
+	List<GeneralBill> getDetail(GeneralBill bills);
 }

+ 52 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/generalBill/service/impl/GeneralBillServiceImpl.java

@@ -308,10 +308,10 @@ public class GeneralBillServiceImpl extends ServiceImpl<GeneralBillMapper, Gener
 		Integer actId = null;
 		String processType = "";
 		String checkType = "";
-		if ("MFS".equals(declare.getBillType())) {
+		if ("SECMS".equals(declare.getBillType())) {
 			actId = 1130;
 			processType = "海运舱单审核";
-			checkType = "MFS";
+			checkType = "SECMS";
 		} else if ("MFA".equals(declare.getBillType())) {
 			actId = 1132;
 			processType = "空运舱单审核";
@@ -442,4 +442,54 @@ public class GeneralBillServiceImpl extends ServiceImpl<GeneralBillMapper, Gener
 		return declare;
 	}
 
+	@Override
+	public List<GeneralBill> getDetail(GeneralBill bills) {
+		if (ObjectUtils.isNull(bills.getMblno()) &&
+			ObjectUtils.isNull(bills.getHblno()) &&
+			ObjectUtils.isNull(bills.getRefno())
+		) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		LambdaQueryWrapper<GeneralBill> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getBillType()), GeneralBill::getBillType, bills.getBillType())
+			.like(ObjectUtils.isNotNull(bills.getMblno()), GeneralBill::getMblno, bills.getMblno())
+			.like(ObjectUtils.isNotNull(bills.getHblno()), GeneralBill::getHblno, bills.getHblno())
+			.like(ObjectUtils.isNotNull(bills.getRefno()), GeneralBill::getRefno, bills.getRefno())
+			.eq(GeneralBill::getIsDeleted, 0)
+			.eq(GeneralBill::getTenantId, AuthUtil.getTenantId())
+			.eq(GeneralBill::getStatus, 3);
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
+			lambdaQueryWrapper.apply("find_in_set(team_id,'" + AuthUtil.getPostId() + "')");
+		}
+		if (!AuthUtil.getUserRole().contains("admin")) {
+			lambdaQueryWrapper.eq(GeneralBill::getBranchId, deptUtils.getDeptPid());
+		}
+		List<GeneralBill> billsList = baseMapper.selectList(lambdaQueryWrapper);
+		if (billsList.isEmpty()) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		for (GeneralBill detail : billsList) {
+			detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getBillType, detail.getBillType())
+				.eq(FeeCenter::getPid, detail.getId())
+				.eq(FeeCenter::getDc, "C")
+				.eq(FeeCenter::getAccStatus, 1)
+				.eq(FeeCenter::getBillNo, detail.getBillNo())
+			));
+			detail.setFeeCenterListD(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getBillType, detail.getBillType())
+				.eq(FeeCenter::getPid, detail.getId())
+				.eq(FeeCenter::getDc, "D")
+				.eq(FeeCenter::getAccStatus, 1)
+				.eq(FeeCenter::getBillNo, detail.getBillNo())
+			));
+		}
+
+		return billsList;
+	}
+
 }

+ 458 - 60
blade-service/blade-los/src/main/java/org/springblade/los/business/locks/service/impl/BillLocksServiceImpl.java

@@ -23,6 +23,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.business.aea.entity.AeaBills;
+import org.springblade.los.business.aea.service.IAeaBillsService;
+import org.springblade.los.business.customsDeclaration.entity.CustomsDeclaration;
+import org.springblade.los.business.customsDeclaration.service.ICustomsDeclarationService;
 import org.springblade.los.business.locks.entity.BillLocks;
 import org.springblade.los.business.locks.mapper.BillLocksMapper;
 import org.springblade.los.business.locks.service.IBillLocksService;
@@ -31,9 +35,12 @@ import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.service.IBillsService;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 业务-业务加解锁明细,各分公司独立 服务实现类
@@ -45,16 +52,19 @@ import java.util.List;
 @AllArgsConstructor
 public class BillLocksServiceImpl extends ServiceImpl<BillLocksMapper, BillLocks> implements IBillLocksService {
 
-	private final ISysClient sysClient;
-
 	private final IBillsService billsService;
 
+	private final IAeaBillsService aeaBillsService;
+
+	private final ICustomsDeclarationService customsDeclarationService;
+
 	@Override
 	public IPage<BillLocksVO> selectBillLocksPage(IPage<BillLocksVO> page, BillLocksVO billLocks) {
 		return page.setRecords(baseMapper.selectBillLocksPage(page, billLocks));
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R submitLock(BillLocks billLocks) {
 		if (ObjectUtils.isNull(billLocks.getSrcId())) {
 			throw new RuntimeException("缺少必要参数");
@@ -62,72 +72,460 @@ public class BillLocksServiceImpl extends ServiceImpl<BillLocksMapper, BillLocks
 		if (ObjectUtils.isNull(billLocks.getBusinessType())) {
 			throw new RuntimeException("缺少必要参数");
 		}
-		BillLocks detail = baseMapper.selectOne(new LambdaQueryWrapper<BillLocks>()
-			.eq(BillLocks::getTenantId, AuthUtil.getTenantId())
-			.eq(BillLocks::getIsDeleted, 0)
-			.eq(BillLocks::getSrcId, billLocks.getSrcId()));
-		if ("HYCK,HYJK".contains(billLocks.getBusinessType())) {
-			Bills bills = billsService.getById(billLocks.getSrcId());
-			if (bills == null) {
-				throw new RuntimeException("未查到单据信息");
-			}
-			if (detail != null) {
-				detail.setUpdateTime(new Date());
-				detail.setUpdateUser(AuthUtil.getUserId());
-				detail.setUpdateUserName(AuthUtil.getUserName());
-				detail.setBranchId(bills.getBranchId());
-				detail.setBillNo(bills.getBillNo());
-				detail.setBillDate(bills.getBillDate());
-				detail.setBusinessTypeName(billLocks.getBusinessType());
-				detail.setSrcBillNo(bills.getBillNo());
-				detail.setSrcVesselId(bills.getVesselId());
-				detail.setSrcVesselCnName(bills.getVesselCnName());
-				detail.setSrcVesselEnName(bills.getVesselEnName());
-				detail.setSrcVoyageNo(bills.getVoyageNo());
-				detail.setSrcMblno(bills.getMblno());
-				detail.setSrcRefno(bills.getRefno());
-				detail.setSrcTeamId(Long.parseLong(bills.getTeamId()));
-				detail.setSrcTeamName(bills.getTeamName());
-				detail.setLocked(0);
-				detail.setOperatorId(bills.getOperatorId());
-				detail.setOperatorName(bills.getOperatorName());
-				baseMapper.updateById(detail);
+		List<BillLocks> billLocksList = new ArrayList<>();
+		List<Bills> billsList = new ArrayList<>();
+		List<AeaBills> aeaBillsList = new ArrayList<>();
+		List<CustomsDeclaration> customsDeclarationList = new ArrayList<>();
+		 if ("整船".equals(billLocks.getType())) {
+			if ("HYCK,HYJK".contains(billLocks.getBusinessType())) {
+				Bills bills = billsService.getById(billLocks.getSrcId());
+				if (bills == null) {
+					throw new RuntimeException("未查到单据信息");
+				}
+				List<Bills> billsWholeList = billsService.list(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getVesselId, bills.getVesselId())
+					.eq(Bills::getVoyageNo, bills.getVoyageNo())
+					.eq(Bills::getBranchId, bills.getBranchId())
+					.eq(Bills::getTeamId, bills.getTeamId()));
+				List<Long> idList = billsWholeList.stream().map(Bills::getId).collect(Collectors.toList());
+				if (!idList.isEmpty()) {
+					List<BillLocks> detailList = baseMapper.selectList(new LambdaQueryWrapper<BillLocks>()
+						.eq(BillLocks::getTenantId, AuthUtil.getTenantId())
+						.eq(BillLocks::getIsDeleted, 0)
+						.in(BillLocks::getSrcId, idList));
+					for (Bills item : billsWholeList) {
+						if (!detailList.isEmpty()) {
+							BillLocks detail = detailList.stream().filter(e -> e.getSrcId().equals(item.getId()))
+								.findFirst().orElse(null);
+							if (detail != null) {
+								detail.setUpdateTime(new Date());
+								detail.setUpdateUser(AuthUtil.getUserId());
+								detail.setUpdateUserName(AuthUtil.getUserName());
+								detail.setBranchId(item.getBranchId());
+								detail.setBillNo(item.getBillNo());
+								detail.setBillDate(item.getBillDate());
+								detail.setBusinessTypeName(billLocks.getBusinessType());
+								detail.setSrcBillNo(item.getBillNo());
+								detail.setSrcVesselId(item.getVesselId());
+								detail.setSrcVesselCnName(item.getVesselCnName());
+								detail.setSrcVesselEnName(item.getVesselEnName());
+								detail.setSrcVoyageNo(item.getVoyageNo());
+								detail.setSrcMblno(item.getMblno());
+								detail.setSrcRefno(item.getRefno());
+								detail.setSrcTeamId(Long.parseLong(item.getTeamId()));
+								detail.setSrcTeamName(item.getTeamName());
+								detail.setLocked(0);
+								detail.setOperatorId(item.getOperatorId());
+								detail.setOperatorName(item.getOperatorName());
+								billLocksList.add(detail);
+							} else {
+								BillLocks billLocks1 = new BillLocks();
+								billLocks1.setCreateTime(new Date());
+								billLocks1.setCreateUser(AuthUtil.getUserId());
+								billLocks1.setCreateUserName(AuthUtil.getUserName());
+								billLocks1.setBranchId(item.getBranchId());
+								billLocks1.setBillNo(item.getBillNo());
+								billLocks1.setBillDate(item.getBillDate());
+								billLocks1.setBusinessTypeName(billLocks.getBusinessType());
+								billLocks1.setBusinessType(billLocks.getBusinessType());
+								billLocks1.setSrcId(item.getId());
+								billLocks1.setSrcBillNo(item.getBillNo());
+								billLocks1.setSrcVesselId(item.getVesselId());
+								billLocks1.setSrcVesselCnName(item.getVesselCnName());
+								billLocks1.setSrcVesselEnName(item.getVesselEnName());
+								billLocks1.setSrcVoyageNo(item.getVoyageNo());
+								billLocks1.setSrcMblno(item.getMblno());
+								billLocks1.setSrcRefno(item.getRefno());
+								billLocks1.setSrcTeamId(Long.parseLong(item.getTeamId()));
+								billLocks1.setSrcTeamName(item.getTeamName());
+								billLocks1.setLocked(0);
+								billLocks1.setUnlockedCount(0);
+								billLocks1.setOperatorId(item.getOperatorId());
+								billLocks1.setOperatorName(item.getOperatorName());
+								billLocksList.add(billLocks1);
+							}
+						} else {
+							BillLocks billLocks1 = new BillLocks();
+							billLocks1.setCreateTime(new Date());
+							billLocks1.setCreateUser(AuthUtil.getUserId());
+							billLocks1.setCreateUserName(AuthUtil.getUserName());
+							billLocks1.setBranchId(item.getBranchId());
+							billLocks1.setBillNo(item.getBillNo());
+							billLocks1.setBillDate(item.getBillDate());
+							billLocks1.setBusinessTypeName(billLocks.getBusinessType());
+							billLocks1.setBusinessType(billLocks.getBusinessType());
+							billLocks1.setSrcId(item.getId());
+							billLocks1.setSrcBillNo(item.getBillNo());
+							billLocks1.setSrcVesselId(item.getVesselId());
+							billLocks1.setSrcVesselCnName(item.getVesselCnName());
+							billLocks1.setSrcVesselEnName(item.getVesselEnName());
+							billLocks1.setSrcVoyageNo(item.getVoyageNo());
+							billLocks1.setSrcMblno(item.getMblno());
+							billLocks1.setSrcRefno(item.getRefno());
+							billLocks1.setSrcTeamId(Long.parseLong(item.getTeamId()));
+							billLocks1.setSrcTeamName(item.getTeamName());
+							billLocks1.setLocked(0);
+							billLocks1.setUnlockedCount(0);
+							billLocks1.setOperatorId(item.getOperatorId());
+							billLocks1.setOperatorName(item.getOperatorName());
+							billLocksList.add(billLocks1);
+						}
+						item.setLocked(1);
+						billsList.add(item);
+					}
+				}
+			} else if ("KYCK,KYJK".contains(billLocks.getBusinessType())) {
+				AeaBills bills = aeaBillsService.getById(billLocks.getSrcId());
+				if (bills == null) {
+					throw new RuntimeException("未查到单据信息");
+				}
+				List<AeaBills> billsWholeList = aeaBillsService.list(new LambdaQueryWrapper<AeaBills>()
+					.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
+					.eq(AeaBills::getIsDeleted, 0)
+					.eq(AeaBills::getVoyageNo, bills.getVoyageNo())
+					.eq(AeaBills::getBranchId, bills.getBranchId())
+					.eq(AeaBills::getTeamId, bills.getTeamId()));
+				List<Long> idList = billsWholeList.stream().map(AeaBills::getId).collect(Collectors.toList());
+				if (!idList.isEmpty()) {
+					List<BillLocks> detailList = baseMapper.selectList(new LambdaQueryWrapper<BillLocks>()
+						.eq(BillLocks::getTenantId, AuthUtil.getTenantId())
+						.eq(BillLocks::getIsDeleted, 0)
+						.in(BillLocks::getSrcId, idList));
+					for (AeaBills item : billsWholeList) {
+						if (!detailList.isEmpty()) {
+							BillLocks detail = detailList.stream().filter(e -> e.getSrcId().equals(item.getId()))
+								.findFirst().orElse(null);
+							if (detail != null) {
+								detail.setUpdateTime(new Date());
+								detail.setUpdateUser(AuthUtil.getUserId());
+								detail.setUpdateUserName(AuthUtil.getUserName());
+								detail.setBranchId(item.getBranchId());
+								detail.setBillNo(item.getBillNo());
+								detail.setBillDate(item.getBillDate());
+								detail.setBusinessTypeName(billLocks.getBusinessType());
+								detail.setSrcBillNo(item.getBillNo());
+								detail.setSrcVoyageNo(item.getVoyageNo());
+								detail.setSrcMblno(item.getMblno());
+								detail.setSrcRefno(item.getRefno());
+								detail.setSrcTeamId(Long.parseLong(item.getTeamId()));
+								detail.setSrcTeamName(item.getTeamName());
+								detail.setLocked(0);
+								detail.setOperatorId(item.getOperatorId());
+								detail.setOperatorName(item.getOperatorName());
+								billLocksList.add(detail);
+							} else {
+								BillLocks billLocks1 = new BillLocks();
+								billLocks1.setCreateTime(new Date());
+								billLocks1.setCreateUser(AuthUtil.getUserId());
+								billLocks1.setCreateUserName(AuthUtil.getUserName());
+								billLocks1.setBranchId(item.getBranchId());
+								billLocks1.setBillNo(item.getBillNo());
+								billLocks1.setBillDate(item.getBillDate());
+								billLocks1.setBusinessTypeName(billLocks.getBusinessType());
+								billLocks1.setBusinessType(billLocks.getBusinessType());
+								billLocks1.setSrcId(item.getId());
+								billLocks1.setSrcBillNo(item.getBillNo());
+								billLocks1.setSrcVoyageNo(item.getVoyageNo());
+								billLocks1.setSrcMblno(item.getMblno());
+								billLocks1.setSrcRefno(item.getRefno());
+								billLocks1.setSrcTeamId(Long.parseLong(item.getTeamId()));
+								billLocks1.setSrcTeamName(item.getTeamName());
+								billLocks1.setLocked(0);
+								billLocks1.setUnlockedCount(0);
+								billLocks1.setOperatorId(item.getOperatorId());
+								billLocks1.setOperatorName(item.getOperatorName());
+								billLocksList.add(billLocks1);
+							}
+						} else {
+							BillLocks billLocks1 = new BillLocks();
+							billLocks1.setCreateTime(new Date());
+							billLocks1.setCreateUser(AuthUtil.getUserId());
+							billLocks1.setCreateUserName(AuthUtil.getUserName());
+							billLocks1.setBranchId(item.getBranchId());
+							billLocks1.setBillNo(item.getBillNo());
+							billLocks1.setBillDate(item.getBillDate());
+							billLocks1.setBusinessTypeName(billLocks.getBusinessType());
+							billLocks1.setBusinessType(billLocks.getBusinessType());
+							billLocks1.setSrcId(item.getId());
+							billLocks1.setSrcBillNo(item.getBillNo());
+							billLocks1.setSrcVoyageNo(item.getVoyageNo());
+							billLocks1.setSrcMblno(item.getMblno());
+							billLocks1.setSrcRefno(item.getRefno());
+							billLocks1.setSrcTeamId(Long.parseLong(item.getTeamId()));
+							billLocks1.setSrcTeamName(item.getTeamName());
+							billLocks1.setLocked(0);
+							billLocks1.setUnlockedCount(0);
+							billLocks1.setOperatorId(item.getOperatorId());
+							billLocks1.setOperatorName(item.getOperatorName());
+							billLocksList.add(billLocks1);
+						}
+						item.setLocked(1);
+						aeaBillsList.add(item);
+					}
+				}
+			} else if ("BGSE,BGSI,BGAE,BGAI".contains(billLocks.getBusinessType())) {
+				CustomsDeclaration bills = customsDeclarationService.getById(billLocks.getSrcId());
+				if (bills == null) {
+					throw new RuntimeException("未查到单据信息");
+				}
+				List<CustomsDeclaration> billsWholeList = customsDeclarationService.list(new LambdaQueryWrapper<CustomsDeclaration>()
+					.eq(CustomsDeclaration::getTenantId, AuthUtil.getTenantId())
+					.eq(CustomsDeclaration::getIsDeleted, 0)
+					.eq(CustomsDeclaration::getVesselId, bills.getVesselId())
+					.eq(CustomsDeclaration::getBranchId, bills.getBranchId())
+					.eq(CustomsDeclaration::getTeamId, bills.getTeamId()));
+				List<Long> idList = billsWholeList.stream().map(CustomsDeclaration::getId).collect(Collectors.toList());
+				if (!idList.isEmpty()) {
+					List<BillLocks> detailList = baseMapper.selectList(new LambdaQueryWrapper<BillLocks>()
+						.eq(BillLocks::getTenantId, AuthUtil.getTenantId())
+						.eq(BillLocks::getIsDeleted, 0)
+						.in(BillLocks::getSrcId, idList));
+					for (CustomsDeclaration item : billsWholeList) {
+						if (!detailList.isEmpty()) {
+							BillLocks detail = detailList.stream().filter(e -> e.getSrcId().equals(item.getId()))
+								.findFirst().orElse(null);
+							if (detail != null) {
+								detail.setUpdateTime(new Date());
+								detail.setUpdateUser(AuthUtil.getUserId());
+								detail.setUpdateUserName(AuthUtil.getUserName());
+								detail.setBranchId(item.getBranchId());
+								detail.setBillNo(item.getBillNo());
+								detail.setBillDate(item.getBillDate());
+								detail.setBusinessTypeName(billLocks.getBusinessType());
+								detail.setSrcBillNo(item.getBillNo());
+								detail.setSrcVesselId(item.getVesselId());
+								detail.setSrcVesselCnName(item.getVesselCnName());
+								detail.setSrcVesselEnName(item.getVesselEnName());
+								detail.setSrcMblno(item.getMblno());
+								detail.setSrcRefno(item.getRefno());
+								detail.setSrcTeamId(item.getTeamId());
+								detail.setSrcTeamName(item.getTeamName());
+								detail.setLocked(0);
+								billLocksList.add(detail);
+							} else {
+								BillLocks billLocks1 = new BillLocks();
+								billLocks1.setCreateTime(new Date());
+								billLocks1.setCreateUser(AuthUtil.getUserId());
+								billLocks1.setCreateUserName(AuthUtil.getUserName());
+								billLocks1.setBranchId(item.getBranchId());
+								billLocks1.setBillNo(item.getBillNo());
+								billLocks1.setBillDate(item.getBillDate());
+								billLocks1.setBusinessTypeName(billLocks.getBusinessType());
+								billLocks1.setBusinessType(billLocks.getBusinessType());
+								billLocks1.setSrcId(item.getId());
+								billLocks1.setSrcBillNo(item.getBillNo());
+								billLocks1.setSrcVesselId(item.getVesselId());
+								billLocks1.setSrcVesselCnName(item.getVesselCnName());
+								billLocks1.setSrcVesselEnName(item.getVesselEnName());
+								billLocks1.setSrcMblno(item.getMblno());
+								billLocks1.setSrcRefno(item.getRefno());
+								billLocks1.setSrcTeamId(item.getTeamId());
+								billLocks1.setSrcTeamName(item.getTeamName());
+								billLocks1.setLocked(0);
+								billLocks1.setUnlockedCount(0);
+								billLocksList.add(billLocks1);
+							}
+						} else {
+							BillLocks billLocks1 = new BillLocks();
+							billLocks1.setCreateTime(new Date());
+							billLocks1.setCreateUser(AuthUtil.getUserId());
+							billLocks1.setCreateUserName(AuthUtil.getUserName());
+							billLocks1.setBranchId(item.getBranchId());
+							billLocks1.setBillNo(item.getBillNo());
+							billLocks1.setBillDate(item.getBillDate());
+							billLocks1.setBusinessTypeName(billLocks.getBusinessType());
+							billLocks1.setBusinessType(billLocks.getBusinessType());
+							billLocks1.setSrcId(item.getId());
+							billLocks1.setSrcBillNo(item.getBillNo());
+							billLocks1.setSrcVesselId(item.getVesselId());
+							billLocks1.setSrcVesselCnName(item.getVesselCnName());
+							billLocks1.setSrcVesselEnName(item.getVesselEnName());
+							billLocks1.setSrcMblno(item.getMblno());
+							billLocks1.setSrcRefno(item.getRefno());
+							billLocks1.setSrcTeamId(item.getTeamId());
+							billLocks1.setSrcTeamName(item.getTeamName());
+							billLocks1.setLocked(0);
+							billLocks1.setUnlockedCount(0);
+							billLocksList.add(billLocks1);
+						}
+						item.setLocked(1);
+						customsDeclarationList.add(item);
+					}
+				}
 			} else {
-				billLocks.setCreateTime(new Date());
-				billLocks.setCreateUser(AuthUtil.getUserId());
-				billLocks.setCreateUserName(AuthUtil.getUserName());
-				billLocks.setBranchId(bills.getBranchId());
-				billLocks.setBillNo(bills.getBillNo());
-				billLocks.setBillDate(bills.getBillDate());
-				billLocks.setBusinessTypeName(billLocks.getBusinessType());
-				billLocks.setSrcBillNo(bills.getBillNo());
-				billLocks.setSrcVesselId(bills.getVesselId());
-				billLocks.setSrcVesselCnName(bills.getVesselCnName());
-				billLocks.setSrcVesselEnName(bills.getVesselEnName());
-				billLocks.setSrcVoyageNo(bills.getVoyageNo());
-				billLocks.setSrcMblno(bills.getMblno());
-				billLocks.setSrcRefno(bills.getRefno());
-				billLocks.setSrcTeamId(Long.parseLong(bills.getTeamId()));
-				billLocks.setSrcTeamName(bills.getTeamName());
-				billLocks.setLocked(0);
-				billLocks.setUnlockedCount(0);
-				billLocks.setOperatorId(bills.getOperatorId());
-				billLocks.setOperatorName(bills.getOperatorName());
-				baseMapper.insert(billLocks);
+				throw new RuntimeException("业务类型错误,请联系管理员");
 			}
-			bills.setLocked(1);
-			billsService.updateById(bills);
-		} else if ("KYCK,KYJK".contains(billLocks.getBusinessType())) {
-
-		} else if ("BGSE,BGSI,BGAE,BGAI".contains(billLocks.getBusinessType())) {
-
 		} else {
-			throw new RuntimeException("业务类型错误,请联系管理员");
+			 BillLocks detail = baseMapper.selectOne(new LambdaQueryWrapper<BillLocks>()
+				 .eq(BillLocks::getTenantId, AuthUtil.getTenantId())
+				 .eq(BillLocks::getIsDeleted, 0)
+				 .eq(BillLocks::getSrcId, billLocks.getSrcId()));
+			 if ("HYCK,HYJK".contains(billLocks.getBusinessType())) {
+				 Bills bills = billsService.getById(billLocks.getSrcId());
+				 if (bills == null) {
+					 throw new RuntimeException("未查到单据信息");
+				 }
+				 if (detail != null) {
+					 detail.setUpdateTime(new Date());
+					 detail.setUpdateUser(AuthUtil.getUserId());
+					 detail.setUpdateUserName(AuthUtil.getUserName());
+					 detail.setBranchId(bills.getBranchId());
+					 detail.setBillNo(bills.getBillNo());
+					 detail.setBillDate(bills.getBillDate());
+					 detail.setBusinessTypeName(billLocks.getBusinessType());
+					 detail.setSrcBillNo(bills.getBillNo());
+					 detail.setSrcVesselId(bills.getVesselId());
+					 detail.setSrcVesselCnName(bills.getVesselCnName());
+					 detail.setSrcVesselEnName(bills.getVesselEnName());
+					 detail.setSrcVoyageNo(bills.getVoyageNo());
+					 detail.setSrcMblno(bills.getMblno());
+					 detail.setSrcRefno(bills.getRefno());
+					 detail.setSrcTeamId(Long.parseLong(bills.getTeamId()));
+					 detail.setSrcTeamName(bills.getTeamName());
+					 detail.setLocked(0);
+					 detail.setOperatorId(bills.getOperatorId());
+					 detail.setOperatorName(bills.getOperatorName());
+					 billLocksList.add(detail);
+				 } else {
+					 billLocks.setCreateTime(new Date());
+					 billLocks.setCreateUser(AuthUtil.getUserId());
+					 billLocks.setCreateUserName(AuthUtil.getUserName());
+					 billLocks.setBranchId(bills.getBranchId());
+					 billLocks.setBillNo(bills.getBillNo());
+					 billLocks.setBillDate(bills.getBillDate());
+					 billLocks.setBusinessTypeName(billLocks.getBusinessType());
+					 billLocks.setSrcBillNo(bills.getBillNo());
+					 billLocks.setSrcVesselId(bills.getVesselId());
+					 billLocks.setSrcVesselCnName(bills.getVesselCnName());
+					 billLocks.setSrcVesselEnName(bills.getVesselEnName());
+					 billLocks.setSrcVoyageNo(bills.getVoyageNo());
+					 billLocks.setSrcMblno(bills.getMblno());
+					 billLocks.setSrcRefno(bills.getRefno());
+					 billLocks.setSrcTeamId(Long.parseLong(bills.getTeamId()));
+					 billLocks.setSrcTeamName(bills.getTeamName());
+					 billLocks.setLocked(0);
+					 billLocks.setUnlockedCount(0);
+					 billLocks.setOperatorId(bills.getOperatorId());
+					 billLocks.setOperatorName(bills.getOperatorName());
+					 billLocksList.add(billLocks);
+				 }
+				 bills.setLocked(1);
+				 billsList.add(bills);
+			 } else if ("KYCK,KYJK".contains(billLocks.getBusinessType())) {
+				 AeaBills bills = aeaBillsService.getById(billLocks.getSrcId());
+				 if (bills == null) {
+					 throw new RuntimeException("未查到单据信息");
+				 }
+				 if (detail != null) {
+					 detail.setUpdateTime(new Date());
+					 detail.setUpdateUser(AuthUtil.getUserId());
+					 detail.setUpdateUserName(AuthUtil.getUserName());
+					 detail.setBranchId(bills.getBranchId());
+					 detail.setBillNo(bills.getBillNo());
+					 detail.setBillDate(bills.getBillDate());
+					 detail.setBusinessTypeName(billLocks.getBusinessType());
+					 detail.setSrcBillNo(bills.getBillNo());
+					 detail.setSrcVoyageNo(bills.getVoyageNo());
+					 detail.setSrcMblno(bills.getMblno());
+					 detail.setSrcRefno(bills.getRefno());
+					 detail.setSrcTeamId(Long.parseLong(bills.getTeamId()));
+					 detail.setSrcTeamName(bills.getTeamName());
+					 detail.setLocked(0);
+					 detail.setOperatorId(bills.getOperatorId());
+					 detail.setOperatorName(bills.getOperatorName());
+					 billLocksList.add(detail);
+				 }
+				 else {
+					 billLocks.setCreateTime(new Date());
+					 billLocks.setCreateUser(AuthUtil.getUserId());
+					 billLocks.setCreateUserName(AuthUtil.getUserName());
+					 billLocks.setBranchId(bills.getBranchId());
+					 billLocks.setBillNo(bills.getBillNo());
+					 billLocks.setBillDate(bills.getBillDate());
+					 billLocks.setBusinessTypeName(billLocks.getBusinessType());
+					 billLocks.setSrcBillNo(bills.getBillNo());
+					 billLocks.setSrcVoyageNo(bills.getVoyageNo());
+					 billLocks.setSrcMblno(bills.getMblno());
+					 billLocks.setSrcRefno(bills.getRefno());
+					 billLocks.setSrcTeamId(Long.parseLong(bills.getTeamId()));
+					 billLocks.setSrcTeamName(bills.getTeamName());
+					 billLocks.setLocked(0);
+					 billLocks.setUnlockedCount(0);
+					 billLocks.setOperatorId(bills.getOperatorId());
+					 billLocks.setOperatorName(bills.getOperatorName());
+					 billLocksList.add(billLocks);
+				 }
+				 bills.setLocked(1);
+				 aeaBillsList.add(bills);
+			 } else if ("BGSE,BGSI,BGAE,BGAI".contains(billLocks.getBusinessType())) {
+				 CustomsDeclaration bills = customsDeclarationService.getById(billLocks.getSrcId());
+				 if (bills == null) {
+					 throw new RuntimeException("未查到单据信息");
+				 }
+				 if (detail != null) {
+					 detail.setUpdateTime(new Date());
+					 detail.setUpdateUser(AuthUtil.getUserId());
+					 detail.setUpdateUserName(AuthUtil.getUserName());
+					 detail.setBranchId(bills.getBranchId());
+					 detail.setBillNo(bills.getBillNo());
+					 detail.setBillDate(bills.getBillDate());
+					 detail.setBusinessTypeName(billLocks.getBusinessType());
+					 detail.setSrcBillNo(bills.getBillNo());
+					 detail.setSrcVesselId(bills.getVesselId());
+					 detail.setSrcVesselCnName(bills.getVesselCnName());
+					 detail.setSrcVesselEnName(bills.getVesselEnName());
+					 detail.setSrcMblno(bills.getMblno());
+					 detail.setSrcRefno(bills.getRefno());
+					 detail.setSrcTeamId(bills.getTeamId());
+					 detail.setSrcTeamName(bills.getTeamName());
+					 detail.setLocked(0);
+					 billLocksList.add(detail);
+				 }
+				 else {
+					 billLocks.setCreateTime(new Date());
+					 billLocks.setCreateUser(AuthUtil.getUserId());
+					 billLocks.setCreateUserName(AuthUtil.getUserName());
+					 billLocks.setBranchId(bills.getBranchId());
+					 billLocks.setBillNo(bills.getBillNo());
+					 billLocks.setBillDate(bills.getBillDate());
+					 billLocks.setBusinessTypeName(billLocks.getBusinessType());
+					 billLocks.setSrcBillNo(bills.getBillNo());
+					 billLocks.setSrcVesselId(bills.getVesselId());
+					 billLocks.setSrcVesselCnName(bills.getVesselCnName());
+					 billLocks.setSrcVesselEnName(bills.getVesselEnName());
+					 billLocks.setSrcMblno(bills.getMblno());
+					 billLocks.setSrcRefno(bills.getRefno());
+					 billLocks.setSrcTeamId(bills.getTeamId());
+					 billLocks.setSrcTeamName(bills.getTeamName());
+					 billLocks.setLocked(0);
+					 billLocks.setUnlockedCount(0);
+					 billLocksList.add(billLocks);
+				 }
+				 bills.setLocked(1);
+				 customsDeclarationList.add(bills);
+			 } else {
+				 throw new RuntimeException("业务类型错误,请联系管理员");
+			 }
+		}
+		if (!billLocksList.isEmpty()) {
+			this.saveOrUpdateBatch(billLocksList);
+		}
+		if (!billsList.isEmpty()) {
+			billsService.updateBatchById(billsList);
+		}
+		if (!aeaBillsList.isEmpty()) {
+			aeaBillsService.updateBatchById(aeaBillsList);
+		}
+		if (!customsDeclarationList.isEmpty()) {
+			customsDeclarationService.updateBatchById(customsDeclarationList);
 		}
 		return R.data("操作成功");
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R unlock(String ids) {
 		List<BillLocks> billLocksList = baseMapper.selectList(new LambdaQueryWrapper<BillLocks>()
 			.eq(BillLocks::getTenantId, AuthUtil.getTenantId())

+ 122 - 50
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -183,12 +183,50 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (ObjectUtils.isNotNull(bills.getMblno())) {
 			bills.setMblno(bills.getMblno().replaceAll(" ", ""));
 		}
-		List<Bills> count = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
-			.select(Bills::getId)
-			.eq(Bills::getCreateDept, branchId)
-			.eq(Bills::getTenantId, AuthUtil.getTenantId())
-			.eq(Bills::getIsDeleted, 0)
-			.eq(Bills::getMblno, bills.getMblno()));
+
+		// List<Bills> count = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+		// 	.select(Bills::getId)
+		// 	.eq(Bills::getCreateDept, branchId)
+		// 	.eq(Bills::getTenantId, AuthUtil.getTenantId())
+		// 	.eq(Bills::getIsDeleted, 0)
+		// 	.eq(Bills::getMblno, bills.getMblno()));
+
+		List<Bills> count = null;
+		// 只判断海运出口
+		if("SE".equals(bills.getBusinessType()) && ObjectUtils.isNotNull(bills.getMblno())){
+			// 改为同一团队内,Booking+MblNo 不重复
+			LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.select(Bills::getId);
+			// CreateDept 是一级部门,总公司,分公司等
+			lambdaQueryWrapper.eq(Bills::getCreateDept, branchId)
+				 .eq(Bills::getTenantId, AuthUtil.getTenantId())
+				 .eq(Bills::getIsDeleted, 0)
+				 .eq(Bills::getTeamId, bills.getTeamId())
+				 .eq(Bills::getMblno, bills.getMblno());
+			if(ObjectUtils.isNotNull(bills.getBookingNo())) {
+				lambdaQueryWrapper.eq(Bills::getBookingNo, bills.getBookingNo());
+			}
+			if(ObjectUtils.isNotNull(bills.getId())) {
+				lambdaQueryWrapper.ne(Bills::getId, bills.getId());
+			}
+
+			List<String> billTypes = new ArrayList<>();
+			if("DDMM".contains(bills.getBillType())){
+				billTypes.add("DD");
+				billTypes.add("MM");
+			}else{
+				billTypes.add("MH");
+				billTypes.add("HH");
+			}
+			lambdaQueryWrapper.in(Bills::getBillType, billTypes);
+
+			count = baseMapper.selectList(lambdaQueryWrapper);
+		}
+
+		if(ObjectUtils.isNotNull(count) && count.size()>0){
+			throw new RuntimeException("提单号不允许重复输入:" + bills.getMblno());
+		}
+
 		if ("SE".equals(bills.getBusinessType())) {
 			bills.setBillDate(bills.getEtd());
 		} else {
@@ -260,13 +298,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			}
 		}
 		if (bills.getId() == null) {
-			if (!"MH".equals(bills.getBillType())) {
-				if (ObjectUtils.isNotNull(bills.getMblno())) {
-					if (!count.isEmpty()) {
-						throw new RuntimeException("提单号不允许重复:" + bills.getMblno());
-					}
-				}
-			}
+			// if (!"MH".equals(bills.getBillType())) {
+			// 	if (ObjectUtils.isNotNull(bills.getMblno())) {
+			// 		if (!count.isEmpty()) {
+			// 			throw new RuntimeException("提单号不允许重复:" + bills.getMblno());
+			// 		}
+			// 	}
+			// }
 			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
 				.select(BusinessType::getId)
 				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
@@ -313,14 +351,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			// 旧数据处理
 			int version = StringUtil.isBlank(dataSourceBill.getVersion()) ? 1 : Integer.parseInt(dataSourceBill.getVersion());
 			bills.setVersion(String.valueOf(version + 1));
-			List<Long> ids = count.stream().map(Bills::getId).distinct().collect(Collectors.toList());
-			if (!"MH".equals(bills.getBillType())) {
-				if (ObjectUtils.isNotNull(bills.getMblno())) {
-					if (!count.isEmpty() && !ids.contains(bills.getId())) {
-						throw new RuntimeException("提单号不允许重复:" + bills.getMblno());
-					}
-				}
-			}
+			// List<Long> ids = count.stream().map(Bills::getId).distinct().collect(Collectors.toList());
+			// if (!"MH".equals(bills.getBillType())) {
+			// 	if (ObjectUtils.isNotNull(bills.getMblno())) {
+			// 		if (!count.isEmpty() && !ids.contains(bills.getId())) {
+			// 			throw new RuntimeException("提单号不允许重复:" + bills.getMblno());
+			// 		}
+			// 	}
+			// }
 			bills.setUpdateUser(AuthUtil.getUserId());
 			bills.setUpdateTime(new Date());
 			bills.setUpdateUserName(AuthUtil.getUserName());
@@ -1001,18 +1039,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getBillType, detail.getBillType())
 			.eq(FeeCenter::getPid, detail.getId())
 			.eq(FeeCenter::getDc, "C")
-			.eq(FeeCenter::getBillNo, detail.getBillNo())
 		));
 		detail.setFeeCenterListD(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getBillType, detail.getBillType())
 			.eq(FeeCenter::getPid, detail.getId())
 			.eq(FeeCenter::getDc, "D")
-			.eq(FeeCenter::getBillNo, detail.getBillNo())
 		));
 		List<Amends> amendsList = amendsMapper.selectList(new LambdaQueryWrapper<Amends>()
 			.eq(Amends::getTenantId, AuthUtil.getTenantId())
@@ -3530,12 +3564,50 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (ObjectUtils.isNotNull(bills.getMblno())) {
 			bills.setMblno(bills.getMblno().replaceAll(" ", ""));
 		}
-		List<Bills> count = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
-			.eq(Bills::getBranchId, branchId)
-			.eq(Bills::getCreateDept, AuthUtil.getDeptId())
-			.eq(Bills::getTenantId, AuthUtil.getTenantId())
-			.eq(Bills::getIsDeleted, 0)
-			.eq(Bills::getMblno, bills.getMblno()));
+
+		// List<Bills> count = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+		// 	.eq(Bills::getBranchId, branchId)
+		// 	.eq(Bills::getCreateDept, AuthUtil.getDeptId())
+		// 	.eq(Bills::getTenantId, AuthUtil.getTenantId())
+		// 	.eq(Bills::getIsDeleted, 0)
+		// 	.eq(Bills::getMblno, bills.getMblno()));
+
+		List<Bills> count = null;
+		// 只判断海运出口
+		if("SE".equals(bills.getBusinessType()) && ObjectUtils.isNotNull(bills.getMblno())){
+			// 改为同一团队内,Booking+MblNo 不重复
+			LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.select(Bills::getId);
+			// CreateDept 是一级部门,总公司,分公司等
+			lambdaQueryWrapper.eq(Bills::getCreateDept, branchId)
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(Bills::getTeamId, bills.getTeamId())
+				.eq(Bills::getMblno, bills.getMblno());
+			if(ObjectUtils.isNotNull(bills.getBookingNo())) {
+				lambdaQueryWrapper.eq(Bills::getBookingNo, bills.getBookingNo());
+			}
+			if(ObjectUtils.isNotNull(bills.getId())) {
+				lambdaQueryWrapper.ne(Bills::getId, bills.getId());
+			}
+
+			List<String> billTypes = new ArrayList<>();
+			if("DDMM".contains(bills.getBillType())){
+				billTypes.add("DD");
+				billTypes.add("MM");
+			}else{
+				billTypes.add("MH");
+				billTypes.add("HH");
+			}
+			lambdaQueryWrapper.in(Bills::getBillType, billTypes);
+
+			count = baseMapper.selectList(lambdaQueryWrapper);
+		}
+
+		if(ObjectUtils.isNotNull(count) && count.size()>0){
+			throw new RuntimeException("提单号不允许重复输入:" + bills.getMblno());
+		}
+
 		if ("SE".equals(bills.getBusinessType())) {
 			bills.setBillDate(bills.getEtd());
 		} else {
@@ -3566,14 +3638,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(Bills::getVoyageNo, bills.getVoyageNo()));
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 		if (bills.getId() == null) {
-			if (!"MH".equals(bills.getBillType())) {
-				if (ObjectUtils.isNotNull(bills.getMblno())) {
-					List<Bills> billsList = count.stream().filter(e -> e.getTeamId().equals(AuthUtil.getPostId())).collect(Collectors.toList());
-					if (!billsList.isEmpty()) {
-						return R.data("1", "提单号不允许重复:" + bills.getMblno());
-					}
-				}
-			}
+			// if (!"MH".equals(bills.getBillType())) {
+			// 	if (ObjectUtils.isNotNull(bills.getMblno())) {
+			// 		List<Bills> billsList = count.stream().filter(e -> e.getTeamId().equals(AuthUtil.getPostId())).collect(Collectors.toList());
+			// 		if (!billsList.isEmpty()) {
+			// 			return R.data("1", "提单号不允许重复:" + bills.getMblno());
+			// 		}
+			// 	}
+			// }
 			if (ObjectUtils.isNotNull(bills.getVesselId()) && ObjectUtils.isNotNull(bills.getVoyageNo())) {
 				if (!dateList.isEmpty() && dateList.stream().anyMatch(e -> !e.getBillDate().equals(bills.getBillDate()))) {
 					List<Bills> bills1 = dateList.stream().filter(e -> !e.getBillDate().equals(bills.getBillDate())).collect(Collectors.toList());
@@ -3581,17 +3653,17 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				}
 			}
 		} else {
-			List<Bills> billsList = count.stream().filter(e -> ObjectUtils.isNotNull(e.getTeamId()) && e.getTeamId().equals(AuthUtil.getPostId())).collect(Collectors.toList());
-			if (!billsList.isEmpty()) {
-				List<Long> ids = billsList.stream().map(Bills::getId).distinct().collect(Collectors.toList());
-				if (!"MH".equals(bills.getBillType())) {
-					if (ObjectUtils.isNotNull(bills.getMblno())) {
-						if (!ids.contains(bills.getId())) {
-							return R.data("1", "提单号不允许重复:" + bills.getMblno());
-						}
-					}
-				}
-			}
+			// List<Bills> billsList = count.stream().filter(e -> ObjectUtils.isNotNull(e.getTeamId()) && e.getTeamId().equals(AuthUtil.getPostId())).collect(Collectors.toList());
+			// if (!billsList.isEmpty()) {
+			// 	List<Long> ids = billsList.stream().map(Bills::getId).distinct().collect(Collectors.toList());
+			// 	if (!"MH".equals(bills.getBillType())) {
+			// 		if (ObjectUtils.isNotNull(bills.getMblno())) {
+			// 			if (!ids.contains(bills.getId())) {
+			// 				return R.data("1", "提单号不允许重复:" + bills.getMblno());
+			// 			}
+			// 		}
+			// 	}
+			// }
 			if (ObjectUtils.isNotNull(bills.getVesselId()) && ObjectUtils.isNotNull(bills.getVoyageNo())) {
 				if (!dateList.isEmpty() && dateList.stream().anyMatch(e -> !e.getId().equals(bills.getId()) && !e.getBillDate().equals(bills.getBillDate()))) {
 					List<Bills> bills1 = dateList.stream().filter(e -> !e.getId().equals(bills.getId()) && !e.getBillDate().equals(bills.getBillDate())).collect(Collectors.toList());

+ 0 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java

@@ -33,7 +33,6 @@ import org.springblade.los.business.sea.entity.ContainersBills;
 import org.springblade.los.business.sea.entity.ContainersCommodity;
 import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.business.sea.mapper.ContainersMapper;
-import org.springblade.los.business.sea.mapper.PreContainersMapper;
 import org.springblade.los.business.sea.service.IContainersBillsService;
 import org.springblade.los.business.sea.service.IContainersCommodityService;
 import org.springblade.los.business.sea.service.IContainersService;
@@ -70,8 +69,6 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 
 	private final IContainersCommodityService containersCommodityService;
 
-	private final PreContainersMapper preContainersMapper;
-
 	@Override
 	public IPage<ContainersVO> selectContainersPage(IPage<ContainersVO> page, ContainersVO containers) {
 		return page.setRecords(baseMapper.selectContainersPage(page, containers));

+ 4 - 2
blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java

@@ -256,13 +256,15 @@ public class AuditProecessController extends BladeController {
 		} else if ("HYCK-FPSQ".equals(proecess.getCheckType())) {
 			auditProecessService.losFinInvoicesCheck(auditProecess);
 		} else if ("sea-approve".equals(proecess.getCheckType()) || "sia-approve".equals(proecess.getCheckType()) ||
-			"aea-approve".equals(proecess.getCheckType()) || "aia-approve".equals(proecess.getCheckType())) {
+			"aea-approve".equals(proecess.getCheckType()) || "aia-approve".equals(proecess.getCheckType()) ||
+			"EXPA".equals(proecess.getCheckType()) || "TRUCKA".equals(proecess.getCheckType()) ||
+			"MFAA".equals(proecess.getCheckType()) ||"MFSA".equals(proecess.getCheckType()) ) {
 			auditProecessService.amendsCheck(auditProecess);
 		} else if ("MYDL".equals(proecess.getCheckType()) || "FFSQ-SK".equals(proecess.getCheckType())
 			|| "FFSQ-WK".equals(proecess.getCheckType()) || "YSQR-D".equals(proecess.getCheckType())
 			|| "YSQR-C".equals(proecess.getCheckType())) {
 			auditProecessService.agentCheck(auditProecess);
-		}else if ("MFS".equals(proecess.getCheckType()) || "MFA".equals(proecess.getCheckType())
+		}else if ("SECMS".equals(proecess.getCheckType()) || "MFA".equals(proecess.getCheckType())
 			|| "EXP".equals(proecess.getCheckType()) || "TRUCK".equals(proecess.getCheckType())) {
 			auditProecessService.generalBillCheck(auditProecess);
 		}

+ 66 - 1
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -295,6 +295,22 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					message.setMessageBody("您有新的海运派车审核待确认,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
 						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
+				} else if ("快递业务amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的快递业务amend审核待确认,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
+						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
+					);
+				} else if ("海运派车amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运派车amend审核待确认,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
+						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
+					);
+				} else if ("空运舱单amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的空运舱单amend审核待确认,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
+						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
+					);
+				} else if ("海运舱单amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运舱单amend审核待确认,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
+						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
+					);
 				}
 
 				message.setUrl("/approveDataH/index");
@@ -1147,6 +1163,26 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 						+ "单据日期:" + billsDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
+				} else if ("快递业务amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的快递业务amend审核,业务单号:" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("海运派车amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运派车amend审核,业务单号:" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("空运舱单amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的空运舱单amend审核,业务单号:" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("海运舱单amend审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运舱单amend审核,业务单号:" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
 				}
 				message.setUrl(auditProecess.getUrl());
 				message.setPageLabel(auditProecess.getPageLabel());
@@ -1177,6 +1213,14 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					sendMessage.setMessageBody("您的空运出口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("空运进口AMEND".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的空运进口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("快递业务amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的快递业务amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运派车amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运派车amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运舱单amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运舱单amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运舱单amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运舱单amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -1220,6 +1264,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					} else if ("AEA".equals(detail.getBusinessType()) || "AIA".equals(detail.getBusinessType())) {
 						finAccBills.setBusinessTypeCode("KYZD");
 						finAccBills.setBillNoFormat("KYZD");
+					}else {
+						finAccBills.setBusinessTypeCode("ZDZX");
+						finAccBills.setBillNoFormat("ZDZX");
 					}
 					finAccBills.setAccountType("");
 					finAccBills.setCorpArgreementNo(bills.getCorpArgreementNo());
@@ -1231,7 +1278,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				}
 				String status = sysClient.getParamServiceNew("automatic.generate.voucher");
 				if ("1".equals(status)) {
-					generateVoucher(auditProecess.getCheckType(), bills.getId());
+					if (!"EXPA,TRUCKA,MFAA,MFSA".contains(bills.getBusinessType())){
+						generateVoucher(auditProecess.getCheckType(), bills.getId());
+					}
 				}
 				if ("海运出口AMEND".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的海运出口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
@@ -1241,6 +1290,14 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					sendMessage.setMessageBody("您的空运出口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("空运进口AMEND".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的空运进口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("快递业务amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的快递业务amend审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运派车amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运派车amend审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运舱单amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运舱单amend审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运舱单amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运舱单amend审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -1268,6 +1325,14 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					sendMessage.setMessageBody("您的空运出口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("空运进口AMEND".equals(auditProecess.getProcessType())) {
 					sendMessage.setMessageBody("您的空运进口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("快递业务amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的快递业务amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运派车amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运派车amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运舱单amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运舱单amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运舱单amend审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运舱单amend审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {

+ 21 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java

@@ -606,10 +606,26 @@ public class InttraSoDto {
 	 */
 	private BigDecimal measurement;
 
+	/**
+	 * 装箱件数
+	 */
+	private BigDecimal cntrPackagesNumber;
+
 	/*      PCI++   */
 	/**
 	 * 麦头
 	 */
+	/**
+	 * 装箱重量
+	 */
+	private BigDecimal cntrGrossWeight;
+
+	/*     MEA+AAE+AAW+MTQ:   */
+	/**
+	 * 装箱体积
+	 */
+	private BigDecimal cntrMeasurement;
+
 	private String marks;
 
 	/*      DGS+IMD+   */
@@ -757,6 +773,11 @@ public class InttraSoDto {
 	private Boolean alreadySend;
 
 	/**
+	 * 是否需要检测件重尺
+	 */
+	private Boolean needVerifyPkgs;
+
+	/**
 	 * 是否 DOOR TO 服务方式
 	 */
 	public Boolean isDoorToServiceTerm (){

+ 57 - 3
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java

@@ -59,6 +59,7 @@ import org.stringtemplate.v4.ST;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -484,7 +485,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 		}
 		inttraSoDto.setBillLadingNumber(RegularUtils.englishToNumber(details.getNumberOfObl()));
 		inttraSoDto.setBillLadingNumberOfCopy(RegularUtils.englishToNumber(details.getNumberOfCopy()));
-		inttraSoDto.setPackagesNumber(details.getQuantity());
+		inttraSoDto.setPackagesNumber(details.getQuantity().setScale(3, BigDecimal.ROUND_HALF_UP));
 		if (ObjectUtils.isNotNull(details.getPackingUnitId())) {
 			BPackages bPackages = bPackagesService.getOne(new LambdaQueryWrapper<BPackages>()
 				.eq(BPackages::getId, details.getPackingUnitId()));
@@ -496,8 +497,13 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 		inttraSoDto.setPackagesDescribe(details.getPackingUnit());//包装描述
 		inttraSoDto.setGoodsName(details.getCommodityEnName());
 		inttraSoDto.setGoodsDesc(details.getCommodityDescr());
-		inttraSoDto.setGrossWeight(details.getGrossWeight());
-		inttraSoDto.setMeasurement(details.getMeasurement());
+		inttraSoDto.setGrossWeight(details.getGrossWeight().setScale(3, BigDecimal.ROUND_HALF_UP));
+		inttraSoDto.setMeasurement(details.getMeasurement().setScale(3, BigDecimal.ROUND_HALF_UP));
+
+		inttraSoDto.setCntrPackagesNumber(BigDecimal.ZERO);
+		inttraSoDto.setCntrGrossWeight(BigDecimal.ZERO);
+		inttraSoDto.setCntrMeasurement(BigDecimal.ZERO);
+
 		inttraSoDto.setMarks(details.getMarks());
 		inttraSoDto.setHsCode(ObjectUtils.isNotNull(details.getHscode()) ? details.getHscode().trim() : "");
 		inttraSoDto.setCargoType(details.getCargoType());
@@ -597,6 +603,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			.apply("find_in_set(id,'" + boxType + "')")
 			.eq(BCntrTypes::getIsDeleted, 0));
 		List<Map<String, Object>> cntrs = new ArrayList<>();
+		List<Map<String, Object>> uiCntrs = new ArrayList<>();
 		for (Containers item : containersList) {
 			BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e -> e.getId().toString().equals(item.getCntrTypeCodeId())).findFirst().orElse(null);
 			if (bCntrTypes != null) {
@@ -622,6 +629,11 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				map.put("volume", item.getMeasurement());
 				map.put("sizeType", ediCode);
 				map.put("cntrTypeName", RegularUtils.forceEmpty(bCntrTypes.getEnName()));
+
+				inttraSoDto.setCntrPackagesNumber(inttraSoDto.getCntrPackagesNumber().add(item.getQuantity()).setScale(3, RoundingMode.HALF_UP));
+				inttraSoDto.setCntrGrossWeight(inttraSoDto.getCntrGrossWeight().add(item.getGrossWeight()).setScale(3, RoundingMode.HALF_UP));
+				inttraSoDto.setCntrMeasurement(inttraSoDto.getCntrMeasurement().add(item.getMeasurement()).setScale(3, RoundingMode.HALF_UP));
+
 				String ccc = RegularUtils.forceEmpty(bCntrTypes.getCode()), cntrType = "", cntrSize="";
 				if(ccc.length()>=4){
 					cntrSize = RegularUtils.copySubstring(ccc, 0, 2);
@@ -668,12 +680,31 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				}
 				map.put("commodityList", ccList);
 
+				// uiCntrs
+				if(ObjectUtils.isNotNull(map.get("cntrNo"))){
+					Map<String, Object> obj1 = uiCntrs.stream().filter(c->c.get("cntrNo")==map.get("cntrNo")).findAny().orElse(null);
+					if(ObjectUtils.isNotNull(obj1)){
+						obj1.replace("count", Integer.parseInt(obj1.get("count").toString()) + 1);
+					}else{
+						obj1 = new HashMap<>();
+						obj1.put("cntrNo", map.get("cntrNo"));
+						obj1.put("count", 1);
+						uiCntrs.add(obj1);
+					}
+				}
+
 				cntrs.add(map);
 			} else {
 				throw new RuntimeException("箱型数据错误");
 			}
 		}
 		inttraSoDto.setLoadedCntrs(cntrs);
+
+		List<Map<String, Object>> duiCntrs = uiCntrs.stream().filter(c->Integer.parseInt(c.get("count").toString())>1).collect(Collectors.toList());
+		if(duiCntrs.size()>0){
+			throw new RuntimeException("配箱信息中,箱号重复!");
+		}
+
 		inttraSoDto.setHasMixedCargo(mixedCargoCount > 0);
 
 		inttraSoDto.setAMSProp("");
@@ -821,6 +852,8 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				}
 			}
 
+			inttraSoDto.setNeedVerifyPkgs(readEdiParamBooleanValue(ediParamCarrier, "verifyPkgs", false));
+
 			// 默认发送方
 			String defaultSenderId = "JMSLOGQDSO";
 			inttraSoDto.setSenderId(readEdiParamStringValue(ediParamCarrier, "senderId", defaultSenderId));
@@ -887,6 +920,27 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				inttraSoDto.setHblBillsList(hbls);
 			}
 
+			if(inttraSoDto.getNeedVerifyPkgs()==true){
+				System.out.println("PackagesNumber = " + inttraSoDto.getPackagesNumber());
+				System.out.println("CntrPackagesNumber = " + inttraSoDto.getCntrPackagesNumber());
+				System.out.println("compareTo = " + inttraSoDto.getPackagesNumber().compareTo(inttraSoDto.getCntrPackagesNumber()));
+
+				System.out.println("GrossWeight = " + inttraSoDto.getGrossWeight());
+				System.out.println("CntrGrossWeight = " + inttraSoDto.getCntrGrossWeight());
+				System.out.println("compareTo = " + inttraSoDto.getGrossWeight().compareTo(inttraSoDto.getCntrGrossWeight()));
+
+				System.out.println("Measurement = " + inttraSoDto.getMeasurement());
+				System.out.println("CntrMeasurement = " + inttraSoDto.getCntrMeasurement());
+				System.out.println("compareTo = " + inttraSoDto.getMeasurement().compareTo(inttraSoDto.getCntrMeasurement()));
+
+				if(inttraSoDto.getPackagesNumber().compareTo(inttraSoDto.getCntrPackagesNumber())!=0
+					|| inttraSoDto.getGrossWeight().compareTo(inttraSoDto.getCntrGrossWeight())!=0
+					|| inttraSoDto.getMeasurement().compareTo(inttraSoDto.getCntrMeasurement())!=0
+				){
+					return R.fail("业务的件重尺与配箱的件重尺不相等!");
+				};
+			}
+
 			FilesCenter filesCenter = null;
 			Map<String, Object> status = null;
 

+ 4 - 4
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FinAccBillsMapper.xml

@@ -619,10 +619,10 @@
         </if>
         <if test='fee.isBusinessDate != null and fee.isBusinessDate != "" and fee.isBusinessDate == "1"'>
             <if test='fee.etdStart != null and fee.etdStart != ""'>
-                and acc.account_date &gt;= #{fee.etdStart}
+                and acc.business_date &gt;= #{fee.etdStart}
             </if>
             <if test='fee.etdEnd != null and fee.etdEnd != ""'>
-                and acc.account_date &lt;= #{fee.etdEnd}
+                and acc.business_date &lt;= #{fee.etdEnd}
             </if>
         </if>
         <if test='fee.isToExamineDate != null and fee.isToExamineDate != "" and fee.isToExamineDate == "1"'>
@@ -729,10 +729,10 @@
         </if>
         <if test='fee.isBusinessDate != null and fee.isBusinessDate != "" and fee.isBusinessDate == "1"'>
             <if test='fee.etdStart != null and fee.etdStart != ""'>
-                and acc.account_date &gt;= #{fee.etdStart}
+                and acc.business_date &gt;= #{fee.etdStart}
             </if>
             <if test='fee.etdEnd != null and fee.etdEnd != ""'>
-                and acc.account_date &lt;= #{fee.etdEnd}
+                and acc.business_date &lt;= #{fee.etdEnd}
             </if>
         </if>
         <if test='fee.isToExamineDate != null and fee.isToExamineDate != "" and fee.isToExamineDate == "1"'>

+ 3 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java

@@ -229,12 +229,12 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 			data.setBillDate(new Date());
 			data.setAccountType(finAccBills.getAccountType());
 			data.setAccountDc(item.getDc());
-			data.setAccountDate(item.getBillDate());
 			data.setBillKey(item.getBillKey());
 			data.setBusinessType(item.getBusinessType());
 			data.setBusinessBillId(item.getPid());
 			data.setBusinessBillNo(item.getBillNo());
 			data.setBusinessDate(item.getBillDate());
+			data.setAccountDate(item.getBillDate());
 			if ("SEA".equals(item.getBusinessType()) || "SIA".equals(item.getBusinessType())
 				|| "AEA".equals(item.getBusinessType()) || "AIA".equals(item.getBusinessType())) {
 				Amends amends = amendsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Amends());
@@ -245,6 +245,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 				data.setOperatorId(amends.getOperatorId());
 				data.setOperatorName(amends.getOperatorName());
 				data.setQuantityCntrDescr(amends.getQuantityCntrDescr());
+				data.setAccountDate(amends.getCreateTime());
 			} else if ("SE".equals(item.getBusinessType()) || "SI".equals(item.getBusinessType())) {
 				Bills bills = billsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Bills());
 				data.setSrcId(bills.getSrcId());
@@ -660,6 +661,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 				data.setQuantityCntrDescr(amends.getQuantityCntrDescr());
 				data.setTeamId(amends.getTeamId());
 				data.setTeamName(amends.getTeamName());
+				data.setAccountDate(amends.getCreateTime());
 			} else if ("SE".equals(item.getBusinessType()) || "SI".equals(item.getBusinessType())) {
 				Bills bills = billsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Bills());
 				data.setSrcId(bills.getSrcId());