Browse Source

2024年2月26日17:29:50

纪新园 2 years ago
parent
commit
cb250f6c39
16 changed files with 847 additions and 247 deletions
  1. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/acc/entity/Accounts.java
  2. 51 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/acc/vo/AccountsVO.java
  3. 202 32
      blade-service/blade-los/src/main/java/org/springblade/los/Util/RegularUtils.java
  4. 31 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/controller/AccountsController.java
  5. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/mapper/AccountsMapper.java
  6. 38 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/mapper/AccountsMapper.xml
  7. 22 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/service/IAccountsService.java
  8. 69 9
      blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/service/impl/AccountsServiceImpl.java
  9. 6 2
      blade-service/blade-los/src/main/java/org/springblade/los/billno/service/impl/BusinessBillNoServiceImpl.java
  10. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSiBillDto.java
  11. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSiDto.java
  12. 173 55
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java
  13. 103 37
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java
  14. 6 6
      blade-service/blade-los/src/main/java/org/springblade/los/finance/vouchers/controller/FinVouchersController.java
  15. 6 6
      blade-service/blade-los/src/main/java/org/springblade/los/finance/vouchers/service/IFinVouchersService.java
  16. 121 98
      blade-service/blade-los/src/main/java/org/springblade/los/finance/vouchers/service/impl/FinVouchersServiceImpl.java

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/acc/entity/Accounts.java

@@ -19,6 +19,8 @@ package org.springblade.los.basic.acc.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -102,6 +104,11 @@ public class Accounts implements Serializable {
 	@ApiModelProperty(value = "父级科目代码")
 	private String parentCode;
 	/**
+	 * 父节点ID
+	 */
+	@ApiModelProperty(value = "父节点ID")
+	private Long parentId;
+	/**
 	 * 中文名称
 	 */
 	@ApiModelProperty(value = "中文名称")

+ 51 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/acc/vo/AccountsVO.java

@@ -16,10 +16,18 @@
  */
 package org.springblade.los.basic.acc.vo;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.springblade.core.tool.node.INode;
 import org.springblade.los.basic.acc.entity.Accounts;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
+import org.springblade.system.vo.DeptVO;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 基础资料-科目代码视图实体类
@@ -30,7 +38,49 @@ import io.swagger.annotations.ApiModel;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "AccountsVO对象", description = "基础资料-科目代码")
-public class AccountsVO extends Accounts {
+public class AccountsVO extends Accounts implements INode<AccountsVO> {
 	private static final long serialVersionUID = 1L;
 
+	/**
+	 * 主键ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 父节点ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 子孙节点
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<AccountsVO> children;
+
+	/**
+	 * 是否有子孙节点
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private Boolean hasChildren;
+
+	@Override
+	public List<AccountsVO> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 上级科目代码
+	 */
+	private String parentCode;
+
+	/**
+	 * 科目名称
+	 */
+	private String accountsName;
+
 }

+ 202 - 32
blade-service/blade-los/src/main/java/org/springblade/los/Util/RegularUtils.java

@@ -809,11 +809,11 @@ public class RegularUtils {
 				if (regularLength(inttraToDoorAddr, 35)) {
 					inttraSoDto.setInttraToDoorAddrOne(inttraToDoorAddr.substring(0, 35));
 					if (regularLength(inttraToDoorAddr, 35) && inttraToDoorAddr.length() <= 70) {
-						inttraSoDto.setInttraToDoorAddrTwo(inttraToDoorAddr.substring(35, 70));
+						inttraSoDto.setInttraToDoorAddrTwo(inttraToDoorAddr.substring(35));
 					} else if (regularLength(inttraToDoorAddr, 70) && inttraToDoorAddr.length() <= 105) {
-						inttraSoDto.setInttraToDoorAddrThree(inttraToDoorAddr.substring(70, 105));
+						inttraSoDto.setInttraToDoorAddrThree(inttraToDoorAddr.substring(70));
 					} else if (regularLength(inttraToDoorAddr, 105) && inttraToDoorAddr.length() <= 140) {
-						inttraSoDto.setInttraToDoorAddrFour(inttraToDoorAddr.substring(105, 140));
+						inttraSoDto.setInttraToDoorAddrFour(inttraToDoorAddr.substring(105));
 					} else {
 						textLength += "TO DOOR地址,";
 					}
@@ -871,11 +871,11 @@ public class RegularUtils {
 				if (regularLength(inttraDoorToAddr, 35)) {
 					inttraSoDto.setInttraDoorToAddrOne(inttraDoorToAddr.substring(0, 35));
 					if (regularLength(inttraDoorToAddr, 35) && inttraDoorToAddr.length() <= 70) {
-						inttraSoDto.setInttraDoorToAddrTwo(inttraDoorToAddr.substring(35, 70));
+						inttraSoDto.setInttraDoorToAddrTwo(inttraDoorToAddr.substring(35));
 					} else if (regularLength(inttraDoorToAddr, 70) && inttraDoorToAddr.length() <= 105) {
-						inttraSoDto.setInttraDoorToAddrThree(inttraDoorToAddr.substring(70, 105));
+						inttraSoDto.setInttraDoorToAddrThree(inttraDoorToAddr.substring(70));
 					} else if (regularLength(inttraDoorToAddr, 105) && inttraDoorToAddr.length() <= 140) {
-						inttraSoDto.setInttraDoorToAddrFour(inttraDoorToAddr.substring(105, 140));
+						inttraSoDto.setInttraDoorToAddrFour(inttraDoorToAddr.substring(105));
 					} else {
 						textLength += "DOOR TO地址,";
 					}
@@ -1610,6 +1610,97 @@ public class RegularUtils {
 			Map<String, String> mapString = regularEn(inttraSoDto.getVesselCarrierCode());
 			if ("200".equals(mapString.get("code"))) {
 				inttraSoDto.setVesselCarrierCode(mapString.get("susscess"));
+				if ("HLCU".equals(mapString.get("susscess"))) {
+					String text = "";
+					if (ObjectUtils.isNotNull(inttraSoDto.getBillNo())) {
+						text += inttraSoDto.getBillNo() + ";";
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getPaymentType())) {
+						if ("PP".equals(inttraSoDto.getPaymentType())) {
+							text += "FREIGHT PREPAID;";
+						} else if ("CC".equals(inttraSoDto.getPaymentType())) {
+							text += "FREIGHT COLLECT;";
+						} else {
+							if (ObjectUtils.isNull(inttraSoDto.getPaymentLand())) {
+								msg += "付款地,";
+							} else {
+								text += "FREIGHT PAYABLE AT " + inttraSoDto.getPaymentLand() + ";";
+							}
+						}
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getTransportTermCode())) {
+						if ("29".equals(inttraSoDto.getTransportTermCode())) {
+							text += "CY to DOOR;";
+						} else if ("27".equals(inttraSoDto.getTransportTermCode())) {
+							text += "DOOR to DOOR;";
+						} else if ("28".equals(inttraSoDto.getTransportTermCode())) {
+							text += "DOOR to CY;";
+						} else if ("30".equals(inttraSoDto.getTransportTermCode())) {
+							text += "CY to CY;";
+						}
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getBookingNo())) {
+						text += inttraSoDto.getBookingNo() + ";";
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getPlaceDeliveryName())) {
+						text += inttraSoDto.getPlaceDeliveryName() + ";";
+					} else {
+						text += inttraSoDto.getPlaceReceiptName() + ";";
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getCarrySingleRemarks())) {
+						text += inttraSoDto.getCarrySingleRemarks() + ";";
+					}
+					inttraSoDto.setRemarks(text);
+				}else if ("MAEU".equals(mapString.get("susscess"))) {
+					String text = "";
+					if (ObjectUtils.isNotNull(inttraSoDto.getPaymentType())) {
+						if ("PP".equals(inttraSoDto.getPaymentType())) {
+							text += "FREIGHT PREPAID;";
+						} else if ("CC".equals(inttraSoDto.getPaymentType())) {
+							text += "FREIGHT COLLECT;";
+						} else {
+							if (ObjectUtils.isNull(inttraSoDto.getPaymentLand())) {
+								msg += "付款地,";
+							} else {
+								text += "FREIGHT PAYABLE AT " + inttraSoDto.getPaymentLand() + ";";
+							}
+						}
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getTransportTermCode())) {
+						if ("29".equals(inttraSoDto.getTransportTermCode())) {
+							text += "CY to DOOR;";
+						} else if ("27".equals(inttraSoDto.getTransportTermCode())) {
+							text += "DOOR to DOOR;";
+						} else if ("28".equals(inttraSoDto.getTransportTermCode())) {
+							text += "DOOR to CY;";
+						} else if ("30".equals(inttraSoDto.getTransportTermCode())) {
+							text += "CY to CY;";
+						}
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getPackagesNumber()) && ObjectUtils.isNotNull(inttraSoDto.getPackagesCode())) {
+						text += inttraSoDto.getPageNumber() + " " + inttraSoDto.getPackagesCode();
+					}
+					if (ObjectUtils.isNotNull(inttraSoDto.getCarrySingleRemarks())) {
+						text += inttraSoDto.getCarrySingleRemarks() + ";";
+					}
+					inttraSoDto.setRemarks(text);
+				}else {
+					//备注
+					if (ObjectUtils.isNull(inttraSoDto.getRemarks())) {
+						msg += "备注,";
+					} else {
+						Map<String, String> mapString1 = regularEn(inttraSoDto.getRemarks());
+						if ("200".equals(mapString1.get("code"))) {
+							if (regularLength(mapString1.get("susscess"), 512)) {
+								textLength += "备注,";
+							} else {
+								inttraSoDto.setRemarks(mapString1.get("susscess"));
+							}
+						} else {
+							character += "备注,";
+						}
+					}
+				}
 			} else {
 				character += "船司代码,";
 			}
