Browse Source

2024年1月5日18:04:11

纪新园 2 years ago
parent
commit
f392a922bb
25 changed files with 2027 additions and 251 deletions
  1. 7 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  2. 34 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/dto/EdiLogDTO.java
  3. 147 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/entity/EdiLog.java
  4. 14 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/entity/EdiTypes.java
  5. 36 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/vo/EdiLogVO.java
  6. 43 11
      blade-service/blade-los/src/main/java/org/springblade/los/Util/RegularUtils.java
  7. 6 5
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  8. 0 11
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  9. 0 7
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java
  10. 1 180
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  11. 408 4
      blade-service/blade-los/src/main/java/org/springblade/los/edi/api/EDISender.java
  12. 126 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/controller/EdiLogController.java
  13. 26 11
      blade-service/blade-los/src/main/java/org/springblade/los/edi/controller/EdiTypesController.java
  14. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/EdiAddress.java
  15. 623 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSiDto.java
  16. 9 2
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java
  17. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/mapper/EdiLogMapper.java
  18. 34 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/mapper/EdiLogMapper.xml
  19. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/IEdiLogService.java
  20. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/IEdiTypesService.java
  21. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiLogServiceImpl.java
  22. 320 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java
  23. 6 5
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  24. 5 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/controller/BrandDescController.java
  25. 13 12
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/service/impl/BrandDescServiceImpl.java

+ 7 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -27,6 +27,7 @@ import lombok.Data;
 import org.springblade.los.business.files.entity.FilesCenter;
 import org.springblade.los.business.sea.dto.ContainersReports;
 import org.springblade.los.business.sea.dto.WaitingBox;
+import org.springblade.los.edi.entity.EdiTypes;
 import org.springblade.los.finance.fee.dto.FeeCenterReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -1492,6 +1493,12 @@ public class Bills implements Serializable {
 	private String iqNo;
 
 	/**
+	 * edi发送状态  0 = 未发送  1= 已发送
+	 */
+	@ApiModelProperty(value = "edi发送状态")
+	private String ediStatus;
+
+	/**
 	 * 毛利率
 	 */
 	@TableField(exist = false)
@@ -1603,5 +1610,4 @@ public class Bills implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal boxWeightSum;
 
-
 }

+ 34 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/dto/EdiLogDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.dto;
+
+import org.springblade.los.edi.entity.EdiLog;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * edi发送日志数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class EdiLogDTO extends EdiLog {
+	private static final long serialVersionUID = 1L;
+
+}

+ 147 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/entity/EdiLog.java

@@ -0,0 +1,147 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * edi发送日志实体类
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+@Data
+@TableName("los_b_edi_log")
+@ApiModel(value = "EdiLog对象", description = "edi发送日志")
+public class EdiLog implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建部门 Id
+	 */
+	@ApiModelProperty(value = "创建部门 Id")
+	private String createDept;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private String createDeptName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 状态(0 异常 1成功  2 失败)
+	 */
+	@ApiModelProperty(value = "状态(0 异常 1成功  2 失败)")
+	private Integer status;
+	/**
+	 * 描述
+	 */
+	@ApiModelProperty(value = "描述")
+	private String remarks;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	@TableLogic(value = "0", delval = "1")
+	private Integer isDeleted;
+
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+	/**
+	 * 业务id
+	 */
+	@ApiModelProperty(value = "业务id")
+	private Long billId;
+	/**
+	 * 单据编号
+	 */
+	@ApiModelProperty(value = "单据编号")
+	private String billNo;
+	/**
+	 * MB/L NO
+	 */
+	@ApiModelProperty(value = "MB/L NO")
+	private String mblno;
+	/**
+	 * HB/L NO
+	 */
+	@ApiModelProperty(value = "HB/L NO")
+	private String hblno;
+	/**
+	 * edi  Id
+	 */
+	@ApiModelProperty(value = "edi  Id")
+	private Long pid;
+	/**
+	 * 发送时间
+	 */
+	@ApiModelProperty(value = "发送时间")
+	private Date senderDate;
+
+
+}

+ 14 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/entity/EdiTypes.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.edi.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -24,6 +25,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 基础资料-EDI 类型表实体类
@@ -152,5 +154,17 @@ public class EdiTypes implements Serializable {
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
 	private Integer isDeleted;
 
+	/**
+	 * EDI业务类型
+	 */
+	@ApiModelProperty(value = "EDI业务类型")
+	private String type;
+
+	/**
+	 * 业务id
+	 */
+	@TableField(exist = false)
+	private String billId;
+
 
 }

+ 36 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/edi/vo/EdiLogVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.vo;
+
+import org.springblade.los.edi.entity.EdiLog;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * edi发送日志视图实体类
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "EdiLogVO对象", description = "edi发送日志")
+public class EdiLogVO extends EdiLog {
+	private static final long serialVersionUID = 1L;
+
+}

+ 43 - 11
blade-service/blade-los/src/main/java/org/springblade/los/Util/RegularUtils.java

@@ -1,5 +1,8 @@
 package org.springblade.los.Util;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