@@ -1743,15 +1834,15 @@ public class RegularUtils {
 				if (regularLength(hipper, 35)) {
 					inttraSoDto.setHsHipperOne(hipper.substring(0, 35));
 					if (regularLength(hipper, 35) && hipper.length() <= 70) {
-						inttraSoDto.setHsHipperTwo(hipper.substring(35, 70));
+						inttraSoDto.setHsHipperTwo(hipper.substring(35));
 					} else if (regularLength(hipper, 70) && hipper.length() <= 105) {
-						inttraSoDto.setHsHipperThree(hipper.substring(70, 105));
+						inttraSoDto.setHsHipperThree(hipper.substring(70));
 					} else if (regularLength(hipper, 105) && hipper.length() <= 140) {
-						inttraSoDto.setHsHipperFour(hipper.substring(105, 140));
+						inttraSoDto.setHsHipperFour(hipper.substring(105));
 					} else if (regularLength(hipper, 140) && hipper.length() <= 175) {
-						inttraSoDto.setHsHipperFive(hipper.substring(140, 175));
+						inttraSoDto.setHsHipperFive(hipper.substring(140));
 					} else {
-						inttraSoDto.setHsHipperFive(hipper.substring(140, 174) + "*");
+						inttraSoDto.setHsHipperFive(hipper.substring( 174) + "*");
 						if (ObjectUtils.isNotNull(inttraSoDto.getProductName())) {
 							inttraSoDto.setProductName(inttraSoDto.getProductName() + "*" + hipper.substring(174));
 						}
@@ -1773,15 +1864,15 @@ public class RegularUtils {
 				if (regularLength(hConsignee, 35)) {
 					inttraSoDto.setHConsigneeOne(hConsignee.substring(0, 35));
 					if (regularLength(hConsignee, 35) && hConsignee.length() <= 70) {
-						inttraSoDto.setHConsigneeTwo(hConsignee.substring(35, 70));
+						inttraSoDto.setHConsigneeTwo(hConsignee.substring(35));
 					} else if (regularLength(hConsignee, 70) && hConsignee.length() <= 105) {
-						inttraSoDto.setHConsigneeThree(hConsignee.substring(70, 105));
+						inttraSoDto.setHConsigneeThree(hConsignee.substring(70));
 					} else if (regularLength(hConsignee, 105) && hConsignee.length() <= 140) {
-						inttraSoDto.setHConsigneeFour(hConsignee.substring(105, 140));
+						inttraSoDto.setHConsigneeFour(hConsignee.substring(105));
 					} else if (regularLength(hConsignee, 140) && hConsignee.length() <= 175) {
-						inttraSoDto.setHConsigneeFive(hConsignee.substring(140, 175));
+						inttraSoDto.setHConsigneeFive(hConsignee.substring(140));
 					} else {
-						inttraSoDto.setHConsigneeFive(hConsignee.substring(140, 174) + "*");
+						inttraSoDto.setHConsigneeFive(hConsignee.substring( 174) + "*");
 						if (ObjectUtils.isNotNull(inttraSoDto.getProductName())) {
 							inttraSoDto.setProductName(inttraSoDto.getProductName() + "**" + hConsignee.substring(174));
 						}
@@ -1803,15 +1894,15 @@ public class RegularUtils {
 				if (regularLength(hNotify, 35)) {
 					inttraSoDto.setHNotifyOne(hNotify.substring(0, 35));
 					if (regularLength(hNotify, 35) && hNotify.length() <= 70) {
-						inttraSoDto.setHNotifyTwo(hNotify.substring(35, 70));
+						inttraSoDto.setHNotifyTwo(hNotify.substring(35));
 					} else if (regularLength(hNotify, 70) && hNotify.length() <= 105) {
-						inttraSoDto.setHNotifyThree(hNotify.substring(70, 105));
+						inttraSoDto.setHNotifyThree(hNotify.substring(70));
 					} else if (regularLength(hNotify, 105) && hNotify.length() <= 140) {
-						inttraSoDto.setHNotifyFour(hNotify.substring(105, 140));
+						inttraSoDto.setHNotifyFour(hNotify.substring(105));
 					} else if (regularLength(hNotify, 140) && hNotify.length() <= 175) {
-						inttraSoDto.setHNotifyFive(hNotify.substring(140, 175));
+						inttraSoDto.setHNotifyFive(hNotify.substring(140));
 					} else {
-						inttraSoDto.setHNotifyFive(hNotify.substring(140, 174) + "*");
+						inttraSoDto.setHNotifyFive(hNotify.substring( 174) + "*");
 						if (ObjectUtils.isNotNull(inttraSoDto.getProductName())) {
 							inttraSoDto.setProductName(inttraSoDto.getProductName() + "***" + hNotify.substring(174));
 						}
@@ -2074,7 +2165,86 @@ public class RegularUtils {
 				character += "危险品电话号码,";
 			}
 		}
-		//箱型代码
+		if (ObjectUtils.isNull(inttraSoDto.getBox())) {
+			msg += "箱型代码,";
+		} else {
+			List<Map<String, Object>> mapList = inttraSoDto.getBox();
+			for (Map<String, Object> map1 : mapList) {
+				Double temperature = ObjectUtils.isNotNull(map1.get("temperature")) ? Double.parseDouble(map1.get("temperature").toString()) : 0;
+				//箱型代码
+				if (ObjectUtils.isNull(map1.get("boxCode").toString())) {
+					msg += "箱型代码,";
+				} else {
+					Map<String, String> mapString = regularEn(map1.get("boxCode").toString());
+					if ("200".equals(mapString.get("code"))) {
+						inttraSoDto.setBoxCode(mapString.get("susscess"));
+					} else {
+						character += "箱型代码,";
+					}
+				}
+				//温度
+				if (ObjectUtils.isNotNull(temperature)) {
+					if (regularLength(temperature.toString(), 4)) {
+						textLength += "温度,";
+					}
+				}
+				//温度单位
+				if (ObjectUtils.isNotNull(map1.get("temperatureUnit").toString())) {
+					Map<String, String> mapString = regularEn(map1.get("temperatureUnit").toString());
+					if ("200".equals(mapString.get("code"))) {
+						inttraSoDto.setTemperatureUnit(mapString.get("susscess"));
+					} else {
+						character += "温度单位,";
+					}
+				}
+				//单箱货物件数
+				if (ObjectUtils.isNull(map1.get("boxGoodNumber").toString())) {
+					msg += "单箱货物件数,";
+				}
+				//单箱货物重量
+				if (ObjectUtils.isNull(map1.get("boxGoodWeight").toString())) {
+					msg += "单箱货物重量,";
+				}
+				//单箱货物体积
+				if (ObjectUtils.isNull(map1.get("boxGoodMeasurement").toString())) {
+					msg += "单箱货物体积,";
+				}
+				//箱号
+				if (ObjectUtils.isNull(map1.get("boxNo").toString())) {
+					msg += "箱号,";
+				} else {
+					Map<String, String> mapString = regularEn(map1.get("boxNo").toString());
+					if ("200".equals(mapString.get("code"))) {
+						inttraSoDto.setBoxNo(mapString.get("susscess"));
+					} else {
+						character += "箱号,";
+					}
+				}
+				//封号
+				if (ObjectUtils.isNull(map1.get("sealNo").toString())) {
+					msg += "封号,";
+				} else {
+					Map<String, String> mapString = regularEn(map1.get("sealNo").toString());
+					if ("200".equals(mapString.get("code"))) {
+						inttraSoDto.setSeal(mapString.get("susscess"));
+					} else {
+						character += "封号,";
+					}
+				}
+				//封箱单位
+				if (ObjectUtils.isNull(map1.get("sealUnit").toString())) {
+					msg += "封箱单位,";
+				} else {
+					Map<String, String> mapString = regularEn(map1.get("sealUnit").toString());
+					if ("200".equals(mapString.get("code"))) {
+						inttraSoDto.setSealUnit(mapString.get("susscess"));
+					} else {
+						character += "封箱单位,";
+					}
+				}
+			}
+		}
+		/*//箱型代码
 		if (ObjectUtils.isNull(inttraSoDto.getBoxCode())) {
 			msg += "箱型代码,";
 		} else {
@@ -2111,15 +2281,7 @@ public class RegularUtils {
 		//单箱货物体积
 		if (ObjectUtils.isNull(inttraSoDto.getBoxGoodMeasurement())) {
 			msg += "单箱货物体积,";
-		}
-		//记录行数
-		if (ObjectUtils.isNull(inttraSoDto.getRecordRows())) {
-			msg += "记录行数,";
-		} else {
-			if (regularLength(inttraSoDto.getRecordRows().toString(), 6)) {
-				textLength += "记录行数,";
-			}
-		}
+		}*/
 		//箱号
 		if (ObjectUtils.isNull(inttraSoDto.getBoxNo())) {
 			msg += "箱号,";
@@ -2153,6 +2315,14 @@ public class RegularUtils {
 				character += "封箱单位,";
 			}
 		}
+		//记录行数
+		if (ObjectUtils.isNull(inttraSoDto.getRecordRows())) {
+			msg += "记录行数,";
+		} else {
+			if (regularLength(inttraSoDto.getRecordRows().toString(), 6)) {
+				textLength += "记录行数,";
+			}
+		}
 		//信息编号
 		if (ObjectUtils.isNull(inttraSoDto.getInformationNoEnd())) {
 			msg += "信息编号,";
@@ -2589,7 +2759,7 @@ public class RegularUtils {
 		} else {
 			Map<String, String> mapString = regularEn(inttraSoDto.getMarks());
 			if ("200".equals(mapString.get("code"))) {
-				if (regularLength(mapString.get("susscess"), 35)) {
+				if (regularLength(mapString.get("susscess"), 1750)) {
 					textLength += "麦头,";
 				} else {
 					inttraSoDto.setMarks(mapString.get("susscess"));

+ 31 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/controller/AccountsController.java

@@ -25,8 +25,12 @@ import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.PreAuth;
+import org.springblade.core.secure.constant.AuthConstant;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.system.vo.DeptVO;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.basic.acc.entity.Accounts;
@@ -34,6 +38,8 @@ import org.springblade.los.basic.acc.vo.AccountsVO;
 import org.springblade.los.basic.acc.service.IAccountsService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 基础资料-科目代码 控制器
  *
@@ -119,8 +125,32 @@ public class AccountsController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(accountsService.removeByIds(Func.toLongList(ids)));
+		return accountsService.detele(ids);
 	}
 
 
+	/**
+	 * 获取科目代码树形结构
+	 *
+	 * @return
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "树形结构", notes = "树形结构")
+	public R<List<AccountsVO>> tree(String tenantId, BladeUser bladeUser) {
+		List<AccountsVO> tree = accountsService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
+		return R.data(tree);
+	}
+
+	/**
+	 * 懒加载获取科目代码树形结构
+	 */
+	@GetMapping("/lazy-tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "懒加载树形结构", notes = "树形结构")
+	public R<List<AccountsVO>> lazyTree(String tenantId, Long parentId, BladeUser bladeUser) {
+		List<AccountsVO> tree = accountsService.lazyTree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), parentId);
+		return R.data(tree);
+	}
+
 }

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/mapper/AccountsMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.basic.acc.mapper;
 
+import feign.Param;
 import org.springblade.los.basic.acc.entity.Accounts;
 import org.springblade.los.basic.acc.vo.AccountsVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -39,4 +40,7 @@ public interface AccountsMapper extends BaseMapper<Accounts> {
 	 */
 	List<AccountsVO> selectAccountsPage(IPage page, AccountsVO accounts);
 
+    List<AccountsVO> tree(@Param("tenantId") String tenantId, @Param("deptPid")Long deptPid);
+
+	List<AccountsVO> lazyTree(@Param("tenantId")String tenantId, @Param("parentId")Long parentId, @Param("deptPid")Long deptPid);
 }

+ 38 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/mapper/AccountsMapper.xml

@@ -16,6 +16,7 @@
         <result column="update_time" property="updateTime"/>
         <result column="code" property="code"/>
         <result column="parent_code" property="parentCode"/>
+        <result column="parent_id" property="parentId"/>
         <result column="cn_name" property="cnName"/>
         <result column="en_name" property="enName"/>
         <result column="full_name" property="fullName"/>
@@ -72,5 +73,42 @@
     <select id="selectAccountsPage" resultMap="accountsResultMap">
         select * from los_b_accounts where is_deleted = 0
     </select>
+    <select id="tree" resultType="org.springblade.los.basic.acc.vo.AccountsVO">
+        select id, parent_id, cn_name as title, id as "value", id as "key" from los_b_accounts where is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            and tenant_id = #{tenantId}
+        </if>
+        <if test="deptPid!=null">
+            and branch_id = #{deptPid}
+        </if>
+        ORDER BY code
+    </select>
+    <select id="lazyTree" resultType="org.springblade.los.basic.acc.vo.AccountsVO">
+        SELECT
+        dept.id,
+        dept.parent_id,
+        dept.cn_name AS title,
+        dept.id AS "value",
+        dept.id AS "key",
+        (
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        los_b_accounts
+        WHERE
+        parent_id = dept.id and is_deleted = 0
+        ) AS "has_children"
+        FROM
+        los_b_accounts dept
+        WHERE
+        dept.parent_id = #{parentId} AND dept.is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            and dept.tenant_id = #{tenantId}
+        </if>
+        <if test="deptPid!=null">
+            and dept.branch_id = #{deptPid}
+        </if>
+        ORDER BY dept.code
+    </select>
 
 </mapper>

+ 22 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/service/IAccountsService.java

@@ -22,6 +22,8 @@ import org.springblade.los.basic.acc.vo.AccountsVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 基础资料-科目代码 服务类
  *
@@ -52,4 +54,24 @@ public interface IAccountsService extends IService<Accounts> {
 	 * @return
 	 */
 	R submit(Accounts accounts);
+
+	/**
+	 * 删除
+	 */
+	R detele(String ids);
+
+	/**
+	 * 获取科目代码树形结构
+	 * @param strWithEmpty
+	 * @return
+	 */
+	List<AccountsVO> tree(String strWithEmpty);
+
+	/**
+	 * 懒加载获取科目代码树形结构
+	 * @param strWithEmpty
+	 * @param parentId
+	 * @return
+	 */
+	List<AccountsVO> lazyTree(String strWithEmpty, Long parentId);
 }

+ 69 - 9
blade-service/blade-los/src/main/java/org/springblade/los/basic/acc/service/impl/AccountsServiceImpl.java

@@ -20,10 +20,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.acc.entity.AccItemsOpenblc;
 import org.springblade.los.basic.acc.entity.Accounts;
@@ -31,7 +37,8 @@ import org.springblade.los.basic.acc.mapper.AccountsMapper;
 import org.springblade.los.basic.acc.service.IAccItemsOpenblcService;
 import org.springblade.los.basic.acc.service.IAccountsService;
 import org.springblade.los.basic.acc.vo.AccountsVO;
-import org.springblade.system.entity.Dept;
+import org.springblade.los.finance.vouchers.entity.FinVouchersItems;
+import org.springblade.los.finance.vouchers.service.IFinVouchersItemsService;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -57,6 +64,8 @@ public class AccountsServiceImpl extends ServiceImpl<AccountsMapper, Accounts> i
 
 	private final IAccItemsOpenblcService accItemsOpenblcService;
 
+	private final IFinVouchersItemsService finVouchersItemsService;
+
 	@Override
 	public IPage<AccountsVO> selectAccountsPage(IPage<AccountsVO> page, AccountsVO accounts) {
 		return page.setRecords(baseMapper.selectAccountsPage(page, accounts));
@@ -78,7 +87,7 @@ public class AccountsServiceImpl extends ServiceImpl<AccountsMapper, Accounts> i
 	public R submit(Accounts accounts) {
 		String deptId = "";
 		String deptName = "";
-		String branchId = deptUtils.getDeptPid()+"";
+		String branchId = deptUtils.getDeptPid() + "";
 		//获取部门ids对应中文名
 		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
 			deptId = AuthUtil.getDeptId();
@@ -88,6 +97,15 @@ public class AccountsServiceImpl extends ServiceImpl<AccountsMapper, Accounts> i
 			}
 		}
 		if (accounts.getId() == null) {
+			if (Func.isEmpty(accounts.getParentId())) {
+				accounts.setParentId(BladeConstant.TOP_PARENT_ID);
+			}
+			if (accounts.getParentId() > 0) {
+				Accounts details = getById(accounts.getParentId());
+				if (Func.toLong(details.getParentId()) == Func.toLong(details.getId())) {
+					throw new ServiceException("父节点不可选择自身!");
+				}
+			}
 			accounts.setCreateTime(new Date());
 			accounts.setCreateUser(AuthUtil.getUserId());
 			accounts.setCreateUserName(AuthUtil.getUserName());
@@ -101,12 +119,19 @@ public class AccountsServiceImpl extends ServiceImpl<AccountsMapper, Accounts> i
 				}
 			}
 		} else {
+			if (finVouchersItemsService.count(new LambdaQueryWrapper<FinVouchersItems>()
+				.eq(FinVouchersItems::getAccountId, accounts.getId())
+				.eq(FinVouchersItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinVouchersItems::getIsDeleted, 0)
+				.eq(FinVouchersItems::getBranchId, deptUtils.getDeptPid())) > 0) {
+				throw new RuntimeException("该科目已存在凭证,修改失败");
+			}
 			accounts.setUpdateUser(AuthUtil.getUserId());
 			accounts.setUpdateTime(new Date());
 			accounts.setUpdateUserName(AuthUtil.getUserName());
 		}
-		if (ObjectUtils.isNotNull(accounts.getParentCode())) {
-			accounts = selectSuperiorCode(accounts, accounts.getParentCode());
+		if (ObjectUtils.isNotNull(accounts.getParentId())) {
+			selectSuperiorCode(accounts, accounts.getParentId());
 		} else {
 			accounts.setIsDetail(1);
 		}
@@ -207,15 +232,50 @@ public class AccountsServiceImpl extends ServiceImpl<AccountsMapper, Accounts> i
 		return R.data(accounts);
 	}
 
-	private Accounts selectSuperiorCode(Accounts accounts, String parentCode) {
-		Accounts accounts1 = baseMapper.selectOne(new LambdaQueryWrapper<Accounts>()
-			.eq(Accounts::getTenantId, AuthUtil.getTenantId())
-			.eq(Accounts::getCode, parentCode));
+	@Override
+	public R detele(String ids) {
+		if (finVouchersItemsService.count(new LambdaQueryWrapper<FinVouchersItems>()
+			.apply("find_in_set(account_id,'" + ids + "')")
+			.eq(FinVouchersItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinVouchersItems::getIsDeleted, 0)
+			.eq(FinVouchersItems::getBranchId, deptUtils.getDeptPid())) > 0) {
+			throw new RuntimeException("该科目已存在凭证,删除失败");
+		}
+		return R.status(SqlHelper.retBool(baseMapper.deleteBatchIds(Func.toLongList(ids))));
+	}
+
+	@Override
+	public List<AccountsVO> tree(String tenantId) {
+		List<AccountsVO> tree = null;
+		if (!AuthUtil.getUserRole().contains("admin")) {
+			tree = baseMapper.tree(tenantId, deptUtils.getDeptPid());
+		} else {
+			tree = baseMapper.tree(tenantId, null);
+		}
+		return ForestNodeMerger.merge(tree);
+	}
+
+	@Override
+	public List<AccountsVO> lazyTree(String tenantId, Long parentId) {
+		if (AuthUtil.isAdministrator()) {
+			tenantId = StringPool.EMPTY;
+		}
+		List<AccountsVO> tree = null;
+		if (!AuthUtil.getUserRole().contains("admin")) {
+			tree = baseMapper.lazyTree(tenantId, parentId, deptUtils.getDeptPid());
+		} else {
+			tree = baseMapper.lazyTree(tenantId, parentId, null);
+		}
+		return ForestNodeMerger.merge(tree);
+	}
+
+	private Accounts selectSuperiorCode(Accounts accounts, Long parentId) {
+		Accounts accounts1 = baseMapper.selectById(parentId);
 		if (accounts1 != null) {
 			accounts.setFullName(accounts1.getCnName() + "/" + accounts.getFullName());
 			accounts.setIsDetail(0);
 			if (ObjectUtils.isNotNull(accounts1.getParentCode())) {
-				this.selectSuperiorCode(accounts, accounts1.getParentCode());
+				this.selectSuperiorCode(accounts, accounts1.getParentId());
 			}
 		}
 		return accounts;

+ 6 - 2
blade-service/blade-los/src/main/java/org/springblade/los/billno/service/impl/BusinessBillNoServiceImpl.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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 net.logstash.logback.encoder.org.apache.commons.lang3.time.DateFormatUtils;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -37,9 +38,9 @@ import org.springblade.los.billno.vo.BillNoSerialVO;
 import org.springblade.los.billno.vo.BusinessBillNoVO;
 import org.springblade.los.business.aea.entity.AeaBills;
 import org.springblade.los.business.sea.entity.Bills;
-import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -70,7 +71,7 @@ public class BusinessBillNoServiceImpl extends ServiceImpl<BusinessBillNoMapper,
 
 	@Override
 	public R<String> getBillNoLos(BusinessBillNo businessBillNo) {
-		String branchId = deptUtils.getDeptPid()+"";
+		String branchId = deptUtils.getDeptPid() + "";
 		BusinessBillNo detail = baseMapper.selectOne(new LambdaQueryWrapper<BusinessBillNo>()
 			.eq(BusinessBillNo::getTenantId, AuthUtil.getTenantId())
 			.eq(BusinessBillNo::getIsDeleted, 0)
@@ -372,11 +373,14 @@ public class BusinessBillNoServiceImpl extends ServiceImpl<BusinessBillNoMapper,
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R submit(BusinessBillNo businessBillNo) {
 		if (businessBillNo.getId() == null) {
 			businessBillNo.setCreateTime(new Date());
 			businessBillNo.setCreateUser(AuthUtil.getUserId());
 			businessBillNo.setCreateUserName(AuthUtil.getUserName());
+			businessBillNo.setBranchId(deptUtils.getDeptPid() + "");
 			//获取部门ids对应中文名
 			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
 				businessBillNo.setCreateDept(AuthUtil.getDeptId());

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSiBillDto.java

@@ -7,6 +7,8 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author :jixinyuan
@@ -667,6 +669,8 @@ public class InttraSiBillDto {
 	 */
 	private String shipperBoxIdentification;
 
+	private List<Map<String,Object>> box;
+
 	/*     MEA+AAE+  */
 	/**
 	 * 货物量类型

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSiDto.java

@@ -5,6 +5,8 @@ import org.springblade.los.edi.entity.EdiTypes;
 import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author :jixinyuan
@@ -455,6 +457,8 @@ public class InttraSiDto {
 	 */
 	private BigDecimal boxGoodMeasurement;
 
+	private List<Map<String,Object>> box;
+
 	/*    SEL+   */
 	/**
 	 * 封号

+ 173 - 55
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java

@@ -737,8 +737,8 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 
 			/* =================2000=================  */
-			count =  count + 2;
-			writer.write("UNT+" + count+ "+" + inttraSoDto.getInformationNoEnd() + "'");
+			count = count + 2;
+			writer.write("UNT+" + count + "+" + inttraSoDto.getInformationNoEnd() + "'");
 			writer.newLine();
 			/* =================2010=================  */
 			writer.write("UNZ+1+" + inttraSoDto.getFileExchangeNumberEnd() + "'");
@@ -776,43 +776,55 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			file.createNewFile();
 			// 打开文件输出流进行写入操作
 			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+			int count = 0;
 			// 向文件写入数据
 			/* =================0005=================  */
 			writer.write("UNB+UNOC:2+" + inttraSiDto.getIdentifying() + ":ZZZ+INTTRA:ZZZ+" + inttraSiDto.getDate() + "+" + inttraSiDto.getFileExchangeNumber() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0010=================  */
 			writer.write("UNH+" + inttraSiDto.getInformationNo() + "+IFTMIN:D:99B:UN'");
 			writer.newLine();
+			count += 1;
 			/* =================0020=================  */
 			writer.write("BGM+340+" + inttraSiDto.getIdentificationCode() + "+" + inttraSiDto.getFilesFunction() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0050=================  */
 			writer.write("DTM+137:" + inttraSiDto.getFilesDate() + "203'");
 			writer.newLine();
+			count += 1;
 			/* =================0060=================  */
 			writer.write("TSR+" + inttraSiDto.getTransportTermCode() + "+" + inttraSiDto.getLclType() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0090=================  */
 			writer.write("FTX+AAI+++" + inttraSiDto.getRemarks() + "'");
 			writer.newLine();
+			count += 1;
 			if (ObjectUtils.isNotNull(inttraSiDto.getCarrySingleRemarks())) {
 				writer.write("FTX+BLC+++" + inttraSiDto.getCarrySingleRemarks() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0100=================  */
 			writer.write("CNT+7:" + inttraSiDto.getWeightOfGoods() + ":KGM'");
 			writer.newLine();
+			count += 1;
 			if (ObjectUtils.isNotNull(inttraSiDto.getPackagesNumber())) {
 				writer.write("CNT+11:" + inttraSiDto.getPackagesNumber() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			if (ObjectUtils.isNotNull(inttraSiDto.getVolumeOfGoods())) {
 				writer.write("CNT+15:" + inttraSiDto.getVolumeOfGoods() + ":MTQ'");
 				writer.newLine();
+				count += 1;
 			}
 			if (ObjectUtils.isNotNull(inttraSiDto.getTotalBoxNumber())) {
 				writer.write("CNT+16:" + inttraSiDto.getTotalBoxNumber() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0140=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getPaymentLocationCode())) {
@@ -824,6 +836,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.write("'");
 					writer.newLine();
 				}
+				count += 1;
 			}
 			if (ObjectUtils.isNotNull(inttraSiDto.getIssuanceLandCode())) {
 				writer.write("LOC+73+" + inttraSiDto.getIssuanceLandCode());
@@ -834,34 +847,42 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.write("'");
 					writer.newLine();
 				}
+				count += 1;
 			}
 			/* =================0150=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getIssueDate())) {
 				writer.write("DTM+95:" + inttraSiDto.getIssueDate() + ":102'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0200=================  */
 			writer.write("RFF+BN:" + inttraSiDto.getBookingNo() + "'");
 			writer.newLine();
+			count += 1;
 			if (ObjectUtils.isNotNull(inttraSiDto.getBillNo())) {
 				writer.write("RFF+BM:" + inttraSiDto.getBillNo() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			if (ObjectUtils.isNotNull(inttraSiDto.getFreightProtocolNumber())) {
 				writer.write("RFF+CT:" + inttraSiDto.getFreightProtocolNumber() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			if (ObjectUtils.isNotNull(inttraSiDto.getMainPinyin())) {
 				writer.write("RFF+SI:" + inttraSiDto.getMainPinyin() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			if (ObjectUtils.isNotNull(inttraSiDto.getOrderNo())) {
 				writer.write("RFF+ON:" + inttraSiDto.getOrderNo() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0320=================  */
 			writer.write("CPI+4++" + inttraSiDto.getPaymentType() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0480=================  */
 			if (inttraSiDto.getVoyageNo().indexOf("V.") > 0) {
 				throw new RuntimeException("航次中不能存在‘V.’");
@@ -874,16 +895,21 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.write(":172+++:::" + inttraSiDto.getVesselName() + "'");
 					writer.newLine();
 				}
+				count += 1;
 			}
 			/* =================0520=================  */
 			writer.write("LOC+88+" + inttraSiDto.getPlaceReceiptCode() + "::6:" + inttraSiDto.getPlaceReceiptName() + "'");
 			writer.newLine();
+			count += 1;
 			writer.write("LOC+9+" + inttraSiDto.getPolCode() + "::6:" + inttraSiDto.getPolName() + "'");
 			writer.newLine();
+			count += 1;
 			writer.write("LOC+11+" + inttraSiDto.getPodCode() + "::6:" + inttraSiDto.getPodName() + "'");
 			writer.newLine();
+			count += 1;
 			writer.write("LOC+7+" + inttraSiDto.getPlaceDeliveryCode() + "::6:" + inttraSiDto.getPlaceDeliveryName() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0580=================  */
 			writer.write("NAD+CZ+++" + inttraSiDto.getHsHipperOne());
 			if (ObjectUtils.isNotNull(inttraSiDto.getHsHipperFive())) {
@@ -933,6 +959,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			writer.write("NAD+CN+++" + inttraSiDto.getHConsigneeOne());
 			if (ObjectUtils.isNotNull(inttraSiDto.getHConsigneeFive())) {
 				if (ObjectUtils.isNotNull(inttraSiDto.getHConsigneeTwo())) {
@@ -981,6 +1008,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			writer.write("NAD+NI+++" + inttraSiDto.getHNotifyOne());
 			if (ObjectUtils.isNotNull(inttraSiDto.getHNotifyFive())) {
 				if (ObjectUtils.isNotNull(inttraSiDto.getHNotifyTwo())) {
@@ -1027,18 +1055,26 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					}
 				}
 			}
+			writer.write("'");
+			writer.newLine();
+			count += 1;
 			writer.write("NAD+CA+" + inttraSiDto.getCarrierCode() + ":160:86++" + inttraSiDto.getCarrierName() + "'");
 			writer.newLine();
+			count += 1;
 			writer.write("NAD+HI+" + inttraSiDto.getSenderCode() + ":160:86++" + inttraSiDto.getSenderName() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0620=================  */
 			writer.write("CTA+IC+:" + inttraSiDto.getSenderContacts() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0630=================  */
 			writer.write("COM+" + inttraSiDto.getSenderTel() + ":TE'");
 			writer.newLine();
+			count += 1;
 			writer.write("COM+" + inttraSiDto.getSenderEmail() + ":EM'");
 			writer.newLine();
+			count += 1;
 			/* =================0650=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getBillLadingType())) {
 				writer.write("DOC+" + inttraSiDto.getBillLadingType());
@@ -1049,6 +1085,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.write("+:+:" + inttraSiDto.getBillLadingNumber() + "'");
 					writer.newLine();
 				}
+				count += 1;
 			}
 			/* =================0910=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getPackagesNumbers())) {
@@ -1060,34 +1097,58 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.write("'");
 					writer.newLine();
 				}
+				count += 1;
 			}
 			/* =================0980=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getHsCode())) {
 				writer.write("PIA+5+" + inttraSiDto.getHsCode() + ":HS'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0990=================  */
 			writer.write("FTX+AAA+++" + inttraSiDto.getProductName() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================1070=================  */
 			writer.write("MEA+AAE+WT+KGM:" + inttraSiDto.getGrossWeight() + "'");
 			writer.newLine();
+			count += 1;
 			writer.write("MEA+AAE+AAW+MTQ:" + inttraSiDto.getMeasurement() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================1160=================  */
-			writer.write("PCI++" + inttraSiDto.getMarks() + "'");
-			writer.newLine();
-
-			/* =================1380=================  */
-			writer.write("SGP+" + inttraSiDto.getBoxNo() + "+" + inttraSiDto.getBoxGoodNumber() + "'");
-			writer.newLine();
-
-			/* =================1400=================  */
-			writer.write("MEA+AAE+WT+KGM:" + inttraSiDto.getBoxGoodWeight() + "'");
-			writer.newLine();
-			writer.write("MEA+AAE+AAW+MTQ:" + inttraSiDto.getBoxGoodMeasurement() + "'");
-			writer.newLine();
-
+			BigDecimal sum = new BigDecimal(inttraSiDto.getMarks().length()).divide(new BigDecimal("35"), 2, RoundingMode.HALF_UP).setScale(0, RoundingMode.HALF_UP);
+			int subS = 0;
+			int subE = 35;
+			for (int i = 0; i <= sum.intValue(); i++) {
+				String marks = "";
+				if (inttraSiDto.getMarks().length() > subE) {
+					marks = inttraSiDto.getMarks().substring(subS, subE);
+				} else {
+					marks = inttraSiDto.getMarks().substring(subS);
+				}
+				writer.write("PCI++" + marks + "'");
+				writer.newLine();
+				count += 1;
+				subS = subS + 35;
+				subE = subE + 35;
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getBox())) {
+				List<Map<String, Object>> mapList = inttraSiDto.getBox();
+				for (Map<String, Object> map1 : mapList) {
+					/* =================1380=================  */
+					writer.write("SGP+" + map1.get("boxCode") + "+" + map1.get("boxGoodNumber") + "'");
+					writer.newLine();
+					count += 1;
+					/* =================1400=================  */
+					writer.write("MEA+AAE+WT+KGM:" + map1.get("boxGoodWeight") + "'");
+					writer.newLine();
+					count += 1;
+					writer.write("MEA+AAE+AAW+MTQ:" + map1.get("boxGoodMeasurement") + "'");
+					writer.newLine();
+					count += 1;
+				}
+			}
 			/* =================1520=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getDgImdgCode())) {
 				writer.write("DGS+IMD+" + inttraSiDto.getDgImdgCode());
@@ -1201,66 +1262,81 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1530=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getDgRemarks())) {
 				writer.write("FTX+AAC+++" + inttraSiDto.getDgRemarks() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1550=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getDgContacts())) {
 				writer.write("CTA+HG+:" + inttraSiDto.getDgContacts() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1560=================  */
 			if (ObjectUtils.isNotNull(inttraSiDto.getDgTel())) {
 				writer.write("COM+" + inttraSiDto.getDgTel() + "'");
 				writer.newLine();
+				count += 1;
 			}
-			/* =================1660=================  */
-			writer.write("EQD+CN++" + inttraSiDto.getBoxNo() + "+" + inttraSiDto.getBoxCode());
-			if (ObjectUtils.isNotNull(inttraSiDto.getShipperBoxIdentification())) {
-				writer.write("+" + inttraSiDto.getShipperBoxIdentification() + "'");
-				writer.newLine();
-			} else {
-				writer.write("'");
-				writer.newLine();
-			}
-			/* =================1690=================  */
-			if (ObjectUtils.isNotNull(inttraSiDto.getBoxGoodWeight())) {
-				writer.write("MEA+AAE+WT+KGM:" + inttraSiDto.getBoxGoodWeight() + "'");
-				writer.newLine();
-			}
-			if (ObjectUtils.isNotNull(inttraSiDto.getBoxGoodMeasurement())) {
-				writer.write("MEA+AAE+AAW+MTQ:" + inttraSiDto.getBoxGoodMeasurement() + "'");
-				writer.newLine();
-			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getBox())) {
+				List<Map<String, Object>> mapList = inttraSiDto.getBox();
+				for (Map<String, Object> map1 : mapList) {
+					/* =================1660=================  */
+					writer.write("EQD+CN++" + map1.get("boxNo") + "+" + map1.get("boxCode"));
+					if (ObjectUtils.isNotNull(map1.get("shipperBoxIdentification"))) {
+						writer.write("+" + map1.get("shipperBoxIdentification") + "'");
+						writer.newLine();
+					} else {
+						writer.write("'");
+						writer.newLine();
+					}
+					count += 1;
+					/* =================1690=================  */
+					if (ObjectUtils.isNotNull(map1.get("boxGoodWeight"))) {
+						writer.write("MEA+AAE+WT+KGM:" + map1.get("boxGoodWeight") + "'");
+						writer.newLine();
+						count += 1;
+					}
+					if (ObjectUtils.isNotNull(map1.get("boxGoodMeasurement"))) {
+						writer.write("MEA+AAE+AAW+MTQ:" + map1.get("boxGoodMeasurement") + "'");
+						writer.newLine();
+						count += 1;
+					}
 
-			/* =================1710=================  */
-			if (ObjectUtils.isNotNull(inttraSiDto.getSeal())) {
-				writer.write("SEL+" + inttraSiDto.getSeal());
-				if (ObjectUtils.isNotNull(inttraSiDto.getSealUnit())) {
-					writer.write("+" + inttraSiDto.getSealUnit() + "'");
-					writer.newLine();
-				} else {
-					writer.write("'");
-					writer.newLine();
+					/* =================1710=================  */
+					if (ObjectUtils.isNotNull(map1.get("sealNo"))) {
+						writer.write("SEL+" + map1.get("sealNo"));
+						if (ObjectUtils.isNotNull(map1.get("sealUnit"))) {
+							writer.write("+" + map1.get("sealUnit") + "'");
+							writer.newLine();
+						} else {
+							writer.write("'");
+							writer.newLine();
+						}
+						count += 1;
+					}
+					/* =================1740=================  */
+					if (ObjectUtils.isNotNull(map1.get("temperature"))) {
+						writer.write("TMP+2+" + map1.get("temperature"));
+						if (ObjectUtils.isNotNull(map1.get("temperatureUnit"))) {
+							writer.write(":" + map1.get("temperatureUnit") + "'");
+							writer.newLine();
+						} else {
+							writer.write("'");
+							writer.newLine();
+						}
+						count += 1;
+					}
 				}
 			}
 
-			/* =================1740=================  */
-			if (ObjectUtils.isNotNull(inttraSiDto.getTemperature())) {
-				writer.write("TMP+2+" + inttraSiDto.getTemperature());
-				if (ObjectUtils.isNotNull(inttraSiDto.getTemperatureUnit())) {
-					writer.write(":" + inttraSiDto.getTemperatureUnit() + "'");
-					writer.newLine();
-				} else {
-					writer.write("'");
-					writer.newLine();
-				}
-			}
 			/* =================2000=================  */
-			writer.write("UNT+" + inttraSiDto.getRecordRows() + "+" + inttraSiDto.getInformationNoEnd() + "'");
+			count = count + 2;
+			writer.write("UNT+" + count + "+" + inttraSiDto.getInformationNoEnd() + "'");
 			writer.newLine();
 			/* =================2010=================  */
 			writer.write("UNZ+1+" + inttraSiDto.getFileExchangeNumberEnd() + "'");
@@ -1311,31 +1387,39 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			file.createNewFile();
 			// 打开文件输出流进行写入操作
 			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+			int count = 0;
 			// 向文件写入数据
 			/* =================0005=================  */
 			writer.write("UNB+UNOC:2+" + inttraSiBillDto.getIdentifying() + ":ZZZ+INTTRA:ZZZ+" + inttraSiBillDto.getDate() + "+" + inttraSiBillDto.getFileExchangeNumber() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0010=================  */
 			writer.write("UNH+" + inttraSiBillDto.getInformationNo() + "+IFTMIN:D:99B:UN'");
 			writer.newLine();
+			count += 1;
 			/* =================0020=================  */
 			writer.write("BGM+340+" + inttraSiBillDto.getIdentificationCode() + "+" + inttraSiBillDto.getFilesFunction() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0050=================  */
 			writer.write("DTM+137:" + inttraSiBillDto.getFilesDate() + "203'");
 			writer.newLine();
+			count += 1;
 			/* =================0060=================  */
 			writer.write("TSR+" + inttraSiBillDto.getTransportTermCode() + "+" + inttraSiBillDto.getLclType() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0070=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getCurCode())) {
 				writer.write("CUX+4:" + inttraSiBillDto.getCurCode() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0080=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getFeeAmount())) {
 				writer.write("MOA+44:" + inttraSiBillDto.getFeeAmount() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0090=================  */
 			writer.write("FTX+" + inttraSiBillDto.getRemarksCode() + "");
@@ -1370,6 +1454,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				writer.write("'");
 				writer.newLine();
 			}
+			count += 1;
 			/* =================0100=================  */
 			writer.write("CNT+" + inttraSiBillDto.getSumType() + ":" + inttraSiBillDto.getSumValue());
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getSumUnit())) {
@@ -1379,6 +1464,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				writer.write("'");
 				writer.newLine();
 			}
+			count += 1;
 			/* =================0140=================  */
 			writer.write("LOC+" + inttraSiBillDto.getLocationType());
 			if ("73".equals(inttraSiBillDto.getLocationType())) {
@@ -1389,6 +1475,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					throw new RuntimeException("提单签发地点代码定义者不能为空");
 				}
 			}
+			count += 1;
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getCountryCode())) {
 				if (ObjectUtils.isNotNull(inttraSiBillDto.getLocationCode())) {
 					writer.write("+" + inttraSiBillDto.getLocationCode());
@@ -1436,6 +1523,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================0150=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getIssueDate())) {
 				writer.write("DTM+95:" + inttraSiBillDto.getIssueDate());
@@ -1446,10 +1534,12 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.write("'");
 					writer.newLine();
 				}
+				count += 1;
 			}
 			/* =================0200=================  */
 			writer.write("RFF+" + inttraSiBillDto.getBillNoType() + ":" + inttraSiBillDto.getBillNoValue() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0210=================  */
 			if ("LC".equals(inttraSiBillDto.getBillNoType())) {
 				writer.write("DTM+" + inttraSiBillDto.getValidityPeriodType());
@@ -1458,10 +1548,12 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write(":102'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0320=================  */
 			writer.write("CPI++" + inttraSiBillDto.getPaymentType() + "++" + inttraSiBillDto.getPaymentTypeCode() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0480=================  */
 			writer.write("TDT+20");
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getVesselDefine())) {
@@ -1565,6 +1657,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 
 			writer.write(":" + inttraSiBillDto.getVesselName() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0520=================  */
 			writer.write("LOC+" + inttraSiBillDto.getAddressType());
 			if ("9".equals(inttraSiBillDto.getAddressType()) || "11".equals(inttraSiBillDto.getAddressType())) {
@@ -1601,6 +1694,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================0580=================  */
 			writer.write("NAD+" + inttraSiBillDto.getCompanyType());
 			if ("CA".equals(inttraSiBillDto.getCompanyType()) || "HI".equals(inttraSiBillDto.getCompanyType())) {
@@ -2080,6 +2174,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================0620=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getContactsType())) {
 				writer.write("CTA+" + inttraSiBillDto.getContactsType());
@@ -2100,6 +2195,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				/* =================0630=================  */
 				writer.write("COM+" + inttraSiBillDto.getContactsValue() + ":" + inttraSiBillDto.getContactsInformation() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0650=================  */
 			writer.write("DOC+" + inttraSiBillDto.getBillLadingType());
@@ -2144,9 +2240,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					writer.newLine();
 				}
 			}
+			count += 1;
 			/* =================0760=================  */
 			writer.write("RFF+" + inttraSiBillDto.getNumberTypes() + ":" + inttraSiBillDto.getNumberValue() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================0910=================  */
 			writer.write("GID+" + inttraSiBillDto.getGoodsSort());
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getPackagesNumbers())) {
@@ -2176,6 +2274,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================0980=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getHsCode())) {
 				writer.write("PIA+5+" + inttraSiBillDto.getHsCode());
@@ -2184,6 +2283,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================0990=================  */
 			writer.write("FTX+" + inttraSiBillDto.getProductType());
@@ -2261,6 +2361,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================1010=================  */
 			writer.write("NAD+" + inttraSiBillDto.getCarrierType());
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getCarrierAddressFour())) {
@@ -2364,6 +2465,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================1070=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getGoodsNumberType())) {
 				writer.write("MEA+AAE+" + inttraSiBillDto.getGoodsNumberType());
@@ -2381,10 +2483,12 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1010=================  */
 			writer.write("RFF+" + inttraSiBillDto.getNumberType() + ":" + inttraSiBillDto.getNumberCode() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================1160=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getMarks())) {
 				writer.write("PCI++" + inttraSiBillDto.getMarks());
@@ -2396,6 +2500,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			/* =================1380=================  */
 			writer.write("SGP+" + inttraSiBillDto.getBoxNo() + "+" + inttraSiBillDto.getBoxGoodNumber() + "'");
 			writer.newLine();
+			count += 1;
 			/* =================1400=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getGoodsNumberTypeTwo())) {
 				writer.write("MEA+AAE+" + inttraSiBillDto.getGoodsNumberTypeTwo());
@@ -2413,6 +2518,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1520=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getDgImdgCode())) {
@@ -2519,10 +2625,12 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1530=================  */
 			writer.write("FTX+" + inttraSiBillDto.getDgRemarksType() + "+++" + inttraSiBillDto.getDgRemarks() + "'");
 			writer.newLine();
+			count += 1;
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getDgImdgCode())) {
 				if (ObjectUtils.isNull(inttraSiBillDto.getDgContacts())) {
 					throw new RuntimeException("edi危险品联系方不能为空");
@@ -2534,9 +2642,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				/* =================1550=================  */
 				writer.write("CTA+HG+:" + inttraSiBillDto.getDgImdgCode() + "'");
 				writer.newLine();
+				count += 1;
 				/* =================1560=================  */
 				writer.write("COM+" + inttraSiBillDto.getDgTel() + "TE'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1660=================  */
 			if (ObjectUtils.isNull(inttraSiBillDto.getBoxNo())) {
@@ -2570,6 +2680,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1690=================  */
 			if (ObjectUtils.isNull(inttraSiBillDto.getGoodsNumberTypeThree())) {
@@ -2588,6 +2699,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1710=================  */
 			if (ObjectUtils.isNull(inttraSiBillDto.getSeal())) {
@@ -2597,6 +2709,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1740=================  */
 			if (ObjectUtils.isNull(inttraSiBillDto.getTemperature())) {
@@ -2606,6 +2719,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1740=================  */
 			writer.write("FTX+" + inttraSiBillDto.getRemarksCodes());
@@ -2614,10 +2728,12 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			}
 			writer.write("'");
 			writer.newLine();
+			count += 1;
 			/* =================1760=================  */
 			if (ObjectUtils.isNotNull(inttraSiBillDto.getBillNumber())) {
 				writer.write("RFF+AHZ:" + inttraSiBillDto.getBillNumber() + "'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================1860=================  */
 			if (ObjectUtils.isNull(inttraSiBillDto.getAddCode())) {
@@ -2650,9 +2766,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				}
 				writer.write("'");
 				writer.newLine();
+				count += 1;
 			}
 			/* =================2000=================  */
-			writer.write("UNT+" + inttraSiBillDto.getRecordRows() + "+" + inttraSiBillDto.getInformationNoEnd() + "'");
+			count = count + 2;
+			writer.write("UNT+" + count + "+" + inttraSiBillDto.getInformationNoEnd() + "'");
 			writer.newLine();
 			/* =================2010=================  */
 			writer.write("UNZ+" + inttraSiBillDto.getInformationNumber() + "+" + inttraSiBillDto.getFileExchangeNumberEnd() + "'");

+ 103 - 37
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java

@@ -424,17 +424,20 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						.eq(BPorts::getIsDeleted, 0)
 						.eq(BPorts::getEnName, details.getMpayplace()));
 					if (bPorts != null) {
-						inttraSoDto.setPaymentLocationCode(bPorts.getCode());
+						String ediCode = RegularUtils.getEdiCode("INTTRA",bPorts.getExtendedData());
+						inttraSoDto.setPaymentLocationCode(ediCode);
+						inttraSoDto.setPaymentLand(bPorts.getEnName());
 					}
 				}
-				inttraSoDto.setPaymentLand(details.getMpayplace());
 				if (ObjectUtils.isNotNull(details.getIssueAtId())) {
 					BPorts bPorts = bPortsService.getById(details.getIssueAtId());
 					if (bPorts != null) {
-						inttraSoDto.setIssuanceLandCode(bPorts.getCode());
+						String ediCode = RegularUtils.getEdiCode("INTTRA",bPorts.getExtendedData());
+						inttraSoDto.setIssuanceLandCode(ediCode);
+						inttraSoDto.setIssuanceLand(bPorts.getEnName());
+
 					}
 				}
-				inttraSoDto.setIssuanceLand(details.getIssueAt());
 				SimpleDateFormat sdf2 = new SimpleDateFormat("yyyymmdd");
 				if (ObjectUtils.isNotNull(details.getIssueDate())) {
 					inttraSoDto.setIssueDate(sdf2.format(details.getIssueDate()));
@@ -455,7 +458,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						}
 					}
 				}
-				inttraSoDto.setVesselName(details.getVesselCnName());
+				inttraSoDto.setVesselName(details.getVesselEnName());
 				if (ObjectUtils.isNotNull(details.getPolCode())) {
 					BPorts bPorts = bPortsService.getById(details.getPolCode());
 					if (bPorts != null) {
@@ -469,9 +472,9 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 					if (bPorts != null) {
 						String ediCode = RegularUtils.getEdiCode("INTTRA",bPorts.getExtendedData());
 						inttraSoDto.setPlaceReceiptCode(ediCode);
+						inttraSoDto.setPlaceReceiptName(bPorts.getEnName());
 					}
 				}
-				inttraSoDto.setPlaceReceiptName(details.getPlaceReceiptName());
 				if (ObjectUtils.isNotNull(details.getPodCode())) {
 					BPorts bPorts = bPortsService.getById(details.getPodCode());
 					if (bPorts != null) {
@@ -479,35 +482,35 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						inttraSoDto.setPodCode(ediCode);
 					}
 				}
-				inttraSoDto.setPodName(details.getPodCnName());
+				inttraSoDto.setPodName(details.getPodEnName());
 				if (ObjectUtils.isNotNull(details.getPlaceDeliveryCode())) {
 					BPorts bPorts = bPortsService.getById(details.getPlaceDeliveryCode());
 					if (bPorts != null) {
 						String ediCode = RegularUtils.getEdiCode("INTTRA",bPorts.getExtendedData());
 						inttraSoDto.setPlaceDeliveryCode(ediCode);
+						inttraSoDto.setPlaceDeliveryName(bPorts.getEnName());
 					}
 				}
-				inttraSoDto.setPlaceDeliveryName(details.getPlaceDeliveryName());
-				inttraSoDto.setHsHipperOne(details.getHshipperCnName());
-				inttraSoDto.setHConsigneeOne(details.getHconsigneeCnName());
-				inttraSoDto.setHNotifyOne(details.getHnotifyCnName());
-				inttraSoDto.setCarrierName(details.getCarrierCnName());
+				inttraSoDto.setHsHipperOne(details.getHshipperEnName());
+				inttraSoDto.setHConsigneeOne(details.getHconsigneeEnName());
+				inttraSoDto.setHNotifyOne(details.getHnotifyEnName());
+				inttraSoDto.setCarrierName(details.getCarrierEnName());
 				if (ObjectUtils.isNotNull(details.getCarrierId())) {
 					BCorps bCorps = bCorpsService.getById(details.getCarrierId());
 					if (bCorps != null) {
 						inttraSoDto.setCarrierCode(bCorps.getInttraCode());
 					}
 				}
-				inttraSoDto.setSenderCode("发送方代码");
-				inttraSoDto.setSenderName("发送方称呼");
-				inttraSoDto.setSenderContacts("发送方联系人");
-				inttraSoDto.setSenderTel("发送方联系电话");
-				inttraSoDto.setSenderEmail("发送方联系邮件");
-				inttraSoDto.setBillLadingType("提单类型");
+				inttraSoDto.setSenderCode("JMSLOGQDSO");
+				inttraSoDto.setSenderName("JMS");
+				inttraSoDto.setSenderContacts("JMS-contacts");
+				inttraSoDto.setSenderTel("JMS-tel");
+				inttraSoDto.setSenderEmail("JMS-email");
+				inttraSoDto.setBillLadingType(details.getBillType());
 				if (details.getStlCrStatus() >= 3 || details.getStlDrStatus() >= 3) {
-					inttraSoDto.setPaymentStatus("已付款");
+					inttraSoDto.setPaymentStatus("27");
 				} else {
-					inttraSoDto.setPaymentStatus("未付款");
+					inttraSoDto.setPaymentStatus("26");
 				}
 				inttraSoDto.setBillLadingNumber(new BigDecimal("0"));
 				inttraSoDto.setPackagesNumbers(details.getQuantity());
@@ -519,13 +522,45 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						inttraSoDto.setPackagesCode(ediCode);
 					}
 				}
-				inttraSoDto.setPackagesDescribe("包装描述");
+				inttraSoDto.setPackagesDescribe("");//包装描述
 				inttraSoDto.setHsCode(new BigDecimal("001"));
 				inttraSoDto.setProductName(details.getCommodityCnName());
 				inttraSoDto.setGrossWeight(details.getGrossWeight());
 				inttraSoDto.setMeasurement(details.getMeasurement());
 				inttraSoDto.setMarks(details.getMarks());
-				BigDecimal boxGoodNumber = new BigDecimal("0.00");
+				List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+					.eq(PreContainers::getPid, details.getId())
+					.eq(PreContainers::getIsDeleted, 0));
+				String boxType = containersList.stream().map(Containers::getCntrTypeCode).collect(Collectors.joining(","));
+				List<BCntrTypes> bCntrTypesList = bCntrTypesService.list(new LambdaQueryWrapper<BCntrTypes>()
+					.apply("find_in_set(cntr_type,'" + boxType + "')")
+					.eq(BCntrTypes::getIsDeleted, 0));
+				List<Map<String, Object>> box = new ArrayList<>();
+				for (Containers item : containersList) {
+					BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e -> e.getCntrType().equals(item.getCntrTypeCode())).findFirst().orElse(null);
+					if (bCntrTypes != null) {
+						String ediCode = RegularUtils.getEdiCode("INTTRA",bCntrTypes.getExtendedData());
+						Map<String, Object> map = new HashMap<>();
+						map.put("boxGoodNumber", item.getQuantity());
+						map.put("boxGoodWeight", item.getGrossWeight());
+						map.put("boxGoodMeasurement", item.getMeasurement());
+						map.put("boxCode", ediCode);
+						map.put("boxNo", item.getCntrNo());
+						map.put("sealNo", item.getSealNo());
+						map.put("sealUnit", item.getPackingUnit());
+						map.put("shipperBoxIdentification", item.getIsSoc());
+						PreContainers preContainers = preContainersList.stream().filter(e -> e.getCntrTypeCode().equals(item.getCntrTypeCode())).findFirst().orElse(null);
+						if (preContainers != null){
+							map.put("temperature", preContainers.getTemperature());
+							map.put("temperatureUnit", preContainers.getTemperatureUnit());
+						}
+						box.add(map);
+					} else {
+						throw new RuntimeException("箱型数据错误");
+					}
+				}
+				inttraSoDto.setBox(box);
+				/*BigDecimal boxGoodNumber = new BigDecimal("0.00");
 				BigDecimal boxGoodWeight = new BigDecimal("0.00");
 				BigDecimal boxGoodMeasurement = new BigDecimal("0.00");
 				if (!containersList.isEmpty()) {
@@ -541,20 +576,20 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 					inttraSoDto.setBoxGoodNumber(boxGoodNumber);
 					inttraSoDto.setBoxGoodWeight(boxGoodWeight);
 					inttraSoDto.setBoxGoodMeasurement(boxGoodMeasurement);
-				}
+				}*/
 				inttraSoDto.setDgImdgCode(details.getDgImdgCode());
 				inttraSoDto.setPageNumber(new BigDecimal("007"));
 				inttraSoDto.setDgUnCode(1);
 				inttraSoDto.setDgFlashPoint(1);
 				inttraSoDto.setDgFlashPointUnit(details.getDgFlashPointUnit());
-				inttraSoDto.setPackingGroup("包装组别");
-				inttraSoDto.setEmergencyMeasureNo("应急措施号");
+				inttraSoDto.setPackingGroup("");//包装组别
+				inttraSoDto.setEmergencyMeasureNo("");//应急措施号
 				inttraSoDto.setDgRemarks(details.getDgRemarks());
 				inttraSoDto.setDgContacts(details.getDgContacts());
 				inttraSoDto.setDgTel(details.getDgTel());
-				inttraSoDto.setBoxCode(details.getQuantityCntrDescr());
+				/*inttraSoDto.setBoxCode(details.getQuantityCntrDescr());
 				inttraSoDto.setTemperature(1);
-				inttraSoDto.setTemperatureUnit("温度单位");
+				inttraSoDto.setTemperatureUnit("温度单位");*/
 				inttraSoDto.setRecordRows(new BigDecimal("10"));
 				inttraSoDto.setInformationNoEnd(inttraSoDto.getInformationNo());
 				inttraSoDto.setFileExchangeNumberEnd(inttraSoDto.getFileExchangeNumber());
@@ -646,12 +681,12 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						}
 					}
 				}
-				inttraSoDto.setVesselName(details.getVesselCnName());
+				inttraSoDto.setVesselName(details.getVesselEnName());
 				inttraSoDto.setBillLadingType("提单类型");
 				if (details.getStlCrStatus() >= 3 || details.getStlDrStatus() >= 3) {
-					inttraSoDto.setPaymentStatus("已付款");
+					inttraSoDto.setPaymentStatus("27");
 				} else {
-					inttraSoDto.setPaymentStatus("未付款");
+					inttraSoDto.setPaymentStatus("26");
 				}
 				inttraSoDto.setBillLadingNumber(new BigDecimal("0"));
 				inttraSoDto.setPackagesNumbers(details.getQuantity());
@@ -663,10 +698,41 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						inttraSoDto.setPackagesCode(ediCode);
 					}
 				}
-				inttraSoDto.setPackagesDescribe("包装描述");
+				inttraSoDto.setPackagesDescribe("");//包装描述
 				inttraSoDto.setHsCode(new BigDecimal("001"));
 				inttraSoDto.setMarks(details.getMarks());
-				BigDecimal boxGoodNumber = new BigDecimal("0.00");
+				List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+					.eq(PreContainers::getPid, details.getId())
+					.eq(PreContainers::getIsDeleted, 0));
+				String boxType = containersList.stream().map(Containers::getCntrTypeCode).collect(Collectors.joining(","));
+				List<BCntrTypes> bCntrTypesList = bCntrTypesService.list(new LambdaQueryWrapper<BCntrTypes>()
+					.apply("find_in_set(cntr_type,'" + boxType + "')")
+					.eq(BCntrTypes::getIsDeleted, 0));
+				List<Map<String, Object>> box = new ArrayList<>();
+				for (Containers item : containersList) {
+					BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e -> e.getCntrType().equals(item.getCntrTypeCode())).findFirst().orElse(null);
+					if (bCntrTypes != null) {
+						String ediCode = RegularUtils.getEdiCode("INTTRA",bCntrTypes.getExtendedData());
+						Map<String, Object> map = new HashMap<>();
+						map.put("boxGoodNumber", item.getQuantity());
+//						map.put("boxGoodWeight", item.getGrossWeight());
+//						map.put("boxGoodMeasurement", item.getMeasurement());
+						map.put("boxCode", ediCode);
+						map.put("boxNo", item.getCntrNo());
+						map.put("shipperBoxIdentification", item.getIsSoc());
+						PreContainers preContainers = preContainersList.stream().filter(e -> e.getCntrTypeCode().equals(item.getCntrTypeCode())).findFirst().orElse(null);
+						if (preContainers != null){
+							map.put("temperature", preContainers.getTemperature());
+							map.put("ventilation", preContainers.getVentilation());
+							map.put("temperatureUnit", preContainers.getTemperatureUnit());
+						}
+						box.add(map);
+					} else {
+						throw new RuntimeException("箱型数据错误");
+					}
+				}
+				inttraSoDto.setBox(box);
+				/*BigDecimal boxGoodNumber = new BigDecimal("0.00");
 				if (!containersList.isEmpty()) {
 					inttraSoDto.setBoxGoodNumber(containersList.get(0).getQuantity());
 					String boxNumber = containersList.stream().map(Containers::getCntrNo).filter(Objects::nonNull).distinct().collect(Collectors.joining("/"));
@@ -674,20 +740,20 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 					inttraSoDto.setShipperBoxIdentification("货主箱标识");
 				} else {
 					inttraSoDto.setBoxGoodNumber(boxGoodNumber);
-				}
+				}*/
 				inttraSoDto.setDgImdgCode(details.getDgImdgCode());
 				inttraSoDto.setPageNumber(new BigDecimal("007"));
 				inttraSoDto.setDgUnCode(1);
 				inttraSoDto.setDgFlashPoint(new BigDecimal("1"));
 				inttraSoDto.setDgFlashPointUnit(details.getDgFlashPointUnit());
-				inttraSoDto.setPackingGroup("包装组别");
-				inttraSoDto.setEmergencyMeasureNo("应急措施号");
+				inttraSoDto.setPackingGroup("");//包装组别
+				inttraSoDto.setEmergencyMeasureNo("");//应急措施号
 				inttraSoDto.setDgRemarks(details.getDgRemarks());
 				inttraSoDto.setDgContacts(details.getDgContacts());
 				inttraSoDto.setDgTel(details.getDgTel());
-				inttraSoDto.setBoxCode(details.getQuantityCntrDescr());
+				/*inttraSoDto.setBoxCode(details.getQuantityCntrDescr());
 				inttraSoDto.setTemperature(1);
-				inttraSoDto.setTemperatureUnit("温度单位");
+				inttraSoDto.setTemperatureUnit("温度单位");*/
 				inttraSoDto.setRecordRows(new BigDecimal("10"));
 				inttraSoDto.setInformationNoEnd(inttraSoDto.getInformationNo());
 				inttraSoDto.setFileExchangeNumberEnd(inttraSoDto.getFileExchangeNumber());

+ 6 - 6
blade-service/blade-los/src/main/java/org/springblade/los/finance/vouchers/controller/FinVouchersController.java

@@ -131,23 +131,23 @@ public class FinVouchersController extends BladeController {
 	}
 
 	/**
-	 * 财务凭证 确认
+	 * 财务凭证 记账
 	 */
 	@PostMapping("/confirmFinVouchers")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "确认", notes = "传入finStlBills")
-	public R confirmFinVouchers(@Valid @RequestBody FinVouchers finVouchers) {
-		return finVouchersService.confirmFinVouchers(finVouchers);
+	public R confirmFinVouchers(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return finVouchersService.confirmFinVouchers(ids);
 	}
 
 	/**
-	 * 财务凭证 撤销
+	 * 财务凭证 撤销记账
 	 */
 	@PostMapping("/revokeFinVouchers")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "撤销", notes = "传入finStlBills")
-	public R revokeFinVouchers(@Valid @RequestBody FinVouchers finVouchers) {
-		return finVouchersService.revokeFinVouchers(finVouchers);
+	public R revokeFinVouchers(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return finVouchersService.revokeFinVouchers(ids);
 	}
 
 

+ 6 - 6
blade-service/blade-los/src/main/java/org/springblade/los/finance/vouchers/service/IFinVouchersService.java

@@ -54,16 +54,16 @@ public interface IFinVouchersService extends IService<FinVouchers> {
 	R submit(FinVouchers finVouchers);
 
 	/**
-	 * 财务凭证 确认
-	 * @param finVouchers
+	 * 财务凭证 记账
+	 * @param ids
 	 * @return
 	 */
-	R confirmFinVouchers(FinVouchers finVouchers);
+	R confirmFinVouchers(String ids);
 
 	/**
-	 * 财务凭证 撤销
-	 * @param finVouchers
+	 * 财务凭证 撤销记账
+	 * @param ids
 	 * @return
 	 */
-	R revokeFinVouchers(FinVouchers finVouchers);
+	R revokeFinVouchers(String ids);
 }

+ 121 - 98
blade-service/blade-los/src/main/java/org/springblade/los/finance/vouchers/service/impl/FinVouchersServiceImpl.java

@@ -30,27 +30,22 @@ import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
-import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
-import org.springblade.los.finance.stl.entity.FinStlBills;
-import org.springblade.los.finance.stl.entity.FinStlBillsItems;
 import org.springblade.los.finance.vouchers.entity.FinVouchers;
 import org.springblade.los.finance.vouchers.entity.FinVouchersItems;
 import org.springblade.los.finance.vouchers.mapper.FinVouchersMapper;
 import org.springblade.los.finance.vouchers.service.IFinVouchersItemsService;
 import org.springblade.los.finance.vouchers.service.IFinVouchersService;
 import org.springblade.los.finance.vouchers.vo.FinVouchersVO;
-import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -108,7 +103,7 @@ public class FinVouchersServiceImpl extends ServiceImpl<FinVouchersMapper, FinVo
 	public R submit(FinVouchers finVouchers) {
 		String deptId = "";
 		String deptName = "";
-		String branchId = deptUtils.getDeptPid()+"";
+		String branchId = deptUtils.getDeptPid() + "";
 		//获取部门ids对应中文名
 		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
 			deptId = AuthUtil.getDeptId();
@@ -152,24 +147,24 @@ public class FinVouchersServiceImpl extends ServiceImpl<FinVouchersMapper, FinVo
 		if (ObjectUtils.isNotNull(finVouchers.getFinVouchersItemsList())) {
 			for (FinVouchersItems item : finVouchers.getFinVouchersItemsList()) {
 				//计算字段null值处理
-				item.setQuantityCr(ObjectUtils.isNotNull(item.getQuantityCr()) ? item.getQuantityCr() : new BigDecimal("0.00"));
+				/*item.setQuantityCr(ObjectUtils.isNotNull(item.getQuantityCr()) ? item.getQuantityCr() : new BigDecimal("0.00"));
 				item.setQuantityDr(ObjectUtils.isNotNull(item.getQuantityDr()) ? item.getQuantityDr() : new BigDecimal("0.00"));
-				item.setPrice(ObjectUtils.isNotNull(item.getPrice()) ? item.getPrice() : new BigDecimal("0.00"));
+				item.setPrice(ObjectUtils.isNotNull(item.getPrice()) ? item.getPrice() : new BigDecimal("0.00"));*/
 				item.setPid(finVouchers.getId());
 				//判断是否是本位币
-				if ("CNY".equals(item.getCurCode())) {
-					if ("D".equals(item.getDc())){
+				/*if ("CNY".equals(item.getCurCode())) {
+					if ("D".equals(item.getDc())) {
 						item.setAmountDr(item.getQuantityDr().multiply(item.getPrice()));
-					}else{
+					} else {
 						item.setAmountCr(item.getQuantityCr().multiply(item.getPrice()));
 					}
 				} else {
-					if ("D".equals(item.getDc())){
+					if ("D".equals(item.getDc())) {
 						item.setAmountDrUsd(item.getQuantityDr().multiply(item.getPrice()));
-					}else{
+					} else {
 						item.setAmountCrUsd(item.getQuantityCr().multiply(item.getPrice()));
 					}
-				}
+				}*/
 				if (item.getId() == null) {
 					item.setCreateTime(new Date());
 					item.setCreateUser(AuthUtil.getUserId());
@@ -206,8 +201,8 @@ public class FinVouchersServiceImpl extends ServiceImpl<FinVouchersMapper, FinVo
 				.filter(e -> "USD".equals(e.getCurCode()) && "C".equals(e.getDc())).map(FinVouchersItems::getAmountCrUsd)
 				.filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 			finVouchers.setAmountCrUsd(amountCrUSD);
-			finVouchers.setAmountDrLoc(amountDrCNY.add(bCurrencyService.converterCny("USD", amountDrUSD,"D")));
-			finVouchers.setAmountCrLoc(amountCrCNY.add(bCurrencyService.converterCny("USD", amountCrUSD,"C")));
+			finVouchers.setAmountDrLoc(amountDrCNY.add(bCurrencyService.converterCny("USD", amountDrUSD, "D")));
+			finVouchers.setAmountCrLoc(amountCrCNY.add(bCurrencyService.converterCny("USD", amountCrUSD, "C")));
 		}
 		this.saveOrUpdate(finVouchers);
 		return R.data(finVouchers);
@@ -216,51 +211,65 @@ public class FinVouchersServiceImpl extends ServiceImpl<FinVouchersMapper, FinVo
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
-	public R confirmFinVouchers(FinVouchers finVouchers) {
-		if (finVouchers.getId() == null) {
+	public R confirmFinVouchers(String ids) {
+		if (ids == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
-		FinVouchers detail = baseMapper.selectById(finVouchers.getId());
-		if (ObjectUtils.isNotNull(finVouchers.getFinVouchersItemsList())) {
-			//对账明细状态修改  已对账
-			for (FinVouchersItems item : finVouchers.getFinVouchersItemsList()) {
-				item.setStatus(1);
-				item.setVoucherDate(finVouchers.getVoucherDate());
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
-			}
-			finVouchersItemsService.saveOrUpdateBatch(finVouchers.getFinVouchersItemsList());
-			//通过对账明细里账单id查询具体账单数据
-			List<String> billNos = finVouchers.getFinVouchersItemsList().stream().map(FinVouchersItems::getBillNo)
-				.filter(Objects::nonNull).collect(Collectors.toList());
-			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
-				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
-				.eq(FinAccBills::getIsDeleted, 0)
-				.in(FinAccBills::getBillNo, billNos));
-			//修改账单中对账状态
-			for (FinAccBills item : finAccBillsList) {
-				item.setVoucherBillId(detail.getId());
-				item.setVoucherBillNo(detail.getBillNo());
-				item.setVoucherNo(detail.getVoucherNo());
-				item.setVoucherDate(detail.getVoucherDate());
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
+		List<FinVouchers> finVouchersListNew = new ArrayList<>();
+		List<FinVouchersItems> finVouchersItemsListNew = new ArrayList<>();
+		List<FinAccBills> finAccBillsListNew = new ArrayList<>();
+		List<FeeCenter> feeCenterListNew = new ArrayList<>();
+		List<FinVouchers> finVouchersList = baseMapper.selectList(new LambdaQueryWrapper<FinVouchers>()
+			.apply("find_in_set(id,'" + ids + "')"));
+		List<FinVouchersItems> finVouchersItemsList = finVouchersItemsService.list(new LambdaQueryWrapper<FinVouchersItems>()
+			.apply("find_in_set(pid,'" + ids + "')"));
+		for (FinVouchers detail : finVouchersList) {
+			if (ObjectUtils.isNotNull(finVouchersItemsList)) {
+				List<FinVouchersItems> finVouchersItems = finVouchersItemsList.stream().filter(e -> e.getPid().equals(detail.getId())).collect(Collectors.toList());
+				//对账明细状态修改  已对账
+				for (FinVouchersItems item : finVouchersItems) {
+					item.setStatus(1);
+					item.setVoucherDate(detail.getVoucherDate());
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					finVouchersItemsListNew.add(item);
+				}
+				//通过对账明细里账单id查询具体账单数据
+				List<String> billNos = finVouchersItems.stream().map(FinVouchersItems::getBillNo)
+					.filter(Objects::nonNull).collect(Collectors.toList());
+				List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+					.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+					.eq(FinAccBills::getIsDeleted, 0)
+					.in(FinAccBills::getBillNo, billNos));
+				//修改账单中对账状态
+				for (FinAccBills item : finAccBillsList) {
+					item.setVoucherBillId(detail.getId());
+					item.setVoucherBillNo(detail.getBillNo());
+					item.setVoucherNo(detail.getVoucherNo());
+					item.setVoucherDate(detail.getVoucherDate());
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					finAccBillsListNew.add(item);
+				}
+				//通过账单id查询具体费用中心数据
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.in(FeeCenter::getAccBillNo, billNos)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				List<FeeCenter> feeCenters = reconciliationFeeCenter(detail, feeCenterList, 1);
+				feeCenterListNew.addAll(feeCenters);
 			}
-			//通过账单id查询具体费用中心数据
-			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.in(FeeCenter::getAccBillNo, billNos)
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0));
-			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 1);
-			feeCenterService.saveOrUpdateBatch(feeCenterListNew);
-			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+			detail.setStatus(3);
+			detail.setVoucherStatus(1);
+			finVouchersListNew.add(detail);
 		}
-		detail.setStatus(3);
-		detail.setVoucherStatus(1);
-		baseMapper.updateById(detail);
-		return R.data(detail);
+		this.saveOrUpdateBatch(finVouchersListNew);
+		finVouchersItemsService.saveOrUpdateBatch(finVouchersItemsListNew);
+		feeCenterService.saveOrUpdateBatch(feeCenterListNew);
+		finAccBillsService.saveOrUpdateBatch(finAccBillsListNew);
+		return R.data("");
 	}
 
 	private List<FeeCenter> reconciliationFeeCenter(FinVouchers detail, List<FeeCenter> feeCenterList, int count) {
@@ -289,51 +298,65 @@ public class FinVouchersServiceImpl extends ServiceImpl<FinVouchersMapper, FinVo
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
-	public R revokeFinVouchers(FinVouchers finVouchers) {
-		if (finVouchers.getId() == null) {
+	public R revokeFinVouchers(String ids) {
+		if (ids == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
-		FinVouchers detail = baseMapper.selectById(finVouchers.getId());
-		if (ObjectUtils.isNotNull(finVouchers.getFinVouchersItemsList())) {
-			//对账明细状态修改  已对账
-			for (FinVouchersItems item : finVouchers.getFinVouchersItemsList()) {
-				item.setStatus(0);
-				item.setVoucherDate(finVouchers.getVoucherDate());
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
-			}
-			finVouchersItemsService.saveOrUpdateBatch(finVouchers.getFinVouchersItemsList());
-			//通过对账明细里账单id查询具体账单数据
-			List<String> billNos = finVouchers.getFinVouchersItemsList().stream().map(FinVouchersItems::getBillNo)
-				.filter(Objects::nonNull).collect(Collectors.toList());
-			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
-				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
-				.eq(FinAccBills::getIsDeleted, 0)
-				.in(FinAccBills::getBillNo, billNos));
-			//修改账单中对账状态
-			for (FinAccBills item : finAccBillsList) {
-				item.setVoucherBillId(0L);
-				item.setVoucherBillNo("");
-				item.setVoucherNo("");
-				item.setVoucherDate(null);
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
+		List<FinVouchers> finVouchersListNew = new ArrayList<>();
+		List<FinVouchersItems> finVouchersItemsListNew = new ArrayList<>();
+		List<FinAccBills> finAccBillsListNew = new ArrayList<>();
+		List<FeeCenter> feeCenterListNew = new ArrayList<>();
+		List<FinVouchers> finVouchersList = baseMapper.selectList(new LambdaQueryWrapper<FinVouchers>()
+			.apply("find_in_set(id,'" + ids + "')"));
+		List<FinVouchersItems> finVouchersItemsList = finVouchersItemsService.list(new LambdaQueryWrapper<FinVouchersItems>()
+			.apply("find_in_set(pid,'" + ids + "')"));
+		for (FinVouchers detail : finVouchersList) {
+			if (ObjectUtils.isNotNull(finVouchersItemsList)) {
+				List<FinVouchersItems> finVouchersItems = finVouchersItemsList.stream().filter(e -> e.getPid().equals(detail.getId())).collect(Collectors.toList());
+				//对账明细状态修改  已对账
+				for (FinVouchersItems item : finVouchersItems) {
+					item.setStatus(0);
+					item.setVoucherDate(detail.getVoucherDate());
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					finVouchersItemsListNew.add(item);
+				}
+				//通过对账明细里账单id查询具体账单数据
+				List<String> billNos = finVouchersItems.stream().map(FinVouchersItems::getBillNo)
+					.filter(Objects::nonNull).collect(Collectors.toList());
+				List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+					.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+					.eq(FinAccBills::getIsDeleted, 0)
+					.in(FinAccBills::getBillNo, billNos));
+				//修改账单中对账状态
+				for (FinAccBills item : finAccBillsList) {
+					item.setVoucherBillId(0L);
+					item.setVoucherBillNo("");
+					item.setVoucherNo("");
+					item.setVoucherDate(null);
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					finAccBillsListNew.add(item);
+				}
+				//通过账单id查询具体费用中心数据
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.in(FeeCenter::getAccBillNo, billNos)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				List<FeeCenter> feeCenters = reconciliationFeeCenter(detail, feeCenterList, 2);
+				feeCenterListNew.addAll(feeCenters);
 			}
-			//通过账单id查询具体费用中心数据
-			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.in(FeeCenter::getAccBillNo, billNos)
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0));
-			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 2);
-			feeCenterService.saveOrUpdateBatch(feeCenterListNew);
-			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+			detail.setStatus(0);
+			detail.setVoucherStatus(0);
+			finVouchersListNew.add(detail);
 		}
-		detail.setStatus(0);
-		detail.setVoucherStatus(0);
-		baseMapper.updateById(detail);
-		return R.data(detail);
+		this.saveOrUpdateBatch(finVouchersListNew);
+		finVouchersItemsService.saveOrUpdateBatch(finVouchersItemsListNew);
+		feeCenterService.saveOrUpdateBatch(feeCenterListNew);
+		finAccBillsService.saveOrUpdateBatch(finAccBillsListNew);
+		return R.data("");
 	}
 
 }