@@ -7,20 +10,49 @@ import java.util.regex.Pattern;
  * @date : 2023/12/25
  */
 public class RegularUtils {
-	public RegularUtils() {
-	}
-
 
 	/**
-	 * 字符串只允许出现英文字母
+	 * 处理字符串中特殊字符
 	 *
-	 * @param data  内容
-	 * @return  结果
+	 * @param data 内容
+	 * @return 结果
 	 */
-	public static Boolean regularEn(String data) {
-		String regex = "^[a-zA-Z0-9]+$";
-		Pattern pattern = Pattern.compile(regex);
-		return pattern.matcher(data).matches();
+	public static String regularEn(String data) {
+		if (ObjectUtils.isNull(data)){
+			return data;
+		}
+		Pattern pattern = Pattern.compile("[^a-zA-Z0-9\\s]");
+		Matcher matcher = pattern.matcher(data);
+		while (matcher.find()) {
+			String character = matcher.group();
+			// 获取特殊符号的Unicode编码
+			int unicode = character.codePointAt(0);
+			if (
+				",".equals(character) || "。".equals(character) || "?".equals(character) || "!".equals(character) ||
+					"、".equals(character) || ":".equals(character) || ";".equals(character) || "%".equals(character) ||
+					"*".equals(character) || "——".equals(character) || "……".equals(character) || "(".equals(character) ||
+					")".equals(character) || "‘".equals(character) || "’".equals(character) || "“".equals(character) ||
+					"”".equals(character) || "[".equals(character) || "]".equals(character) || "『".equals(character) ||
+					"』".equals(character) || "〔".equals(character) || "〕".equals(character) || "【".equals(character) ||
+					"】".equals(character) || "¥".equals(character) || "£".equals(character) || "♀".equals(character) ||
+					"〖".equals(character) || "〗".equals(character) || "《".equals(character) || "》".equals(character) ||
+					"「".equals(character) || "」".equals(character)
+			) {
+				throw new RuntimeException("存在中文特殊字符:“" + character + "”");
+			}
+			// 判断特殊符号是英文符号还是中文符号
+			if (unicode >= 0x0020 && unicode <= 0x007E) {
+				//English
+				if ("?".equals(character) || "'".equals(character) || "+".equals(character) || ":".equals(character)) {
+					data = data.replaceAll(character, "?" + character);
+				}
+			} else if (unicode >= 0x4E00 && unicode <= 0x9FFF) {
+				//Chinese
+//				throw new RuntimeException("存在中文特殊字符:“" + character + "”");
+			} else {
+				throw new RuntimeException("存在既不是中文特殊字符又不是英文特殊字符:“" + character + "”");
+			}
+		}
+		return data;
 	}
-
 }

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

@@ -886,7 +886,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (finStlBills != null) {
 				if (ObjectUtils.isNotNull(finStlBills.getCorpId())) {
 					BCorps bCorps = bCorpsService.getById(finStlBills.getCorpId());
-					if (bCorps != null){
+					if (bCorps != null) {
 						finStlBills.setAttnName(bCorps.getAttnName());
 						finStlBills.setAttnTel(bCorps.getAttnTel());
 					}
@@ -928,12 +928,12 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put("data", null);
 			}
-		}else if ("结算中心".equals(reportCode) && "收费结算".equals(groupCode)) {
+		} else if ("结算中心".equals(reportCode) && "收费结算".equals(groupCode)) {
 			FinStlBills finStlBills = finStlBillsService.getById(billId);
 			if (finStlBills != null) {
 				if (ObjectUtils.isNotNull(finStlBills.getCorpId())) {
 					BCorps bCorps = bCorpsService.getById(finStlBills.getCorpId());
-					if (bCorps != null){
+					if (bCorps != null) {
 						finStlBills.setAttnName(bCorps.getAttnName());
 						finStlBills.setAttnTel(bCorps.getAttnTel());
 					}
@@ -945,7 +945,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				LambdaQueryWrapper<FinStlBillsItems> lambdaQueryWrapper = new LambdaQueryWrapper<FinStlBillsItems>()
 					.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
 					.eq(FinStlBillsItems::getIsDeleted, 0)
-					.eq(FinStlBillsItems::getPid, finStlBills.getId());
+					.eq(FinStlBillsItems::getPid, finStlBills.getId())
+					.orderByDesc(FinStlBillsItems::getVesselCnName);
 				List<FinStlBillsItems> finStlBillsItems = finStlBillsItemsService.list(lambdaQueryWrapper);
 				if (finStlBillsItems.size() > 0) {
 					for (FinStlBillsItems item : finStlBillsItems) {
@@ -955,7 +956,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						finStlBillsItemsReports.setBillNo(item.getBillNo());
 						finStlBillsItemsReports.setAccBillNo(item.getAccBillNo());
 						finStlBillsItemsReports.setEtd(item.getEtd());
-						finStlBillsItemsReports.setVesselCnName(item.getVesselCnName()+"/"+item.getVoyageNo());
+						finStlBillsItemsReports.setVesselCnName(item.getVesselCnName() + "/" + item.getVoyageNo());
 						finStlBillsItemsReports.setQuantityCntrTypesDescr(item.getQuantityCntrTypesDescr());
 						finStlBillsItemsReports.setPodCnName(item.getPodCnName());
 						if ("D".equals(item.getDc())) {

+ 0 - 11
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -360,15 +360,4 @@ public class BillsController extends BladeController {
 		return R.data(declare);
 	}
 
-	/**
-	 * 发送edi
-	 */
-	@GetMapping("/sendingEdi")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "发送edi", notes = "传入bills")
-	@RepeatSubmit
-	public R sendingEdi( Bills bills) {
-		return billsService.sendingEdi(bills);
-	}
-
 }

+ 0 - 7
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java

@@ -133,11 +133,4 @@ public interface IBillsService extends IService<Bills> {
 	 * @return
 	 */
 	Bills copyBills(Bills bills);
-
-	/**
-	 * 发送edi
-	 * @param bills
-	 * @return
-	 */
-    R sendingEdi(Bills bills);
 }

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

@@ -28,6 +28,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.Util.RegularUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.corps.entity.BCorps;
@@ -1374,186 +1375,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return copyBills;
 	}
 
-	@Override
-	public R sendingEdi(Bills bills) {
-		if (bills.getId() == null) {
-			throw new RuntimeException("缺少必要参数");
-		}
-		Date date = new Date();
-		Bills details = baseMapper.selectById(bills.getId());
-		InttraSoDto inttraSoDto = new InttraSoDto();
-		inttraSoDto.setIdentifying("发送方标识");
-		SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd:hhmm");
-		inttraSoDto.setDate(sdf.format(date));
-		SimpleDateFormat sdf1 = new SimpleDateFormat("yyMMddhhmm");
-		String corpId = details.getCorpId().toString();
-		inttraSoDto.setFileExchangeNumber(sdf1.format(date) + corpId.substring(corpId.length() - 4));
-		inttraSoDto.setInformationNo(inttraSoDto.getFileExchangeNumber());
-		inttraSoDto.setIdentificationCode(details.getMblno() + "SO");
-		inttraSoDto.setFilesFunction("9");
-		inttraSoDto.setFilesDate("cc" + sdf1.format(date));
-		inttraSoDto.setTransportTermCode(details.getServiceTerms());
-		inttraSoDto.setLclType("2");
-		inttraSoDto.setRemarks(details.getRemarks());
-		inttraSoDto.setCarrySingleRemarks(details.getBookingRemarks());
-		inttraSoDto.setWeightOfGoods(details.getGrossWeight().toString());
-		inttraSoDto.setPackagesNumber(details.getQuantity());
-		inttraSoDto.setVolumeOfGoods(details.getMeasurement());
-		Integer sum = details.getQuantityV20() + details.getQuantityV40() + details.getQuantityV45()
-			+ details.getQuantityV48() + details.getQuantityV40hc();
-		inttraSoDto.setTotalBoxNumber(new BigDecimal(sum + ""));
-		if (ObjectUtils.isNotNull(details.getMpayplace())) {
-			BPorts bPorts = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
-				.eq(BPorts::getTenantId, AuthUtil.getTenantId())
-				.eq(BPorts::getIsDeleted, 0)
-				.eq(BPorts::getEnName, details.getMpayplace()));
-			if (bPorts != null) {
-				inttraSoDto.setPaymentLocationCode(bPorts.getCode());
-			}
-		}
-		inttraSoDto.setPaymentLand(details.getMpayplace());
-		if (ObjectUtils.isNotNull(details.getIssueAtId())) {
-			BPorts bPorts = bPortsService.getById(details.getIssueAtId());
-			if (bPorts != null) {
-				inttraSoDto.setIssuanceLandCode(bPorts.getCode());
-			}
-		}
-		inttraSoDto.setIssuanceLand(details.getIssueAt());
-		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyymmdd");
-		inttraSoDto.setIssueDate(sdf2.format(details.getIssueDate()));
-		inttraSoDto.setBookingNo(details.getBookingNo());
-		inttraSoDto.setBillNo(details.getRefno());
-		inttraSoDto.setFreightProtocolNumber(details.getCorpArgreementNo());
-		inttraSoDto.setMainPinyin("");
-		inttraSoDto.setOrderNo(details.getMblno());
-		inttraSoDto.setJobId(details.getBillNo());
-		inttraSoDto.setPaymentType(details.getMpaymode());
-		inttraSoDto.setVoyageNo(details.getVoyageNo());
-		if (ObjectUtils.isNotNull(details.getVesselId())) {
-			BVessels bVessels = bVesselsService.getById(details.getVesselId());
-			if (bVessels != null) {
-				BCorps bCorps = bCorpsService.getById(bVessels.getCarrierId());
-				if (bCorps != null) {
-					inttraSoDto.setVesselCarrierCode(bCorps.getCarrierCode());
-				}
-			}
-		}
-		inttraSoDto.setVesselName(details.getVesselCnName());
-		inttraSoDto.setPolCode(details.getPolCode());
-		inttraSoDto.setPolName(details.getPolCnName());
-		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyymmdd");
-		inttraSoDto.setEtd(sdf3.format(details.getEtd()));
-		inttraSoDto.setPlaceReceiptCode(details.getPlaceReceiptCode());
-		inttraSoDto.setPlaceReceiptName(details.getPlaceReceiptName());
-		inttraSoDto.setPodCode(details.getPodCode());
-		inttraSoDto.setPodName(details.getPodCnName());
-		inttraSoDto.setPlaceDeliveryCode(details.getPlaceDeliveryCode());
-		inttraSoDto.setPlaceDeliveryName(details.getPlaceDeliveryName());
-		inttraSoDto.setHsHipperOne(details.getHshipperCnName());
-		inttraSoDto.setHsHipperTwo("发货人 2");
-		inttraSoDto.setHsHipperThree("发货人 3");
-		inttraSoDto.setHsHipperFour("发货人 4");
-		inttraSoDto.setHsHipperFive("发货人 5");
-		inttraSoDto.setHConsigneeOne(details.getHconsigneeCnName());
-		inttraSoDto.setHConsigneeTwo("收货人 2");
-		inttraSoDto.setHConsigneeThree("收货人3");
-		inttraSoDto.setHConsigneeFour("收货人 4");
-		inttraSoDto.setHConsigneeFive("收货人 5");
-		inttraSoDto.setHNotifyOne(details.getHnotifyCnName());
-		inttraSoDto.setHNotifyTwo("通知人 2");
-		inttraSoDto.setHNotifyThree("通知人 3");
-		inttraSoDto.setHNotifyFour("通知人 4");
-		inttraSoDto.setHNotifyFive("通知人 5");
-		inttraSoDto.setCarrierName(details.getCarrierCnName());
-		if (ObjectUtils.isNotNull(details.getCarrierId())) {
-			BCorps bCorps = bCorpsService.getById(details.getCarrierId());
-			if (bCorps != null) {
-				inttraSoDto.setCarrierCode(bCorps.getCarrierCode());
-				inttraSoDto.setContactInformation(bCorps.getShortName());
-				inttraSoDto.setContacts(bCorps.getAttnName());
-				inttraSoDto.setAttnEmail(bCorps.getEmail());
-			}
-		}
-		inttraSoDto.setInttraToDoorName(details.getInttraToDoorCorpName());
-		inttraSoDto.setInttraToDoorAddrOne(details.getInttraToDoorCorpAddr());
-		inttraSoDto.setInttraToDoorAddrTwo("地址 2");
-		inttraSoDto.setInttraToDoorAddrThree("地址 3");
-		inttraSoDto.setInttraToDoorAddrFour("地址 4");
-		inttraSoDto.setInttraToDoorContacts(details.getInttraToDoorCorpContacts());
-		inttraSoDto.setInttraToDoorTel(details.getInttraToDoorCorpTel());
-		inttraSoDto.setInttraDoorToName(details.getInttraDoorToCorpName());
-		inttraSoDto.setInttraDoorToAddrOne(details.getInttraDoorToCorpAddr());
-		inttraSoDto.setInttraDoorToAddrTwo("地址 2");
-		inttraSoDto.setInttraDoorToAddrThree("地址 3");
-		inttraSoDto.setInttraDoorToAddrFour("地址 4");
-		inttraSoDto.setInttraDoorToContacts(details.getInttraDoorToCorpContacts());
-		inttraSoDto.setInttraDoorToTel(details.getInttraDoorToCorpTel());
-		inttraSoDto.setFreightForwarderCode("货代代码");
-		inttraSoDto.setFreightForwarderName("货代称呼");
-		inttraSoDto.setSenderCode("发送方代码");
-		inttraSoDto.setSenderName("发送方称呼");
-		inttraSoDto.setSenderContacts("发送方联系人");
-		inttraSoDto.setSenderTel("发送方联系电话");
-		inttraSoDto.setSenderEmail("发送方联系邮件");
-		inttraSoDto.setBillLadingType("提单类型");
-		if (details.getStlCrStatus() >= 3 || details.getStlDrStatus() >= 3) {
-			inttraSoDto.setPaymentStatus("已付款");
-		} else {
-			inttraSoDto.setPaymentStatus("未付款");
-		}
-		inttraSoDto.setBillLadingNumber(new BigDecimal("0"));
-		inttraSoDto.setPackagesNumbers(details.getQuantity());
-		inttraSoDto.setPackagesCode(details.getPackingUnit());
-		inttraSoDto.setPackagesDescribe("包装描述");
-		inttraSoDto.setHsCode(new BigDecimal("001"));
-		inttraSoDto.setProductName(details.getCommodityCnName());
-		inttraSoDto.setGrossWeight(details.getGrossWeight());
-		inttraSoDto.setMeasurement(details.getMeasurement());
-		inttraSoDto.setMarks(details.getMarks());
-		inttraSoDto.setDgImdgCode(details.getDgImdgCode());
-		inttraSoDto.setPageNumber(new BigDecimal("007"));
-		inttraSoDto.setDgUnCode(1);
-		inttraSoDto.setDgFlashPoint(1);
-		inttraSoDto.setDgFlashPointUnit(details.getDgFlashPointUnit());
-		inttraSoDto.setPackingGroup("包装组别");
-		inttraSoDto.setEmergencyMeasureNo("应急措施号");
-		inttraSoDto.setDgRemarks(details.getDgRemarks());
-		inttraSoDto.setDgContacts(details.getDgContacts());
-		inttraSoDto.setDgTel(details.getDgTel());
-		inttraSoDto.setBoxCode(details.getQuantityCntrDescr());
-		inttraSoDto.setShipperBoxIdentification("货主箱标识");
-		Integer sum1 = details.getQuantityV20() + details.getQuantityV40() + details.getQuantityV45()
-			+ details.getQuantityV48() + details.getQuantityV40hc();
-		inttraSoDto.setBoxNumber(new BigDecimal(sum1 + ""));
-		inttraSoDto.setVentilation("冷藏通风量");
-		inttraSoDto.setTemperature(1);
-		inttraSoDto.setTemperatureUnit("温度单位");
-		inttraSoDto.setRecordRows(new BigDecimal("10"));
-		inttraSoDto.setInformationNoEnd(inttraSoDto.getInformationNo());
-		inttraSoDto.setFileExchangeNumberEnd(inttraSoDto.getFileExchangeNumber());
 
 
-		FilesCenter filesCenter = EDISender.sendingInttraSo(inttraSoDto);
-		filesCenter.setMblno(details.getMblno());
-		filesCenter.setHblno(details.getHblno());
-		filesCenter.setBillNo(details.getBillNo());
-		filesCenter.setBranchId(details.getBranchId());
-		filesCenter.setCreateDept(details.getCreateDept());
-		filesCenter.setCreateTime(details.getCreateTime());
-		filesCenter.setCreateDeptName(details.getCreateDeptName());
-		filesCenter.setCreateUser(details.getCreateUser());
-		filesCenter.setCreateUserName(details.getCreateUserName());
-		filesCenter.setPid(details.getId());
-		filesCenter.setBusinessType(details.getBusinessType());
-		filesCenter.setClassifyCode("edi");
-		filesCenter.setGroupCode("SO");
-		filesCenter.setSerialNo(1);
-		filesCenter.setSort(1);
-		filesCenter.setReceivedData(new Date());
-		filesCenter.setIsImage(0);
-		filesCenter.setTenantId(AuthUtil.getTenantId());
-		filesCenterService.saveOrUpdate(filesCenter);
-		return R.data(filesCenter);
-	}
-
 }

+ 408 - 4
blade-service/blade-los/src/main/java/org/springblade/los/edi/api/EDISender.java

@@ -1,8 +1,11 @@
 package org.springblade.los.edi.api;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.los.business.files.entity.FilesCenter;
+import org.springblade.los.edi.dto.EdiAddress;
+import org.springblade.los.edi.dto.InttraSiDto;
 import org.springblade.los.edi.dto.InttraSoDto;
 
 import javax.validation.Valid;
@@ -12,6 +15,7 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author :jixinyuan
@@ -25,8 +29,8 @@ public class EDISender {
 			SimpleDateFormat sdf1 = new SimpleDateFormat("yyMMddhhmmss");
 			Date date = new Date();
 			//生成edi文件
-//			File file = new File("/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload", sdf1.format(date) +"-edi.txt");
-			File file = new File("D:/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload", sdf1.format(date) + "-edi.text");
+			File file = new File("/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload", sdf1.format(date) + "-edi.txt");
+//			File file = new File("D:/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload", sdf1.format(date) + "-edi.text");
 			file.createNewFile();
 			// 打开文件输出流进行写入操作
 			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
@@ -38,13 +42,13 @@ public class EDISender {
 			writer.write("UNH+" + inttraSoDto.getInformationNo() + "+IFTMIN:D:99B:UN'");
 			writer.newLine();
 			/* =================0020=================  */
-			writer.write("BGM+335+" + inttraSoDto.getIdentificationCode()+"+" + inttraSoDto.getFilesFunction() + "'");
+			writer.write("BGM+335+" + inttraSoDto.getIdentificationCode() + "+" + inttraSoDto.getFilesFunction() + "'");
 			writer.newLine();
 			/* =================0050=================  */
 			writer.write("DTM+137:" + inttraSoDto.getFilesDate() + "203'");
 			writer.newLine();
 			/* =================0060=================  */
-			writer.write("TSR+" + inttraSoDto.getTransportTermCode()+"+" + inttraSoDto.getLclType() + "'");
+			writer.write("TSR+" + inttraSoDto.getTransportTermCode() + "+" + inttraSoDto.getLclType() + "'");
 			writer.newLine();
 			/* =================0090=================  */
 			writer.write("FTX+AAI+++" + inttraSoDto.getRemarks() + "'");
@@ -489,6 +493,406 @@ public class EDISender {
 			filesCenter.setReceivedData(new Date());
 			return filesCenter;
 		} catch (IOException e) {
+			throw new RuntimeException("生成edi文件失败");
+		}
+	}
+
+	public static FilesCenter sendingInttraSI(@Valid InttraSiDto inttraSiDto) {
+		try {
+			SimpleDateFormat sdf1 = new SimpleDateFormat("yyMMddhhmmss");
+			Date date = new Date();
+			//生成edi文件
+			File file = new File("/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload", sdf1.format(date) + "-edi.txt");
+//			File file = new File("D:/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload", sdf1.format(date) + "-edi.text");
+			file.createNewFile();
+			// 打开文件输出流进行写入操作
+			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+			// 向文件写入数据
+			/* =================0005=================  */
+			writer.write("UNB+UNOC:2+" + inttraSiDto.getIdentifying() + ":ZZZ+INTTRA:ZZZ+" + inttraSiDto.getDate() + "+" + inttraSiDto.getFileExchangeNumber() + "'");
+			writer.newLine();
+			/* =================0010=================  */
+			writer.write("UNH+" + inttraSiDto.getInformationNo() + "+IFTMIN:D:99B:UN'");
+			writer.newLine();
+			/* =================0020=================  */
+			writer.write("BGM+340+" + inttraSiDto.getIdentificationCode() + "+" + inttraSiDto.getFilesFunction() + "'");
+			writer.newLine();
+			/* =================0050=================  */
+			writer.write("DTM+137:" + inttraSiDto.getFilesDate() + "203'");
+			writer.newLine();
+			/* =================0060=================  */
+			writer.write("TSR+" + inttraSiDto.getTransportTermCode() + "+" + inttraSiDto.getLclType() + "'");
+			writer.newLine();
+			/* =================0090=================  */
+			writer.write("FTX+AAI+++" + inttraSiDto.getRemarks() + "'");
+			writer.newLine();
+			if (ObjectUtils.isNotNull(inttraSiDto.getCarrySingleRemarks())) {
+				writer.write("FTX+BLC+++" + inttraSiDto.getCarrySingleRemarks() + "'");
+				writer.newLine();
+			}
+			/* =================0100=================  */
+			writer.write("CNT+7:" + inttraSiDto.getWeightOfGoods() + ":KGM'");
+			writer.newLine();
+			if (ObjectUtils.isNotNull(inttraSiDto.getPackagesNumber())) {
+				writer.write("CNT+11:" + inttraSiDto.getPackagesNumber() + "'");
+				writer.newLine();
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getVolumeOfGoods())) {
+				writer.write("CNT+15:" + inttraSiDto.getVolumeOfGoods() + ":MTQ'");
+				writer.newLine();
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getTotalBoxNumber())) {
+				writer.write("CNT+16:" + inttraSiDto.getTotalBoxNumber() + "'");
+				writer.newLine();
+			}
+			/* =================0140=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getPaymentLocationCode())) {
+				writer.write("LOC+57+" + inttraSiDto.getPaymentLocationCode());
+				if (ObjectUtils.isNotNull(inttraSiDto.getPaymentLand())) {
+					writer.write("::6:" + inttraSiDto.getPaymentLand() + "'");
+					writer.newLine();
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getIssuanceLandCode())) {
+				writer.write("LOC+73+" + inttraSiDto.getIssuanceLandCode());
+				if (ObjectUtils.isNotNull(inttraSiDto.getIssuanceLand())) {
+					writer.write("::6:" + inttraSiDto.getIssuanceLand() + "'");
+					writer.newLine();
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			}
+			/* =================0150=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getIssueDate())) {
+				writer.write("DTM+95:" + inttraSiDto.getIssueDate() + ":102'");
+				writer.newLine();
+			}
+			/* =================0200=================  */
+			writer.write("RFF+BN:" + inttraSiDto.getBookingNo() + "'");
+			writer.newLine();
+			if (ObjectUtils.isNotNull(inttraSiDto.getBillNo())) {
+				writer.write("RFF+BM:" + inttraSiDto.getBillNo() + "'");
+				writer.newLine();
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getFreightProtocolNumber())) {
+				writer.write("RFF+CT:" + inttraSiDto.getFreightProtocolNumber() + "'");
+				writer.newLine();
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getMainPinyin())) {
+				writer.write("RFF+SI:" + inttraSiDto.getMainPinyin() + "'");
+				writer.newLine();
+			}
+			if (ObjectUtils.isNotNull(inttraSiDto.getOrderNo())) {
+				writer.write("RFF+ON:" + inttraSiDto.getOrderNo() + "'");
+				writer.newLine();
+			}
+			/* =================0320=================  */
+			writer.write("CPI+4++" + inttraSiDto.getPaymentType() + "'");
+			writer.newLine();
+			/* =================0480=================  */
+			if (inttraSiDto.getVoyageNo().indexOf("V.") > 0) {
+				throw new RuntimeException("航次中不能存在‘V.’");
+			} else {
+				writer.write("TDT+20+" + inttraSiDto.getVoyageNo() + "+1++");
+				if (ObjectUtils.isNotNull(inttraSiDto.getVesselCarrierCode())) {
+					writer.write(inttraSiDto.getVesselCarrierCode() + ":172+++:::" + inttraSiDto.getVesselName() + "'");
+					writer.newLine();
+				} else {
+					writer.write("+++:::" + inttraSiDto.getVesselName() + "'");
+					writer.newLine();
+				}
+			}
+			/* =================0520=================  */
+			writer.write("LOC+88+" + inttraSiDto.getPlaceReceiptCode() + "::6:" + inttraSiDto.getPlaceReceiptName() + "'");
+			writer.newLine();
+			writer.write("LOC+9+" + inttraSiDto.getPolCode() + "::6:" + inttraSiDto.getPolName() + "'");
+			writer.newLine();
+			writer.write("LOC+11+" + inttraSiDto.getPodCode() + "::6:" + inttraSiDto.getPodName() + "'");
+			writer.newLine();
+			writer.write("LOC+7+" + inttraSiDto.getPlaceDeliveryCode() + "::6:" + inttraSiDto.getPlaceDeliveryName() + "'");
+			writer.newLine();
+			/* =================0580=================  */
+			writer.write("NAD+CZ+++" + inttraSiDto.getHsHipperOne());
+			if (ObjectUtils.isNotNull(inttraSiDto.getHsHipperTwo())) {
+				writer.write(":" + inttraSiDto.getHsHipperTwo());
+				if (ObjectUtils.isNotNull(inttraSiDto.getHsHipperThree())) {
+					writer.write(":" + inttraSiDto.getHsHipperThree());
+					if (ObjectUtils.isNotNull(inttraSiDto.getHsHipperFour())) {
+						writer.write(":" + inttraSiDto.getHsHipperFour());
+						if (ObjectUtils.isNotNull(inttraSiDto.getHsHipperFive())) {
+							writer.write(":" + inttraSiDto.getHsHipperFive() + "'");
+							writer.newLine();
+						} else {
+							writer.write("'");
+							writer.newLine();
+						}
+					} else {
+						writer.write("'");
+						writer.newLine();
+					}
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			} else {
+				writer.write("'");
+				writer.newLine();
+			}
+			writer.write("NAD+CN+++" + inttraSiDto.getHConsigneeOne());
+			if (ObjectUtils.isNotNull(inttraSiDto.getHConsigneeTwo())) {
+				writer.write(":" + inttraSiDto.getHConsigneeTwo());
+				if (ObjectUtils.isNotNull(inttraSiDto.getHConsigneeThree())) {
+					writer.write(":" + inttraSiDto.getHConsigneeThree());
+					if (ObjectUtils.isNotNull(inttraSiDto.getHConsigneeFour())) {
+						writer.write(":" + inttraSiDto.getHConsigneeFour());
+						if (ObjectUtils.isNotNull(inttraSiDto.getHConsigneeFive())) {
+							writer.write(":" + inttraSiDto.getHConsigneeFive() + "'");
+							writer.newLine();
+						} else {
+							writer.write("'");
+							writer.newLine();
+						}
+					} else {
+						writer.write("'");
+						writer.newLine();
+					}
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			} else {
+				writer.write("'");
+				writer.newLine();
+			}
+			writer.write("NAD+NI+++" + inttraSiDto.getHNotifyOne());
+			if (ObjectUtils.isNotNull(inttraSiDto.getHNotifyTwo())) {
+				writer.write(":" + inttraSiDto.getHNotifyTwo());
+				if (ObjectUtils.isNotNull(inttraSiDto.getHNotifyThree())) {
+					writer.write(":" + inttraSiDto.getHNotifyThree());
+					if (ObjectUtils.isNotNull(inttraSiDto.getHNotifyFour())) {
+						writer.write(":" + inttraSiDto.getHNotifyFour());
+						if (ObjectUtils.isNotNull(inttraSiDto.getHNotifyFive())) {
+							writer.write(":" + inttraSiDto.getHNotifyFive() + "'");
+							writer.newLine();
+						} else {
+							writer.write("'");
+							writer.newLine();
+						}
+					} else {
+						writer.write("'");
+						writer.newLine();
+					}
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			} else {
+				writer.write("'");
+				writer.newLine();
+			}
+			writer.write("NAD+CA+" + inttraSiDto.getCarrierCode() + ":160:86++" + inttraSiDto.getCarrierName() + "'");
+			writer.newLine();
+			writer.write("NAD+HI+" + inttraSiDto.getSenderCode() + ":160:86++" + inttraSiDto.getSenderName() + "'");
+			writer.newLine();
+			/* =================0620=================  */
+			writer.write("CTA+IC+:" + inttraSiDto.getSenderContacts() + "'");
+			writer.newLine();
+			/* =================0630=================  */
+			writer.write("COM+" + inttraSiDto.getSenderTel() + ":TE'");
+			writer.newLine();
+			writer.write("COM+" + inttraSiDto.getSenderEmail() + ":EM'");
+			writer.newLine();
+			/* =================0650=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getBillLadingType())) {
+				writer.write("DOC+" + inttraSiDto.getBillLadingType());
+				if (ObjectUtils.isNotNull(inttraSiDto.getPaymentStatus())) {
+					writer.write("+:" + inttraSiDto.getPaymentStatus() + "+:" + inttraSiDto.getBillLadingNumber() + "'");
+					writer.newLine();
+				} else {
+					writer.write("+:" + inttraSiDto.getBillLadingNumber() + "'");
+					writer.newLine();
+				}
+			}
+			/* =================0910=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getPackagesNumbers())) {
+				writer.write("GID+1+" + inttraSiDto.getPackagesNumbers() + ":" + inttraSiDto.getPackagesCode() + "::6");
+				if (ObjectUtils.isNotNull(inttraSiDto.getPackagesDescribe())) {
+					writer.write(":" + inttraSiDto.getPackagesDescribe() + "'");
+					writer.newLine();
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			}
+			/* =================0980=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getHsCode())) {
+				writer.write("PIA+5+" + inttraSiDto.getHsCode() + ":HS'");
+				writer.newLine();
+			}
+			/* =================0990=================  */
+			writer.write("FTX+AAA+++" + inttraSiDto.getProductName() + "'");
+			writer.newLine();
+			/* =================1070=================  */
+			writer.write("MEA+AAE+WT+KGM:" + inttraSiDto.getGrossWeight() + "'");
+			writer.newLine();
+			writer.write("MEA+AAE+AAW+MTQ:" + inttraSiDto.getMeasurement() + "'");
+			writer.newLine();
+			/* =================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();
+
+			/* =================1520=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getDgImdgCode())) {
+				writer.write("DGS+IMD+" + inttraSiDto.getDgImdgCode());
+				if (ObjectUtils.isNotNull(inttraSiDto.getPageNumber())) {
+					writer.write(":" + inttraSiDto.getPageNumber());
+					if (ObjectUtils.isNotNull(inttraSiDto.getDgUnCode())) {
+						writer.write("+" + inttraSiDto.getDgUnCode());
+						if (ObjectUtils.isNotNull(inttraSiDto.getDgFlashPoint())) {
+							writer.write("+" + inttraSiDto.getDgFlashPoint());
+							if (ObjectUtils.isNotNull(inttraSiDto.getDgFlashPointUnit())) {
+								writer.write(":" + inttraSiDto.getDgFlashPointUnit());
+								if (ObjectUtils.isNotNull(inttraSiDto.getPackingGroup())) {
+									writer.write("+" + inttraSiDto.getPackingGroup());
+									if (ObjectUtils.isNotNull(inttraSiDto.getEmergencyMeasureNo())) {
+										writer.write("+" + inttraSiDto.getEmergencyMeasureNo() + "'");
+										writer.newLine();
+									} else {
+										writer.write("'");
+										writer.newLine();
+									}
+								} else {
+									writer.write("'");
+									writer.newLine();
+								}
+							} else {
+								writer.write("'");
+								writer.newLine();
+							}
+						} else {
+							writer.write("'");
+							writer.newLine();
+						}
+					} else {
+						writer.write("'");
+						writer.newLine();
+					}
+				} else {
+					writer.write("'");
+					writer.newLine();
+				}
+			}
+			/* =================1530=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getDgRemarks())) {
+				writer.write("FTX+AAC+++" + inttraSiDto.getDgRemarks() + "'");
+				writer.newLine();
+			}
+			/* =================1550=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getDgContacts())) {
+				writer.write("CTA+HG+:" + inttraSiDto.getDgContacts() + "'");
+				writer.newLine();
+			}
+			/* =================1560=================  */
+			if (ObjectUtils.isNotNull(inttraSiDto.getDgTel())) {
+				writer.write("COM+" + inttraSiDto.getDgTel() + "'");
+				writer.newLine();
+			}
+			/* =================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();
+			}
+
+			/* =================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();
+				}
+			}
+
+			/* =================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() + "'");
+			writer.newLine();
+			/* =================2010=================  */
+			writer.write("UNZ+1+" + inttraSiDto.getFileExchangeNumberEnd() + "'");
+			writer.newLine();
+			// 关闭文件输出流
+			writer.close();
+			//文件地址
+			String url = file.getAbsolutePath();
+			//替换地址
+			url = url.replace("/home/minio", "http://121.37.83.47");
+
+			if (ObjectUtils.isNotNull(inttraSiDto.getEdiTypes())) {
+				if (ObjectUtils.isNotNull(inttraSiDto.getEdiTypes().getAddress())) {
+					List<EdiAddress> ediAddressList = JSONArray.parseArray(inttraSiDto.getEdiTypes().getAddress(), EdiAddress.class);
+					for (EdiAddress item : ediAddressList) {
+						if ("email".equals(item.getMode())) {
+
+						} else if ("ftp".equals(item.getMode())) {
+
+						} else {
+							throw new RuntimeException("edi地址配置错误");
+						}
+					}
+				}
+			}
+			FilesCenter filesCenter = new FilesCenter();
+			filesCenter.setUrl(url);
+			filesCenter.setFileName(file.getName());
+			// 查找最后一个点号的索引位置
+			int dotIndex = file.getName().lastIndexOf('.');
+			// 确保点号不是第一个字符且不是最后一个字符
+			if (dotIndex > -1 && dotIndex < file.getName().length() - 1) {
+				// 提取从点号开始到结尾之间的部分作为扩展名
+				filesCenter.setFileExt(file.getName().substring(dotIndex + 1));
+			}
+			filesCenter.setReceivedData(new Date());
+			return filesCenter;
+		} catch (IOException e) {
 			throw new SecurityException("生成edi文件失败");
 		}
 	}

+ 126 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/controller/EdiLogController.java

@@ -0,0 +1,126 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+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.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.los.edi.entity.EdiLog;
+import org.springblade.los.edi.service.IEdiLogService;
+import org.springblade.los.edi.vo.EdiLogVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * edi发送日志 控制器
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/edilog")
+@Api(value = "edi发送日志", tags = "edi发送日志接口")
+public class EdiLogController extends BladeController {
+
+	private final IEdiLogService ediLogService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入ediLog")
+	public R<EdiLog> detail(EdiLog ediLog) {
+		EdiLog detail = ediLogService.getOne(Condition.getQueryWrapper(ediLog));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 edi发送日志
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入ediLog")
+	public R<IPage<EdiLog>> list(EdiLog ediLog, Query query) {
+		IPage<EdiLog> pages = ediLogService.page(Condition.getPage(query), Condition.getQueryWrapper(ediLog));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 edi发送日志
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入ediLog")
+	public R<IPage<EdiLogVO>> page(EdiLogVO ediLog, Query query) {
+		IPage<EdiLogVO> pages = ediLogService.selectEdiLogPage(Condition.getPage(query), ediLog);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 edi发送日志
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入ediLog")
+	public R save(@Valid @RequestBody EdiLog ediLog) {
+		return R.status(ediLogService.save(ediLog));
+	}
+
+	/**
+	 * 修改 edi发送日志
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入ediLog")
+	public R update(@Valid @RequestBody EdiLog ediLog) {
+		return R.status(ediLogService.updateById(ediLog));
+	}
+
+	/**
+	 * 新增或修改 edi发送日志
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入ediLog")
+	public R submit(@Valid @RequestBody EdiLog ediLog) {
+		return R.status(ediLogService.saveOrUpdate(ediLog));
+	}
+
+
+	/**
+	 * 删除 edi发送日志
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(ediLogService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 26 - 11
blade-service/blade-los/src/main/java/org/springblade/los/edi/controller/EdiTypesController.java

@@ -16,23 +16,28 @@
  */
 package org.springblade.los.edi.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.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.edi.entity.EdiTypes;
-import org.springblade.los.edi.vo.EdiTypesVO;
 import org.springblade.los.edi.service.IEdiTypesService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.los.edi.vo.EdiTypesVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 基础资料-EDI 类型表 控制器
@@ -66,6 +71,13 @@ public class EdiTypesController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入ediTypes")
 	public R<IPage<EdiTypes>> list(EdiTypes ediTypes, Query query) {
+		LambdaQueryWrapper<EdiTypes> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(EdiTypes::getTenantId, AuthUtil.getTenantId())
+			.eq(EdiTypes::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(ediTypes.getType()), EdiTypes::getType, ediTypes.getType());
+		if (!"admin".equals(AuthUtil.getUserName())) {
+			lambdaQueryWrapper.apply("find_in_set(" + AuthUtil.getDeptId() + ",userlist)");
+		}
 		IPage<EdiTypes> pages = ediTypesService.page(Condition.getPage(query), Condition.getQueryWrapper(ediTypes));
 		return R.data(pages);
 	}
@@ -124,11 +136,14 @@ public class EdiTypesController extends BladeController {
 
 
 	/**
-	 * edi发送测试
+	 * 发送edi
 	 */
-	@GetMapping("/testEDI")
-	public R testEDI() {
-		return ediTypesService.testEDI();
+	@PostMapping("/sendingEdi")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "发送edi", notes = "传入bills")
+	@RepeatSubmit
+	public R sendingEdi(@RequestBody EdiTypes ediTypes) {
+		return ediTypesService.sendingEdi(ediTypes);
 	}
 
 

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/EdiAddress.java

@@ -0,0 +1,41 @@
+package org.springblade.los.edi.dto;
+
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2024/1/5
+ */
+@Data
+public class EdiAddress {
+
+	/**
+	 * 名称
+	 */
+	private String title;
+	/**
+	 * edi类型
+	 */
+	private String mode;
+	/**
+	 *
+	 */
+	private String host;
+	/**
+	 * 账号
+	 */
+	private String userName;
+	/**
+	 * 密码
+	 */
+	private String password;
+	/**
+	 * 地址
+	 */
+	private String path;
+	/**
+	 * email地址
+	 */
+	private String address;
+
+}

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

@@ -0,0 +1,623 @@
+package org.springblade.los.edi.dto;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import org.springblade.los.edi.entity.EdiTypes;
+
+import javax.validation.constraints.NotEmpty;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/12/20
+ */
+@Data
+public class InttraSiDto {
+
+
+	/* UNB+UNOC:2+  */
+	/**
+	 * 发送方标识
+	 */
+	@NotEmpty(message = "发送方标识不能为空")
+	private String identifying;
+	/**
+	 * 日期  (日期(yymmdd):时间(hhmm))
+	 */
+	@NotEmpty(message = "日期不能为空")
+	private String date;
+	/**
+	 * 文件交换编号
+	 */
+	@NotEmpty(message = "文件交换编号不能为空")
+	@Length(min = 1, max = 14, message = "文件交换编号不能超过14字符")
+	private String fileExchangeNumber;
+
+	/*  UNH+  */
+	/**
+	 * 信息编号
+	 */
+	@NotEmpty(message = "信息编号不能为空")
+	@Length(min = 1, max = 14, message = "信息编号不能超过14字符")
+	private String informationNo;
+
+	/*    BGM+340+     */
+	/**
+	 * 提单号
+	 */
+	@NotEmpty(message = "提单号不能为空")
+	@Length(min = 1, max = 35, message = "提单号不能超过35字符")
+	private String identificationCode;
+	/**
+	 * 文件功能
+	 */
+	@NotEmpty(message = "文件功能不能为空")
+	private String filesFunction;
+
+	/*   DTM+137:   */
+	/**
+	 * 文件建立时间  (ccyymmddhhmm)
+	 */
+	@NotEmpty(message = "文件建立时间不能为空")
+	private String filesDate;
+
+	/*   TSR+   */
+	/**
+	 * 运输条款代码
+	 */
+	@NotEmpty(message = "运输条款代码不能为空")
+	private String transportTermCode;
+	/**
+	 * 拼箱类型
+	 */
+	@NotEmpty(message = "拼箱类型不能为空")
+	private String lclType;
+
+	/*   FTX+AAI+++   */
+	/**
+	 * 备注
+	 */
+	@NotEmpty(message = "备注不能为空")
+	@Length(min = 1, max = 512, message = "备注不能超过512字符")
+	private String remarks;
+
+	/*   FTX+BLC+++   */
+	/**
+	 * 提单备注
+	 */
+	@Length(min = 1, max = 512, message = "提单备注不能超过512字符")
+	private String carrySingleRemarks;
+
+	/*    CNT+7:   */
+	/**
+	 * 货物重量
+	 */
+	@NotEmpty(message = "货物重量不能为空")
+	private String weightOfGoods;
+
+	/*   CNT+11:   */
+	/**
+	 * 包装件数
+	 */
+	@Length(min = 1, max = 18, message = "包装件数不能超过18位")
+	@NotEmpty(message = "包装件数不能为空")
+	private BigDecimal packagesNumber;
+
+	/*   CNT+15:   */
+	/**
+	 * 货物体积
+	 */
+	@Length(min = 1, max = 18, message = "货物体积不能超过18位")
+	@NotEmpty(message = "货物体积不能为空")
+	private BigDecimal volumeOfGoods;
+
+	/*   CNT+16:   */
+	/**
+	 * 总箱数
+	 */
+	@Length(min = 1, max = 18, message = "总箱数不能超过18位")
+	@NotEmpty(message = "总箱数不能为空")
+	private BigDecimal totalBoxNumber;
+
+	/*   LOC+57+   */
+	/**
+	 * 付款地代码
+	 */
+	@NotEmpty(message = "付款地代码不能为空")
+	private String paymentLocationCode;
+	/**
+	 * 付款地
+	 */
+	@NotEmpty(message = "付款地不能为空")
+	@Length(min = 1, max = 256, message = "付款地不能超过256字符")
+	private String paymentLand;
+
+	/*   LOC+73+   */
+	/**
+	 * 提单签发地代码
+	 */
+	@NotEmpty(message = "提单签发地代码不能为空")
+	private String issuanceLandCode;
+	/**
+	 * 提单签发地
+	 */
+	@Length(min = 1, max = 256, message = "提单签发地不能超过256字符")
+	private String issuanceLand;
+
+	/*   DTM+95:   */
+	/**
+	 * 签单日期(yyyymmdd)
+	 */
+	private String issueDate;
+
+	/*    RFF+BN:   */
+	/**
+	 * 订舱号
+	 */
+	@NotEmpty(message = "订舱号不能为空")
+	@Length(min = 1, max = 30, message = "订舱号不能超过30字符")
+	private String bookingNo;
+
+	/*   RFF+BM:   */
+	/**
+	 * 提单号
+	 */
+	@Length(min = 1, max = 30, message = "提单号不能超过30字符")
+	@NotEmpty(message = "提单号不能为空")
+	private String billNo;
+
+	/*   RFF+CT:   */
+	/**
+	 * 运费协议号
+	 */
+	@Length(min = 1, max = 30, message = "运费协议号不能超过30字符")
+	private String freightProtocolNumber;
+
+	/*   RFF+SI:   */
+	/**
+	 * 特殊编号
+	 */
+	@Length(min = 1, max = 30, message = "特殊编号不能超过130字符")
+	private String mainPinyin;
+
+	/*   RFF+ON:   */
+	/**
+	 * 订单号
+	 */
+	@Length(min = 1, max = 30, message = "订单号不能超过30字符")
+	private String orderNo;
+
+	/*   CPI+4++   */
+	/**
+	 * 付款方式代码
+	 */
+	@NotEmpty(message = "付款方式代码不能为空")
+	private String paymentType;
+
+	/*   TDT+20+   */
+	/**
+	 * 航次
+	 */
+	@NotEmpty(message = "航次不能为空")
+	@Length(min = 1, max = 17, message = "航次不能超过17字符")
+	private String voyageNo;
+	/**
+	 * 船司代码
+	 */
+	@NotEmpty(message = "船司代码不能为空")
+	private String vesselCarrierCode;
+	/**
+	 * 船名
+	 */
+	@NotEmpty(message = "船名不能为空")
+	@Length(min = 1, max = 35, message = "船名不能超过35字符")
+	private String vesselName;
+
+	/*   LOC+9+   */
+	/**
+	 * 装货港代码
+	 */
+	@NotEmpty(message = "装货港代码不能为空")
+	private String polCode;
+	/**
+	 * 装货港
+	 */
+	@NotEmpty(message = "装货港不能为空")
+	@Length(min = 1, max = 256, message = "装货港不能超过256字符")
+	private String polName;
+
+	/*   LOC+88+   */
+	/**
+	 * 收货地代码
+	 */
+	@NotEmpty(message = "收货地代码不能为空")
+	private String placeReceiptCode;
+	/**
+	 * 收货地
+	 */
+	@NotEmpty(message = "收货地不能为空")
+	@Length(min = 1, max = 256, message = "收货地不能超过256字符")
+	private String placeReceiptName;
+
+	/*   LOC+11+   */
+	/**
+	 * 卸货港代码
+	 */
+	@NotEmpty(message = "卸货港代码不能为空")
+	private String podCode;
+	/**
+	 * 卸货港
+	 */
+	@NotEmpty(message = "卸货港不能为空")
+	@Length(min = 1, max = 256, message = "卸货港不能超过256字符")
+	private String podName;
+
+	/*   LOC+7+   */
+	/**
+	 * 交货地代码
+	 */
+	@NotEmpty(message = "交货地代码不能为空")
+	private String placeDeliveryCode;
+	/**
+	 * 交货地
+	 */
+	@NotEmpty(message = "交货地不能为空")
+	@Length(min = 1, max = 256, message = "交货地不能超过256字符")
+	private String placeDeliveryName;
+
+	/*   NAD+CZ+++   */
+	/**
+	 * 发货人 1
+	 */
+	@Length(min = 1, max = 35, message = "发货人1不能超过35字符")
+	@NotEmpty(message = "发货人不能为空")
+	private String hsHipperOne;
+	/**
+	 * 发货人 2
+	 */
+	@Length(min = 1, max = 35, message = "发货人 2不能超过35字符")
+	private String hsHipperTwo;
+	/**
+	 * 发货人 3
+	 */
+	@Length(min = 1, max = 35, message = "发货人 3不能超过35字符")
+	private String hsHipperThree;
+	/**
+	 * 发货人 4
+	 */
+	@Length(min = 1, max = 35, message = "发货人 4不能超过35字符")
+	private String hsHipperFour;
+	/**
+	 * 发货人 5
+	 */
+	@Length(min = 1, max = 35, message = "发货人 5不能超过35字符")
+	private String hsHipperFive;
+
+	/*   NAD+CN+++   */
+	/**
+	 * 收货人 1
+	 */
+	@Length(min = 1, max = 35, message = "收货人 1不能超过35字符")
+	@NotEmpty(message = "收货人不能为空")
+	private String hConsigneeOne;
+	/**
+	 * 收货人 2
+	 */
+	@Length(min = 1, max = 35, message = "收货人 2不能超过35字符")
+	private String hConsigneeTwo;
+	/**
+	 * 收货人 3
+	 */
+	@Length(min = 1, max = 35, message = "收货人 3不能超过35字符")
+	private String hConsigneeThree;
+	/**
+	 * 收货人 4
+	 */
+	@Length(min = 1, max = 35, message = "收货人 4不能超过35字符")
+	private String hConsigneeFour;
+	/**
+	 * 收货人 5
+	 */
+	@Length(min = 1, max = 35, message = "收货人 5不能超过35字符")
+	private String hConsigneeFive;
+
+	/*   NAD+NI+++   */
+	/**
+	 * 通知人 1
+	 */
+	@Length(min = 1, max = 35, message = "通知人 1不能超过35字符")
+	@NotEmpty(message = "通知人不能为空")
+	private String hNotifyOne;
+	/**
+	 * 通知人 2
+	 */
+	@Length(min = 1, max = 35, message = "通知人 2不能超过35字符")
+	private String hNotifyTwo;
+	/**
+	 * 通知人 3
+	 */
+	@Length(min = 1, max = 35, message = "通知人 3不能超过35字符")
+	private String hNotifyThree;
+	/**
+	 * 通知人 4
+	 */
+	@Length(min = 1, max = 35, message = "通知人 4不能超过35字符")
+	private String hNotifyFour;
+	/**
+	 * 通知人 5
+	 */
+	@Length(min = 1, max = 35, message = "通知人 5不能超过35字符")
+	private String hNotifyFive;
+
+	/*    NAD+CA+   */
+	/**
+	 * 船司代码
+	 */
+	@NotEmpty(message = "船司代码不能为空")
+	private String carrierCode;
+	/**
+	 * 船司称户
+	 */
+	@NotEmpty(message = "船司称户不能为空")
+	@Length(min = 1, max = 35, message = "船司称户不能超过35字符")
+	private String carrierName;
+
+	/*     NAD+FW+     */
+	/**
+	 * 发送方代码
+	 */
+	@NotEmpty(message = "发送方代码不能为空")
+	private String senderCode;
+	/**
+	 * 发送方称呼
+	 */
+	@NotEmpty(message = "发送方称呼不能为空")
+	@Length(min = 1, max = 35, message = "发送方称呼不能超过35字符")
+	private String senderName;
+
+	/*   CTA+IC+:  */
+	/**
+	 * 发送方联系人
+	 */
+	@NotEmpty(message = "发送方联系人不能为空")
+	@Length(min = 1, max = 35, message = "发送方联系人不能超过35字符")
+	private String senderContacts;
+
+	/*     COM+    */
+	/**
+	 * 发送方联系电话
+	 */
+	@NotEmpty(message = "发送方联系电话不能为空")
+	@Length(min = 1, max = 512, message = "发送方联系电话不能超过512字符")
+	private String senderTel;
+
+	/*     COM+    */
+	/**
+	 * 发送方联系邮件
+	 */
+	@NotEmpty(message = "发送方联系邮件不能为空")
+	@Length(min = 1, max = 512, message = "发送方联系邮件不能超过512字符")
+	private String senderEmail;
+
+	/*     DOC+    */
+	/**
+	 * 提单类型
+	 */
+	@NotEmpty(message = "提单类型不能为空")
+	private String billLadingType;
+	/**
+	 * 付款状态
+	 */
+	private String paymentStatus;
+	/**
+	 * 提单份数
+	 */
+	@Length(min = 1, max = 2, message = "提单份数不能超过2位")
+	@NotEmpty(message = "提单份数不能为空")
+	private BigDecimal billLadingNumber;
+
+	/*     GID+1+   */
+	/**
+	 * 包装件数
+	 */
+	@NotEmpty(message = "包装件数不能为空")
+	@Length(min = 1, max = 8, message = "包装件数不能超过8位")
+	private BigDecimal packagesNumbers;
+	/**
+	 * 包装代码
+	 */
+	@NotEmpty(message = "包装代码不能为空")
+	private String packagesCode;
+	/**
+	 * 包装描述
+	 */
+	@Length(min = 1, max = 35, message = "包装描述不能超过35位")
+	@NotEmpty(message = "包装描述不能为空")
+	private String packagesDescribe;
+
+	/*     PIA+5+   */
+	/**
+	 * HS 编码
+	 */
+	@Length(min = 1, max = 10, message = "HS 编码不能超过10字符")
+	@NotEmpty(message = "HS 编码不能为空")
+	private BigDecimal hsCode;
+
+	/*     FTX+AAA+++   */
+	/**
+	 * 品名
+	 */
+	@NotEmpty(message = "品名不能为空")
+	@Length(min = 1, max = 512, message = "品名不能超过512字符")
+	private String productName;
+
+	/*     MEA+AAE+WT+KGM:   */
+	/**
+	 * 重量
+	 */
+	@NotEmpty(message = "重量不能为空")
+	@Length(min = 1, max = 18, message = "重量不能超过18位")
+	private BigDecimal grossWeight;
+
+	/*     MEA+AAE+AAW+MTQ:   */
+	/**
+	 * 体积
+	 */
+	@NotEmpty(message = "体积不能为空")
+	@Length(min = 1, max = 18, message = "体积不能超过18位")
+	private BigDecimal measurement;
+
+	/*      PCI++   */
+	/**
+	 * 麦头
+	 */
+	@NotEmpty(message = "唛头不能为空")
+	@Length(min = 1, max = 35, message = "麦头不能超过35字符")
+	private String marks;
+
+	/*    MEA+AAE+WT+KGM:   */
+	/**
+	 * 单箱货物件数
+	 */
+	@NotEmpty(message = "单箱货物件数不能为空")
+	private BigDecimal boxGoodNumber;
+
+	/*      DGS+IMD+   */
+	/**
+	 * 危险品分类
+	 */
+	private String dgImdgCode;
+	/**
+	 * 页号
+	 */
+	@Length(min = 1, max = 7, message = "页号不能超过7位")
+	private BigDecimal pageNumber;
+	/**
+	 * 联合国编号
+	 */
+	private Integer dgUnCode;
+	/**
+	 * 闪点
+	 */
+	@Length(min = 1, max = 3, message = "闪点不能超过3位")
+	private Integer dgFlashPoint;
+	/**
+	 * 闪点单位
+	 */
+	private String dgFlashPointUnit;
+	/**
+	 * 包装组别
+	 */
+	private String packingGroup;
+	/**
+	 * 应急措施号
+	 */
+	@Length(min = 1, max = 6, message = "应急措施号不能超过6字符")
+	private String emergencyMeasureNo;
+
+	/*      FTX+AAC+++   */
+	/**
+	 * 危险品备注
+	 */
+	@Length(min = 1, max = 30, message = "危险品备注不能超过30字符")
+	private String dgRemarks;
+
+	/*     CTA+HG+:   */
+	/**
+	 * 危险品联系人
+	 */
+	@Length(min = 1, max = 35, message = "危险品联系人不能超过35字符")
+	private String dgContacts;
+
+	/*     COM+   */
+	/**
+	 * 危险品电话号码
+	 */
+	@Length(min = 1, max = 512, message = "危险品电话号码不能超过512字符")
+	private String dgTel;
+
+	/*    EQD+CN++   */
+	/**
+	 * 箱号
+	 */
+	@NotEmpty(message = "箱号不能为空")
+	private String boxNo;
+	/**
+	 * 箱型代码
+	 */
+	@NotEmpty(message = "箱型代码不能为空")
+	private String boxCode;
+	/**
+	 * 货主箱标识
+	 */
+	private String shipperBoxIdentification;
+
+	/*    MEA+AAE+WT+KGM:   */
+	/**
+	 * 单箱货物重量
+	 */
+	@NotEmpty(message = "单箱货物重量不能为空")
+	private BigDecimal boxGoodWeight;
+
+	/*    MEA+AAE+AAW+MTQ:   */
+	/**
+	 * 单箱货物体积
+	 */
+	@NotEmpty(message = "单箱货物体积不能为空")
+	private BigDecimal boxGoodMeasurement;
+
+	/*    SEL+   */
+	/**
+	 * 封号
+	 */
+	@NotEmpty(message = "封号不能为空")
+	private String seal;
+
+	/**
+	 * 封箱单位
+	 */
+	@NotEmpty(message = "封箱单位不能为空")
+	private String sealUnit;
+
+	/*    TMP+2+   */
+	/**
+	 * 温度
+	 */
+	@Length(min = 1, max = 3, message = "温度不能超过3位")
+	@NotEmpty(message = "温度不能为空")
+	private Integer temperature;
+	/**
+	 * 温度单位
+	 */
+	@NotEmpty(message = "温度单位不能为空")
+	private String temperatureUnit;
+
+	/*    UNT+   */
+	/**
+	 * 记录行数
+	 */
+	@NotEmpty(message = "记录行数不能为空")
+	@Length(min = 1, max = 6, message = "记录行数不能超过6字符")
+	private BigDecimal recordRows;
+	/**
+	 * 信息编号
+	 */
+	@NotEmpty(message = "信息编号不能为空")
+	@Length(min = 1, max = 14, message = "信息编号不能超过14字符")
+	private String informationNoEnd;
+
+	/*     UNZ+1+   */
+	/**
+	 * 文件交换编号
+	 */
+	@NotEmpty(message = "文件交换编号不能为空")
+	@Length(min = 1, max = 14, message = "文件交换编号不能超过14字符")
+	private String fileExchangeNumberEnd;
+
+	/**
+	 * edi发送地址
+	 */
+	private EdiTypes ediTypes;
+
+}

+ 9 - 2
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java

@@ -1,11 +1,14 @@
 package org.springblade.los.edi.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.sun.istack.NotNull;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
+import org.springblade.los.edi.entity.EdiTypes;
 
 import javax.validation.constraints.NotEmpty;
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author :jixinyuan
@@ -169,9 +172,9 @@ public class InttraSoDto {
 
 	/*   RFF+SI:   */
 	/**
-	 * 主拼号
+	 * So = 主拼号  Si = 特殊编号
 	 */
-	@Length(min = 1, max = 30, message = "主拼号不能超过130字符")
+	@Length(min = 1, max = 30, message = "主拼号/特殊编号不能超过130字符")
 	private String mainPinyin;
 
 	/*   RFF+ON:   */
@@ -704,5 +707,9 @@ public class InttraSoDto {
 	@Length(min = 1, max = 14, message = "文件交换编号不能超过14字符")
 	private String fileExchangeNumberEnd;
 
+	/**
+	 * edi发送地址
+	 */
+	private EdiTypes ediTypes;
 
 }

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/mapper/EdiLogMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.mapper;
+
+import org.springblade.los.edi.entity.EdiLog;
+import org.springblade.los.edi.vo.EdiLogVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * edi发送日志 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+public interface EdiLogMapper extends BaseMapper<EdiLog> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param ediLog
+	 * @return
+	 */
+	List<EdiLogVO> selectEdiLogPage(IPage page, EdiLogVO ediLog);
+
+}

+ 34 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/mapper/EdiLogMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.los.edi.mapper.EdiLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="ediLogResultMap" type="org.springblade.los.edi.entity.EdiLog">
+        <id column="id" property="id"/>
+        <result column="branch_id" property="branchId"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_dept_name" property="createDeptName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_user_name" property="updateUserName"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="version" property="version"/>
+        <result column="status" property="status"/>
+        <result column="remarks" property="remarks"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="bill_id" property="billId"/>
+        <result column="bill_no" property="billNo"/>
+        <result column="mblno" property="mblno"/>
+        <result column="hblno" property="hblno"/>
+        <result column="pid" property="pid"/>
+        <result column="sender_date" property="senderDate"/>
+    </resultMap>
+
+
+    <select id="selectEdiLogPage" resultMap="ediLogResultMap">
+        select * from los_b_edi_log where is_deleted = 0
+    </select>
+
+</mapper>

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/IEdiLogService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.service;
+
+import org.springblade.los.edi.entity.EdiLog;
+import org.springblade.los.edi.vo.EdiLogVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * edi发送日志 服务类
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+public interface IEdiLogService extends IService<EdiLog> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param ediLog
+	 * @return
+	 */
+	IPage<EdiLogVO> selectEdiLogPage(IPage<EdiLogVO> page, EdiLogVO ediLog);
+
+}

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

@@ -22,6 +22,8 @@ import org.springblade.los.edi.vo.EdiTypesVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 基础资料-EDI 类型表 服务类
  *
@@ -47,4 +49,6 @@ public interface IEdiTypesService extends IService<EdiTypes> {
 	R submit(EdiTypes ediTypes);
 
 	R testEDI();
+
+    R sendingEdi(EdiTypes ediTypes);
 }

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiLogServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.edi.service.impl;
+
+import org.springblade.los.edi.entity.EdiLog;
+import org.springblade.los.edi.vo.EdiLogVO;
+import org.springblade.los.edi.mapper.EdiLogMapper;
+import org.springblade.los.edi.service.IEdiLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * edi发送日志 服务实现类
+ *
+ * @author BladeX
+ * @since 2024-01-05
+ */
+@Service
+public class EdiLogServiceImpl extends ServiceImpl<EdiLogMapper, EdiLog> implements IEdiLogService {
+
+	@Override
+	public IPage<EdiLogVO> selectEdiLogPage(IPage<EdiLogVO> page, EdiLogVO ediLog) {
+		return page.setRecords(baseMapper.selectEdiLogPage(page, ediLog));
+	}
+
+}

+ 320 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java

@@ -16,21 +16,38 @@
  */
 package org.springblade.los.edi.service.impl;
 
+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 lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.Util.RegularUtils;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
+import org.springblade.los.basic.ports.entity.BPorts;
+import org.springblade.los.basic.ports.service.IBPortsService;
+import org.springblade.los.basic.vessels.entity.BVessels;
+import org.springblade.los.basic.vessels.service.IBVesselsService;
 import org.springblade.los.business.files.entity.FilesCenter;
+import org.springblade.los.business.files.service.IFilesCenterService;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.service.IBillsService;
 import org.springblade.los.edi.api.EDISender;
+import org.springblade.los.edi.dto.InttraSoDto;
+import org.springblade.los.edi.entity.EdiLog;
 import org.springblade.los.edi.entity.EdiTypes;
 import org.springblade.los.edi.mapper.EdiTypesMapper;
+import org.springblade.los.edi.service.IEdiLogService;
 import org.springblade.los.edi.service.IEdiTypesService;
 import org.springblade.los.edi.vo.EdiTypesVO;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -46,6 +63,18 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 
 	private final ISysClient sysClient;
 
+	private final IBPortsService bPortsService;
+
+	private final IBCorpsService bCorpsService;
+
+	private final IBVesselsService bVesselsService;
+
+	private final IFilesCenterService filesCenterService;
+
+	private final IBillsService billsService;
+
+	private final IEdiLogService ediLogService;
+
 	@Override
 	public IPage<EdiTypesVO> selectEdiTypesPage(IPage<EdiTypesVO> page, EdiTypesVO ediTypes) {
 		return page.setRecords(baseMapper.selectEdiTypesPage(page, ediTypes));
@@ -80,4 +109,295 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 		return R.data(filesCenter);
 	}
 
+	@Override
+	public R sendingEdi(EdiTypes ediTypes) {
+
+		if (ediTypes.getBillId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<FilesCenter> filesCenterList = new ArrayList<>();
+		List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + ediTypes.getBillId() + "')"));
+		if ("HYCK".equals(ediTypes.getType())) {
+			Date date = new Date();
+			for (Bills details : billsList) {
+				if ("1".equals(details.getEdiStatus())) {
+					throw new RuntimeException("单据号:" + details.getBillNo() + "已发送过edi");
+				} else {
+					details.setEdiStatus("1");
+				}
+				InttraSoDto inttraSoDto = new InttraSoDto();
+				inttraSoDto.setIdentifying("发送方标识");
+				SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd:hhmm");
+				inttraSoDto.setDate(sdf.format(date));
+				SimpleDateFormat sdf1 = new SimpleDateFormat("yyMMddhhmm");
+				String corpId = details.getCorpId().toString();
+				inttraSoDto.setFileExchangeNumber(sdf1.format(date) + corpId.substring(corpId.length() - 4));
+				inttraSoDto.setInformationNo(inttraSoDto.getFileExchangeNumber());
+
+				details.setMblno(RegularUtils.regularEn(details.getMblno()));
+				inttraSoDto.setIdentificationCode(details.getMblno() + "SO");
+
+				inttraSoDto.setFilesFunction("9");
+				inttraSoDto.setFilesDate("cc" + sdf1.format(date));
+
+				details.setServiceTerms(RegularUtils.regularEn(details.getServiceTerms()));
+				inttraSoDto.setTransportTermCode(details.getServiceTerms());
+
+				inttraSoDto.setLclType("2");
+
+				details.setRemarks(RegularUtils.regularEn(details.getRemarks()));
+				inttraSoDto.setRemarks(details.getRemarks());
+
+				details.setBookingRemarks(RegularUtils.regularEn(details.getBookingRemarks()));
+				inttraSoDto.setCarrySingleRemarks(details.getBookingRemarks());
+
+				inttraSoDto.setWeightOfGoods(details.getGrossWeight().toString());
+				inttraSoDto.setPackagesNumber(details.getQuantity());
+				inttraSoDto.setVolumeOfGoods(details.getMeasurement());
+				Integer sum = details.getQuantityV20() + details.getQuantityV40() + details.getQuantityV45()
+					+ details.getQuantityV48() + details.getQuantityV40hc();
+				inttraSoDto.setTotalBoxNumber(new BigDecimal(sum + ""));
+				if (ObjectUtils.isNotNull(details.getMpayplace())) {
+					BPorts bPorts = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
+						.eq(BPorts::getTenantId, AuthUtil.getTenantId())
+						.eq(BPorts::getIsDeleted, 0)
+						.eq(BPorts::getEnName, details.getMpayplace()));
+					if (bPorts != null) {
+						bPorts.setCode(RegularUtils.regularEn(bPorts.getCode()));
+						inttraSoDto.setPaymentLocationCode(bPorts.getCode());
+					}
+				}
+
+				details.setMpayplace(RegularUtils.regularEn(details.getMpayplace()));
+				inttraSoDto.setPaymentLand(details.getMpayplace());
+				if (ObjectUtils.isNotNull(details.getIssueAtId())) {
+					BPorts bPorts = bPortsService.getById(details.getIssueAtId());
+					if (bPorts != null) {
+						bPorts.setCode(RegularUtils.regularEn(bPorts.getCode()));
+						inttraSoDto.setIssuanceLandCode(bPorts.getCode());
+					}
+				}
+
+				details.setIssueAt(RegularUtils.regularEn(details.getIssueAt()));
+				inttraSoDto.setIssuanceLand(details.getIssueAt());
+
+				SimpleDateFormat sdf2 = new SimpleDateFormat("yyyymmdd");
+				if (ObjectUtils.isNotNull(details.getIssueDate())) {
+					inttraSoDto.setIssueDate(sdf2.format(details.getIssueDate()));
+				}
+				details.setBookingNo(RegularUtils.regularEn(details.getBookingNo()));
+				inttraSoDto.setBookingNo(details.getBookingNo());
+
+				details.setRefno(RegularUtils.regularEn(details.getRefno()));
+				inttraSoDto.setBillNo(details.getRefno());
+
+				details.setCorpArgreementNo(RegularUtils.regularEn(details.getCorpArgreementNo()));
+				inttraSoDto.setFreightProtocolNumber(details.getCorpArgreementNo());
+
+
+				inttraSoDto.setMainPinyin("");
+				inttraSoDto.setOrderNo(details.getMblno());
+
+				inttraSoDto.setJobId(details.getBillNo());
+				inttraSoDto.setPaymentType(details.getMpaymode());
+
+				details.setVoyageNo(RegularUtils.regularEn(details.getVoyageNo()));
+				inttraSoDto.setVoyageNo(details.getVoyageNo());
+				if (ObjectUtils.isNotNull(details.getVesselId())) {
+					BVessels bVessels = bVesselsService.getById(details.getVesselId());
+					if (bVessels != null) {
+						BCorps bCorps = bCorpsService.getById(bVessels.getCarrierId());
+						if (bCorps != null) {
+							bCorps.setCarrierCode(RegularUtils.regularEn(bCorps.getCarrierCode()));
+							inttraSoDto.setVesselCarrierCode(bCorps.getCarrierCode());
+						}
+					}
+				}
+
+				details.setVesselCnName(RegularUtils.regularEn(details.getVesselCnName()));
+				inttraSoDto.setVesselName(details.getVesselCnName());
+
+				details.setPolCode(RegularUtils.regularEn(details.getPolCode()));
+				inttraSoDto.setPolCode(details.getPolCode());
+
+				details.setServiceTerms(RegularUtils.regularEn(details.getPolCnName()));
+				inttraSoDto.setPolName(details.getPolCnName());
+
+				SimpleDateFormat sdf3 = new SimpleDateFormat("yyyymmdd");
+				inttraSoDto.setEtd(sdf3.format(details.getEtd()));
+
+				details.setPlaceReceiptCode(RegularUtils.regularEn(details.getPlaceReceiptCode()));
+				inttraSoDto.setPlaceReceiptCode(details.getPlaceReceiptCode());
+
+				details.setPlaceReceiptName(RegularUtils.regularEn(details.getPlaceReceiptName()));
+				inttraSoDto.setPlaceReceiptName(details.getPlaceReceiptName());
+
+				details.setPodCode(RegularUtils.regularEn(details.getPodCode()));
+				inttraSoDto.setPodCode(details.getPodCode());
+
+				details.setPodCnName(RegularUtils.regularEn(details.getPodCnName()));
+				inttraSoDto.setPodName(details.getPodCnName());
+
+				details.setPlaceDeliveryCode(RegularUtils.regularEn(details.getPlaceDeliveryCode()));
+				inttraSoDto.setPlaceDeliveryCode(details.getPlaceDeliveryCode());
+
+				details.setPlaceDeliveryName(RegularUtils.regularEn(details.getPlaceDeliveryName()));
+				inttraSoDto.setPlaceDeliveryName(details.getPlaceDeliveryName());
+
+				details.setHshipperCnName(RegularUtils.regularEn(details.getHshipperCnName()));
+				inttraSoDto.setHsHipperOne(details.getHshipperCnName());
+				inttraSoDto.setHsHipperTwo("发货人 2");
+				inttraSoDto.setHsHipperThree("发货人 3");
+				inttraSoDto.setHsHipperFour("发货人 4");
+				inttraSoDto.setHsHipperFive("发货人 5");
+
+				details.setHconsigneeCnName(RegularUtils.regularEn(details.getHconsigneeCnName()));
+				inttraSoDto.setHConsigneeOne(details.getHconsigneeCnName());
+				inttraSoDto.setHConsigneeTwo("收货人 2");
+				inttraSoDto.setHConsigneeThree("收货人3");
+				inttraSoDto.setHConsigneeFour("收货人 4");
+				inttraSoDto.setHConsigneeFive("收货人 5");
+
+				details.setHnotifyCnName(RegularUtils.regularEn(details.getHnotifyCnName()));
+				inttraSoDto.setHNotifyOne(details.getHnotifyCnName());
+				inttraSoDto.setHNotifyTwo("通知人 2");
+				inttraSoDto.setHNotifyThree("通知人 3");
+				inttraSoDto.setHNotifyFour("通知人 4");
+				inttraSoDto.setHNotifyFive("通知人 5");
+
+				details.setCarrierCnName(RegularUtils.regularEn(details.getCarrierCnName()));
+				inttraSoDto.setCarrierName(details.getCarrierCnName());
+				if (ObjectUtils.isNotNull(details.getCarrierId())) {
+					BCorps bCorps = bCorpsService.getById(details.getCarrierId());
+					if (bCorps != null) {
+						bCorps.setCarrierCode(RegularUtils.regularEn(bCorps.getCarrierCode()));
+						inttraSoDto.setCarrierCode(bCorps.getCarrierCode());
+						bCorps.setShortName(RegularUtils.regularEn(bCorps.getShortName()));
+						inttraSoDto.setContactInformation(bCorps.getShortName());
+						bCorps.setAttnName(RegularUtils.regularEn(bCorps.getAttnName()));
+						inttraSoDto.setContacts(bCorps.getAttnName());
+						bCorps.setEmail(RegularUtils.regularEn(bCorps.getEmail()));
+						inttraSoDto.setAttnEmail(bCorps.getEmail());
+					}
+				}
+				details.setInttraToDoorCorpName(RegularUtils.regularEn(details.getInttraToDoorCorpName()));
+				inttraSoDto.setInttraToDoorName(details.getInttraToDoorCorpName());
+				details.setInttraToDoorCorpAddr(RegularUtils.regularEn(details.getInttraToDoorCorpAddr()));
+				inttraSoDto.setInttraToDoorAddrOne(details.getInttraToDoorCorpAddr());
+				inttraSoDto.setInttraToDoorAddrTwo("地址 2");
+				inttraSoDto.setInttraToDoorAddrThree("地址 3");
+				inttraSoDto.setInttraToDoorAddrFour("地址 4");
+				details.setInttraToDoorCorpContacts(RegularUtils.regularEn(details.getInttraToDoorCorpContacts()));
+				inttraSoDto.setInttraToDoorContacts(details.getInttraToDoorCorpContacts());
+				details.setInttraToDoorCorpTel(RegularUtils.regularEn(details.getInttraToDoorCorpTel()));
+				inttraSoDto.setInttraToDoorTel(details.getInttraToDoorCorpTel());
+				details.setInttraDoorToCorpName(RegularUtils.regularEn(details.getInttraDoorToCorpName()));
+				inttraSoDto.setInttraDoorToName(details.getInttraDoorToCorpName());
+				details.setInttraDoorToCorpAddr(RegularUtils.regularEn(details.getInttraDoorToCorpAddr()));
+				inttraSoDto.setInttraDoorToAddrOne(details.getInttraDoorToCorpAddr());
+				inttraSoDto.setInttraDoorToAddrTwo("地址 2");
+				inttraSoDto.setInttraDoorToAddrThree("地址 3");
+				inttraSoDto.setInttraDoorToAddrFour("地址 4");
+				details.setInttraDoorToCorpContacts(RegularUtils.regularEn(details.getInttraDoorToCorpContacts()));
+				inttraSoDto.setInttraDoorToContacts(details.getInttraDoorToCorpContacts());
+				details.setInttraDoorToCorpTel(RegularUtils.regularEn(details.getInttraDoorToCorpTel()));
+				inttraSoDto.setInttraDoorToTel(details.getInttraDoorToCorpTel());
+				inttraSoDto.setFreightForwarderCode("货代代码");
+				inttraSoDto.setFreightForwarderName("货代称呼");
+				inttraSoDto.setSenderCode("发送方代码");
+				inttraSoDto.setSenderName("发送方称呼");
+				inttraSoDto.setSenderContacts("发送方联系人");
+				inttraSoDto.setSenderTel("发送方联系电话");
+				inttraSoDto.setSenderEmail("发送方联系邮件");
+				inttraSoDto.setBillLadingType("提单类型");
+				if (details.getStlCrStatus() >= 3 || details.getStlDrStatus() >= 3) {
+					inttraSoDto.setPaymentStatus("已付款");
+				} else {
+					inttraSoDto.setPaymentStatus("未付款");
+				}
+				inttraSoDto.setBillLadingNumber(new BigDecimal("0"));
+				inttraSoDto.setPackagesNumbers(details.getQuantity());
+				inttraSoDto.setPackagesCode(details.getPackingUnit());
+				inttraSoDto.setPackagesDescribe("包装描述");
+				inttraSoDto.setHsCode(new BigDecimal("001"));
+				details.setCommodityCnName(RegularUtils.regularEn(details.getCommodityCnName()));
+				inttraSoDto.setProductName(details.getCommodityCnName());
+				inttraSoDto.setGrossWeight(details.getGrossWeight());
+				inttraSoDto.setMeasurement(details.getMeasurement());
+				inttraSoDto.setMarks(details.getMarks());
+				details.setDgImdgCode(RegularUtils.regularEn(details.getDgImdgCode()));
+				inttraSoDto.setDgImdgCode(details.getDgImdgCode());
+				inttraSoDto.setPageNumber(new BigDecimal("007"));
+				inttraSoDto.setDgUnCode(1);
+				inttraSoDto.setDgFlashPoint(1);
+				inttraSoDto.setDgFlashPointUnit(details.getDgFlashPointUnit());
+				inttraSoDto.setPackingGroup("包装组别");
+				inttraSoDto.setEmergencyMeasureNo("应急措施号");
+				details.setDgRemarks(RegularUtils.regularEn(details.getDgRemarks()));
+				inttraSoDto.setDgRemarks(details.getDgRemarks());
+				inttraSoDto.setDgContacts(details.getDgContacts());
+				inttraSoDto.setDgTel(details.getDgTel());
+				inttraSoDto.setBoxCode(details.getQuantityCntrDescr());
+				inttraSoDto.setShipperBoxIdentification("货主箱标识");
+				Integer sum1 = details.getQuantityV20() + details.getQuantityV40() + details.getQuantityV45()
+					+ details.getQuantityV48() + details.getQuantityV40hc();
+				inttraSoDto.setBoxNumber(new BigDecimal(sum1 + ""));
+				inttraSoDto.setVentilation("冷藏通风量");
+				inttraSoDto.setTemperature(1);
+				inttraSoDto.setTemperatureUnit("温度单位");
+				inttraSoDto.setRecordRows(new BigDecimal("10"));
+				inttraSoDto.setInformationNoEnd(inttraSoDto.getInformationNo());
+				inttraSoDto.setFileExchangeNumberEnd(inttraSoDto.getFileExchangeNumber());
+
+				FilesCenter filesCenter = EDISender.sendingInttraSo(inttraSoDto);
+
+				//发送edi记录
+				EdiLog ediLog = new EdiLog();
+				ediLog.setBillId(details.getId());
+				ediLog.setBillNo(details.getBillNo());
+				ediLog.setMblno(details.getMblno());
+				ediLog.setHblno(details.getHblno());
+				ediLog.setPid(ediTypes.getId());
+				ediLog.setSenderDate(new Date());
+				ediLog.setBranchId(details.getBranchId());
+				ediLog.setCreateDept(details.getCreateDept());
+				ediLog.setCreateTime(details.getCreateTime());
+				ediLog.setCreateDeptName(details.getCreateDeptName());
+				ediLog.setCreateUser(details.getCreateUser());
+				ediLog.setCreateUserName(details.getCreateUserName());
+				ediLog.setRemarks("发送成功");
+				ediLog.setStatus(1);
+				ediLogService.save(ediLog);
+
+				//发送edi文件
+				filesCenter.setMblno(details.getMblno());
+				filesCenter.setHblno(details.getHblno());
+				filesCenter.setBillNo(details.getBillNo());
+				filesCenter.setBranchId(details.getBranchId());
+				filesCenter.setCreateDept(details.getCreateDept());
+				filesCenter.setCreateTime(details.getCreateTime());
+				filesCenter.setCreateDeptName(details.getCreateDeptName());
+				filesCenter.setCreateUser(details.getCreateUser());
+				filesCenter.setCreateUserName(details.getCreateUserName());
+				filesCenter.setPid(details.getId());
+				filesCenter.setItemId(ediLog.getId());
+				filesCenter.setBusinessType(details.getBusinessType());
+				filesCenter.setClassifyCode("edi");
+				filesCenter.setGroupCode("SO");
+				filesCenter.setSerialNo(1);
+				filesCenter.setSort(1);
+				filesCenter.setReceivedData(new Date());
+				filesCenter.setIsImage(0);
+				filesCenter.setTenantId(AuthUtil.getTenantId());
+				filesCenterList.add(filesCenter);
+			}
+			billsService.updateBatchById(billsList);
+		}
+		filesCenterService.saveOrUpdateBatch(filesCenterList);
+		return R.data("发送成功");
+	}
+
 }

+ 6 - 5
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -302,13 +302,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 							documentRecoveryService.removeById(documentRecovery.get(0).getId());
 						} else {
 							R clientBillNo;
-							if (order.getBillType().equals(OrderTypeEnum.ENQUIRY.getType())) {
-								DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-								String date2 = dateFormat.format(order.getBusinesDate());
-								clientBillNo = serialClient.getBillNoByDate(substring, order.getTradeType(), order.getBillType(), date2);
+							DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+							String date2 = dateFormat.format(order.getBusinesDate());
+							clientBillNo = serialClient.getBillNoByDate(substring, order.getTradeType(), order.getBillType(), date2);
+							/*if (order.getBillType().equals(OrderTypeEnum.ENQUIRY.getType())) {
+
 							} else {
 								clientBillNo = serialClient.getBillNo(substring, order.getTradeType(), order.getBillType());
-							}
+							}*/
 							if (!clientBillNo.isSuccess()) {
 								TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 								return R.fail(500, "生成订单编号失败");

+ 5 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/controller/BrandDescController.java

@@ -95,9 +95,12 @@ public class BrandDescController extends BladeController {
 			lambdaQueryWrapper.ge(PjBrandDesc::getCreateTime, brandDesc.getCreateTimeList().get(0));
 			lambdaQueryWrapper.le(PjBrandDesc::getCreateTime, brandDesc.getCreateTimeList().get(1));
 		}
-		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")) {
-			lambdaQueryWrapper.eq(PjBrandDesc::getSalesCompanyId, AuthUtil.getDeptId());//公司
+		if (ObjectUtils.isNotNull(brandDesc.getType()) && !"PP".equals(brandDesc.getType())){
+			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")) {
+				lambdaQueryWrapper.eq(PjBrandDesc::getSalesCompanyId, AuthUtil.getDeptId());//公司
+			}
 		}
+
 		lambdaQueryWrapper.orderByDesc(PjBrandDesc::getSort);
 		IPage<PjBrandDesc> pages = brandDescService.page(Condition.getPage(query), lambdaQueryWrapper);
 

+ 13 - 12
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/service/impl/BrandDescServiceImpl.java

@@ -38,7 +38,7 @@ import org.springframework.stereotype.Service;
 import java.util.Date;
 
 /**
- *  配件批发品牌表服务实现类
+ * 配件批发品牌表服务实现类
  *
  * @author BladeX
  * @since 2023-04-24
@@ -61,7 +61,7 @@ public class BrandDescServiceImpl extends ServiceImpl<BrandDescMapper, PjBrandDe
 	public PjBrandDesc getMessageById(PjBrandDesc brandDesc) {
 		PjBrandDesc detail = baseMapper.selectById(brandDesc.getId());
 
-		if (ObjectUtil.isNotEmpty(detail.getCreateUser())){
+		if (ObjectUtil.isNotEmpty(detail.getCreateUser())) {
 			String userR = userClient.userInfoById(detail.getCreateUser()).getData().getRealName();
 			detail.setCreateUserName(userR);
 		}
@@ -83,23 +83,24 @@ public class BrandDescServiceImpl extends ServiceImpl<BrandDescMapper, PjBrandDe
 	 */
 	@Override
 	public PjBrandDesc saveMessage(PjBrandDesc brandDesc) {
-
-		//获得所属公司
-		R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
-		if (ObjectUtil.isNotEmpty(dept)) {
-			brandDesc.setSalesCompanyId(dept.getData().getId());
-			brandDesc.setSalesCompanyName(dept.getData().getFullName());
-		} else {
-			throw new SecurityException("数据异常请联系管理员");
-		}
-
 		if (brandDesc.getId() != null) {
+			if (!brandDesc.getCreateDept().equals(Long.valueOf(AuthUtil.getDeptId()))) {
+				throw new RuntimeException("无权限修改");
+			}
 			brandDesc.setUpdateUser(AuthUtil.getUserId());
 			brandDesc.setUpdateTime(new Date());
 			brandDesc.setTenantId(AuthUtil.getTenantId());
 			brandDesc.setEnableOrNot(1);
 			baseMapper.updateById(brandDesc);
 		} else {
+			//获得所属公司
+			R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+			if (ObjectUtil.isNotEmpty(dept)) {
+				brandDesc.setSalesCompanyId(dept.getData().getId());
+				brandDesc.setSalesCompanyName(dept.getData().getFullName());
+			} else {
+				throw new SecurityException("数据异常请联系管理员");
+			}
 			brandDesc.setCreateUser(AuthUtil.getUserId());
 			brandDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 			brandDesc.setCreateTime(new Date());