Browse Source

2023年12月20日18:01:30

纪新园 1 year ago
parent
commit
13c9c541cf

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBillsItems.java

@@ -634,6 +634,12 @@ public class FinStlBillsItems implements Serializable {
 	private String bookingNo;
 
 	/**
+	 * 明细类型
+	 */
+	@ApiModelProperty(value = "明细类型")
+	private String itemType;
+
+	/**
 	 * 三检单号
 	 */
 	@TableField(exist = false)

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

@@ -164,6 +164,52 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			bills.setUpdateUser(AuthUtil.getUserId());
 			bills.setUpdateTime(new Date());
 			bills.setUpdateUserName(AuthUtil.getUserName());
+
+			if ("MM".equals(bills.getBillType())) {
+				Bills details = baseMapper.selectById(bills.getId());
+				if (!details.getVesselId().equals(bills.getVesselId()) || !details.getVoyageNo().equals(bills.getVoyageNo())) {
+					List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+						.eq(Bills::getCreateDept, AuthUtil.getDeptId())
+						.eq(Bills::getTenantId, AuthUtil.getTenantId())
+						.eq(Bills::getIsDeleted, 0)
+						.eq(Bills::getMblno, bills.getMblno()));
+					if (billsList.size() > 0) {
+						List<Long> billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+						List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.eq(FeeCenter::getPid, billIds));
+						for (FeeCenter item : feeCenterList) {
+							item.setVesselId(bills.getVesselId());
+							item.setVesselCnName(bills.getVesselCnName());
+							item.setVesselEnName(bills.getVesselEnName());
+							item.setVoyageNo(bills.getVoyageNo());
+						}
+						feeCenterService.updateBatchById(feeCenterList);
+						List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+							.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+							.eq(FinAccBills::getIsDeleted, 0)
+							.eq(FinAccBills::getBusinessBillDivideId, billIds));
+						for (FinAccBills item : finAccBillsList) {
+							item.setVesselId(bills.getVesselId());
+							item.setVesselCnName(bills.getVesselCnName());
+							item.setVesselEnName(bills.getVesselEnName());
+							item.setVoyageNo(bills.getVoyageNo());
+						}
+						finAccBillsService.updateBatchById(finAccBillsList);
+						for (Bills item : billsList) {
+							item.setVesselId(bills.getVesselId());
+							item.setVesselCnName(bills.getVesselCnName());
+							item.setVesselEnName(bills.getVesselEnName());
+							item.setVoyageNo(bills.getVoyageNo());
+						}
+						this.updateBatchById(billsList);
+					}
+				}
+			} else if ("MH".equals(bills.getBillType())) {
+
+			}
+
 		}
 		this.saveOrUpdate(bills);
 		/**-------------箱型箱量计算---------*/
@@ -391,14 +437,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			);
 		}
 		detail.setContainersList(containersList);
-		/*List<WaitingBox> waitingBoxList = new ArrayList<>();
+		List<WaitingBox> waitingBoxList = new ArrayList<>();
 		WaitingBox waitingBox = new WaitingBox();
 		BeanUtil.copyProperties(detail, waitingBox);
 		waitingBox.setQuantity(detail.getQuantity().subtract(detail.getCfsQuantity()));
 		waitingBox.setGrossWeight(detail.getGrossWeight().subtract(detail.getCfsGrossWeight()));
 		waitingBox.setMeasurement(detail.getMeasurement().subtract(detail.getCfsMeasurement()));
 		waitingBoxList.add(waitingBox);
-		detail.setWaitingBoxList(waitingBoxList);*/
+		detail.setWaitingBoxList(waitingBoxList);
 		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())

+ 341 - 3
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.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.InttraSoDto;
 
+import javax.validation.Valid;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
@@ -16,6 +19,344 @@ import java.util.Date;
 public class EDISender {
 
 
+	public static FilesCenter sendingInttraSo(@Valid InttraSoDto inttraSoDto) {
+		String text = "";
+		/* =================005=================  */
+		text += "UNB+UNOC:2+" + inttraSoDto.getIdentifying() + ":ZZZ+INTTRA:ZZZ+" + inttraSoDto.getDate() + "+" + inttraSoDto.getFileExchangeNumber() + "'";
+		/* =================0010=================  */
+		text += "UNH+" + inttraSoDto.getInformationNo() + "+IFTMIN:D:99B:UN'";
+		/* =================0020=================  */
+		text += "BGM+335+" + inttraSoDto.getIdentificationCode() + inttraSoDto.getFilesFunction() + "'";
+		/* =================0050=================  */
+		text += "DTM+137:" + inttraSoDto.getFilesDate() + "203'";
+		/* =================0060=================  */
+		text += "TSR+" + inttraSoDto.getTransportTermCode() + inttraSoDto.getLclType() + "'";
+		/* =================0090=================  */
+		text += "FTX+AAI+++" + inttraSoDto.getRemarks() + "'";
+		if (ObjectUtils.isNotNull(inttraSoDto.getCarrySingleRemarks())) {
+			text += "FTX+BLC+++" + inttraSoDto.getCarrySingleRemarks() + "'";
+		}
+		/* =================0100=================  */
+		text += "CNT+7:" + inttraSoDto.getWeightOfGoods() + ":KGM'";
+		if (ObjectUtils.isNotNull(inttraSoDto.getPackagesNumber())) {
+			text += "CNT+11:" + inttraSoDto.getPackagesNumber() + "'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getVolumeOfGoods())) {
+			text += "CNT+15:" + inttraSoDto.getVolumeOfGoods() + ":MTQ'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getTotalBoxNumber())) {
+			text += "CNT+16:" + inttraSoDto.getTotalBoxNumber() + "'";
+		}
+		/* =================0140=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getPaymentLocationCode())) {
+			text += "LOC+57+" + inttraSoDto.getPaymentLocationCode();
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getPaymentLand())) {
+			text += "::6:" + inttraSoDto.getPaymentLand() + "'";
+		} else {
+			text += "'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getIssuanceLandCode())) {
+			text += "LOC+73+" + inttraSoDto.getIssuanceLandCode();
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getIssuanceLand())) {
+			text += "::6:" + inttraSoDto.getIssuanceLand() + "'";
+		} else {
+			text += "'";
+		}
+		/* =================0150=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getIssueDate())) {
+			text += "DTM+95:" + inttraSoDto.getIssueDate() + ":102'";
+		}
+		/* =================0200=================  */
+		text += "RFF+BN:" + inttraSoDto.getBookingNo() + "'";
+		if (ObjectUtils.isNotNull(inttraSoDto.getBillNo())) {
+			text += "RFF+BM:" + inttraSoDto.getBillNo() + "'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getFreightProtocolNumber())) {
+			text += "RFF+CT:" + inttraSoDto.getFreightProtocolNumber() + "'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getMainPinyin())) {
+			text += "RFF+SI:" + inttraSoDto.getMainPinyin() + "'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getOrderNo())) {
+			text += "RFF+ON:" + inttraSoDto.getOrderNo() + "'";
+		}
+		if (ObjectUtils.isNotNull(inttraSoDto.getJobId())) {
+			text += "RFF+FF:" + inttraSoDto.getJobId() + "'";
+		}
+		/* =================0320=================  */
+		text += "CPI+4++" + inttraSoDto.getPaymentType() + "'";
+		/* =================0480=================  */
+		if (inttraSoDto.getVoyageNo().indexOf("V.") > 0) {
+			throw new RuntimeException("航次中不能存在‘V.’");
+		} else {
+			text += "TDT+20+" + inttraSoDto.getVoyageNo() + "+1++";
+			if (ObjectUtils.isNotNull(inttraSoDto.getVesselCarrierCode())) {
+				text += inttraSoDto.getVesselCarrierCode() + ":172+++:::" + inttraSoDto.getVesselName() + "'";
+			} else {
+				text += "+++:::" + inttraSoDto.getVesselName() + "'";
+			}
+		}
+		/* =================0520=================  */
+		text += "LOC+9+" + inttraSoDto.getPolCode() + "::6:" + inttraSoDto.getPolName() + "'";
+		/* =================0530=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getEtd())) {
+			text += "DTM+133:" + inttraSoDto.getEtd() + ":102'";
+		}
+		/* =================0520=================  */
+		text += "LOC+88+" + inttraSoDto.getPlaceReceiptCode() + "::6:" + inttraSoDto.getPlaceReceiptName() + "'";
+		text += "LOC+11+" + inttraSoDto.getPodCode() + "::6:" + inttraSoDto.getPodName() + "'";
+		text += "LOC+7+" + inttraSoDto.getPlaceDeliveryCode() + "::6:" + inttraSoDto.getPlaceDeliveryName() + "'";
+		/* =================0580=================  */
+		text += "NAD+CZ+++" + inttraSoDto.getHsHipperOne();
+		if (ObjectUtils.isNotNull(inttraSoDto.getHsHipperTwo())) {
+			text += ":" + inttraSoDto.getHsHipperTwo();
+			if (ObjectUtils.isNotNull(inttraSoDto.getHsHipperThree())) {
+				text += ":" + inttraSoDto.getHsHipperThree();
+				if (ObjectUtils.isNotNull(inttraSoDto.getHsHipperFour())) {
+					text += ":" + inttraSoDto.getHsHipperFour();
+					if (ObjectUtils.isNotNull(inttraSoDto.getHsHipperFive())) {
+						text += ":" + inttraSoDto.getHsHipperFive() + "'";
+					} else {
+						text += "'";
+					}
+				} else {
+					text += "'";
+				}
+			} else {
+				text += "'";
+			}
+		} else {
+			text += "'";
+		}
+		text += "NAD+CN+++" + inttraSoDto.getHConsigneeOne();
+		if (ObjectUtils.isNotNull(inttraSoDto.getHConsigneeTwo())) {
+			text += ":" + inttraSoDto.getHConsigneeTwo();
+			if (ObjectUtils.isNotNull(inttraSoDto.getHConsigneeThree())) {
+				text += ":" + inttraSoDto.getHConsigneeThree();
+				if (ObjectUtils.isNotNull(inttraSoDto.getHConsigneeFour())) {
+					text += ":" + inttraSoDto.getHConsigneeFour();
+					if (ObjectUtils.isNotNull(inttraSoDto.getHConsigneeFive())) {
+						text += ":" + inttraSoDto.getHConsigneeFive() + "'";
+					} else {
+						text += "'";
+					}
+				} else {
+					text += "'";
+				}
+			} else {
+				text += "'";
+			}
+		} else {
+			text += "'";
+		}
+		text += "NAD+NI+++" + inttraSoDto.getHNotifyOne();
+		if (ObjectUtils.isNotNull(inttraSoDto.getHNotifyTwo())) {
+			text += ":" + inttraSoDto.getHNotifyTwo();
+			if (ObjectUtils.isNotNull(inttraSoDto.getHNotifyThree())) {
+				text += ":" + inttraSoDto.getHNotifyThree();
+				if (ObjectUtils.isNotNull(inttraSoDto.getHNotifyFour())) {
+					text += ":" + inttraSoDto.getHNotifyFour();
+					if (ObjectUtils.isNotNull(inttraSoDto.getHNotifyFive())) {
+						text += ":" + inttraSoDto.getHNotifyFive() + "'";
+					} else {
+						text += "'";
+					}
+				} else {
+					text += "'";
+				}
+			} else {
+				text += "'";
+			}
+		} else {
+			text += "'";
+		}
+		text += "NAD+CA+" + inttraSoDto.getCarrierCode() + ":160:86++" + inttraSoDto.getCarrierName() + "'";
+		if (ObjectUtils.isNotNull(inttraSoDto.getContactInformation())) {
+			text += "NAD+MR+++" + inttraSoDto.getContactInformation() + "'";
+		}
+		/* =================0620=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getContacts())) {
+			text += "CTA+NT+:" + inttraSoDto.getContacts() + "'";
+		}
+		/* =================0630=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getAttnEmail())) {
+			text += "COM+" + inttraSoDto.getAttnEmail() + ":EM'";
+		}
+		/* =================0580=================  */
+		text += "NAD+ST+++" + inttraSoDto.getInttraToDoorName() + inttraSoDto.getInttraToDoorAddrOne();
+		if (ObjectUtils.isNotNull(inttraSoDto.getInttraToDoorAddrTwo())) {
+			text += ":" + inttraSoDto.getInttraToDoorAddrTwo();
+			if (ObjectUtils.isNotNull(inttraSoDto.getInttraToDoorAddrThree())) {
+				text += ":" + inttraSoDto.getInttraToDoorAddrThree();
+				if (ObjectUtils.isNotNull(inttraSoDto.getInttraToDoorAddrFour())) {
+					text += ":" + inttraSoDto.getInttraToDoorAddrFour() + "'";
+				} else {
+					text += "'";
+				}
+			} else {
+				text += "'";
+			}
+		} else {
+			text += "'";
+		}
+		/* =================0620=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getInttraToDoorContacts())) {
+			text += "CTA+IC+:" + inttraSoDto.getInttraToDoorContacts() + "'";
+		}
+		/* =================0630=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getInttraToDoorTel())) {
+			text += "COM+" + inttraSoDto.getInttraToDoorTel() + ":EM'";
+		}
+		/* =================0580=================  */
+		text += "NAD+SF+++" + inttraSoDto.getInttraDoorToName() + inttraSoDto.getInttraDoorToAddrOne();
+		if (ObjectUtils.isNotNull(inttraSoDto.getInttraDoorToAddrTwo())) {
+			text += ":" + inttraSoDto.getInttraDoorToAddrTwo();
+			if (ObjectUtils.isNotNull(inttraSoDto.getInttraDoorToAddrThree())) {
+				text += ":" + inttraSoDto.getInttraDoorToAddrThree();
+				if (ObjectUtils.isNotNull(inttraSoDto.getInttraDoorToAddrFour())) {
+					text += ":" + inttraSoDto.getInttraDoorToAddrFour() + "'";
+				} else {
+					text += "'";
+				}
+			} else {
+				text += "'";
+			}
+		} else {
+			text += "'";
+		}
+		/* =================0620=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getInttraDoorToContacts())) {
+			text += "CTA+IC+:" + inttraSoDto.getInttraDoorToContacts() + "'";
+		}
+		/* =================0630=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getInttraDoorToTel())) {
+			text += "COM+" + inttraSoDto.getInttraDoorToTel() + ":EM'";
+		}
+		/* =================0580=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getFreightForwarderCode())) {
+			text += "NAD+FW+" + inttraSoDto.getFreightForwarderCode() + ":160";
+			if (ObjectUtils.isNotNull(inttraSoDto.getFreightForwarderName())) {
+				text += ":86++" + inttraSoDto.getFreightForwarderName() + "'";
+			} else {
+				text += "'";
+			}
+		}
+		text += "NAD+HI+" + inttraSoDto.getSenderCode() + ":160:86++" + inttraSoDto.getSenderName() + "'";
+		/* =================0620=================  */
+		text += "CTA+IC+:" + inttraSoDto.getSenderContacts() + "'";
+		/* =================0630=================  */
+		text += "COM+" + inttraSoDto.getSenderTel() + ":TE'";
+		text += "COM+" + inttraSoDto.getSenderEmail() + ":EM'";
+		/* =================0650=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getBillLadingType())) {
+			text += "DOC+" + inttraSoDto.getBillLadingType();
+			if (ObjectUtils.isNotNull(inttraSoDto.getPaymentStatus())) {
+				text += "+:" + inttraSoDto.getPaymentStatus() + "+:" + inttraSoDto.getBillLadingNumber() + "'";
+			} else {
+				text += "+:" + inttraSoDto.getBillLadingNumber() + "'";
+			}
+		}
+		/* =================0910=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getPackagesNumbers())) {
+			text += "GID+1+" + inttraSoDto.getPackagesNumbers() + ":" + inttraSoDto.getPackagesCode() + "::6";
+			if (ObjectUtils.isNotNull(inttraSoDto.getPackagesDescribe())) {
+				text += ":" + inttraSoDto.getPackagesDescribe() + "'";
+			} else {
+				text += "'";
+			}
+		}
+		/* =================0980=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getHsCode())) {
+			text += "PIA+5+" + inttraSoDto.getHsCode() + ":HS'";
+		}
+		/* =================0990=================  */
+		text += "FTX+AAA+++" + inttraSoDto.getProductName() + "'";
+		/* =================1070=================  */
+		text += "MEA+AAE+WT+KGM:" + inttraSoDto.getGrossWeight() + "'";
+		text += "MEA+AAE+AAW+MTQ:" + inttraSoDto.getMeasurement() + "'";
+		/* =================1160=================  */
+		text += "PCI++" + inttraSoDto.getMarks() + "'";
+		/* =================1520=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getDgImdgCode())) {
+			text += "DGS+IMD+" + inttraSoDto.getDgImdgCode();
+			if (ObjectUtils.isNotNull(inttraSoDto.getPageNumber())) {
+				text += ":" + inttraSoDto.getPageNumber();
+				if (ObjectUtils.isNotNull(inttraSoDto.getDgUnCode())) {
+					text += "+" + inttraSoDto.getDgUnCode();
+					if (ObjectUtils.isNotNull(inttraSoDto.getDgFlashPoint())) {
+						text += "+" + inttraSoDto.getDgFlashPoint();
+						if (ObjectUtils.isNotNull(inttraSoDto.getDgFlashPointUnit())) {
+							text += ":" + inttraSoDto.getDgFlashPointUnit();
+							if (ObjectUtils.isNotNull(inttraSoDto.getPackingGroup())) {
+								text += "+" + inttraSoDto.getPackingGroup();
+								if (ObjectUtils.isNotNull(inttraSoDto.getEmergencyMeasureNo())) {
+									text += "+" + inttraSoDto.getEmergencyMeasureNo() + "'";
+								} else {
+									text += "'";
+								}
+							} else {
+								text += "'";
+							}
+						} else {
+							text += "'";
+						}
+					} else {
+						text += "'";
+					}
+				} else {
+					text += "'";
+				}
+			} else {
+				text += "'";
+			}
+		}
+		/* =================1530=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getDgRemarks())) {
+			text += "FTX+AAC+++" + inttraSoDto.getDgRemarks() + "'";
+		}
+		/* =================1530=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getDgContacts())) {
+			text += "CTA+HG+:" + inttraSoDto.getDgContacts() + "'";
+		}
+		/* =================1560=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getDgTel())) {
+			text += "COM+" + inttraSoDto.getDgTel() + "'";
+		}
+		/* =================1660=================  */
+		text += "EQD+CN++" + inttraSoDto.getBoxCode();
+		if (ObjectUtils.isNotNull(inttraSoDto.getShipperBoxIdentification())) {
+			text += "+" + inttraSoDto.getShipperBoxIdentification() + "'";
+		} else {
+			text += "'";
+		}
+		/* =================1670=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getBoxNumber())) {
+			text += "EQN+" + inttraSoDto.getBoxNumber() + "'";
+		}
+		/* =================1690=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getVentilation())) {
+			text += "MEA+AAE+AAS+CBM:" + inttraSoDto.getVentilation() + "'";
+		}
+		/* =================1740=================  */
+		if (ObjectUtils.isNotNull(inttraSoDto.getTemperature())) {
+			text += "TMP+2+" + inttraSoDto.getTemperature();
+			if (ObjectUtils.isNotNull(inttraSoDto.getTemperatureUnit())) {
+				text += ":" + inttraSoDto.getTemperatureUnit() + "'";
+			} else {
+				text += "'";
+			}
+		}
+		/* =================2000=================  */
+		text += "UNT+" + inttraSoDto.getRecordRows() + "+" + inttraSoDto.getInformationNoEnd() + "'";
+		/* =================2010=================  */
+		text += "UNZ+1+" + inttraSoDto.getFileExchangeNumberEnd() + "'";
+		FilesCenter filesCenter = sending(text);
+		return filesCenter;
+	}
+
+
 	public static FilesCenter sending(String content) {
 		try {
 			//生成edi文件
@@ -33,9 +374,6 @@ public class EDISender {
 			//替换地址
 			url = url.replace("/home/minio", "http://121.37.83.47");
 
-
-
-
 			FilesCenter filesCenter = new FilesCenter();
 			filesCenter.setUrl(url);
 			filesCenter.setFileName(file.getName());

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

@@ -0,0 +1,708 @@
+package org.springblade.los.edi.dto;
+
+import com.sun.istack.NotNull;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotEmpty;
+import java.math.BigDecimal;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/12/20
+ */
+@Data
+public class InttraSoDto {
+
+
+	/* 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+335+     */
+	/**
+	 * 提单辨识码
+	 */
+	@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位")
+	private BigDecimal packagesNumber;
+
+	/*   CNT+15:   */
+	/**
+	 * 货物体积
+	 */
+	@Length(min = 1, max = 18, message = "货物体积不能超过18位")
+	private BigDecimal volumeOfGoods;
+
+	/*   CNT+16:   */
+	/**
+	 * 总箱数
+	 */
+	@Length(min = 1, max = 18, message = "总箱数不能超过18位")
+	private BigDecimal totalBoxNumber;
+
+	/*   LOC+57+   */
+	/**
+	 * 付款地代码
+	 */
+	private String paymentLocationCode;
+	/**
+	 * 付款地
+	 */
+	@NotEmpty(message = "付款地不能为空")
+	@Length(min = 1, max = 256, message = "付款地不能超过256字符")
+	private String paymentLand;
+
+	/*   LOC+73+   */
+	/**
+	 * 提单签发地代码
+	 */
+	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字符")
+	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;
+
+	/*   RFF+FF:   */
+	/**
+	 * 货代工作编号
+	 */
+	@Length(min = 1, max = 30, message = "货代工作编号不能超过30字符")
+	private String jobId;
+
+	/*   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;
+
+	/*   DTM+133:  */
+	/**
+	 * ETD 预计开船日期(yyyymmdd):
+	 */
+	private String etd;
+
+	/*   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+MR+++  */
+	/**
+	 * 联系信息
+	 */
+	@Length(min = 1, max = 35, message = "联系信息不能超过35字符")
+	private String contactInformation;
+
+	/*     CTA+NT+:  */
+	/**
+	 * 联系人
+	 */
+	@Length(min = 1, max = 35, message = "联系人不能超过35字符")
+	private String contacts;
+
+	/*    COM+  */
+	/**
+	 * 联系邮箱
+	 */
+	@Length(min = 1, max = 512, message = "联系邮箱不能超过512字符")
+	private String attnEmail;
+
+	/*   NAD+ST+++   */
+	/**
+	 * TO DOOR 联系信息
+	 */
+	@Length(min = 1, max = 35, message = "TO DOOR 联系信息不能超过35字符")
+	private String inttraToDoorName;
+	/**
+	 * 地址 1
+	 */
+	@Length(min = 1, max = 35, message = "地址 1不能超过35字符")
+	private String inttraToDoorAddrOne;
+	/**
+	 * 地址 2
+	 */
+	@Length(min = 1, max = 35, message = "地址 2不能超过35字符")
+	private String inttraToDoorAddrTwo;
+	/**
+	 * 地址 3
+	 */
+	@Length(min = 1, max = 35, message = "地址 3不能超过35字符")
+	private String inttraToDoorAddrThree;
+	/**
+	 * 地址 4
+	 */
+	@Length(min = 1, max = 35, message = "地址 4不能超过35字符")
+	private String inttraToDoorAddrFour;
+
+	/*   CTA+IC+:  */
+	/**
+	 * TO DOOR 联系人
+	 */
+	@Length(min = 1, max = 35, message = "TO DOOR 联系人不能超过35字符")
+	private String inttraToDoorContacts;
+
+	/*     COM+     */
+	/**
+	 * TO DOOR 联系电话
+	 */
+	@Length(min = 1, max = 512, message = "TO DOOR 联系电话不能超过512字符")
+	private String inttraToDoorTel;
+
+	/*   NAD+SF+++   */
+	/**
+	 * DOOR TO 联系信息
+	 */
+	@Length(min = 1, max = 35, message = "DOOR TO 联系信息不能超过35字符")
+	private String inttraDoorToName;
+	/**
+	 * 地址 1
+	 */
+	@Length(min = 1, max = 35, message = "地址 1不能超过35字符")
+	private String inttraDoorToAddrOne;
+	/**
+	 * 地址 2
+	 */
+	@Length(min = 1, max = 35, message = "地址 2不能超过35字符")
+	private String inttraDoorToAddrTwo;
+	/**
+	 * 地址 3
+	 */
+	@Length(min = 1, max = 35, message = "地址 3不能超过35字符")
+	private String inttraDoorToAddrThree;
+	/**
+	 * 地址 4
+	 */
+	@Length(min = 1, max = 35, message = "地址 4不能超过35字符")
+	private String inttraDoorToAddrFour;
+
+	/*   CTA+IC+:  */
+	/**
+	 * TO DOOR 联系人
+	 */
+	@Length(min = 1, max = 35, message = "TO DOOR 联系人不能超过35字符")
+	private String inttraDoorToContacts;
+
+	/*     COM+     */
+	/**
+	 * TO DOOR 联系电话
+	 */
+	@Length(min = 1, max = 512, message = "TO DOOR 联系电话不能超过512字符")
+	private String inttraDoorToTel;
+
+	/*     NAD+FW+     */
+	/**
+	 * 货代代码
+	 */
+	@Length(min = 1, max = 35, message = "货代代码不能超过35字符")
+	private String freightForwarderCode;
+	/**
+	 * 货代称呼
+	 */
+	private String freightForwarderName;
+
+	/*     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+    */
+	/**
+	 * 提单类型
+	 */
+	private String billLadingType;
+	/**
+	 * 付款状态
+	 */
+	private String paymentStatus;
+	/**
+	 * 提单份数
+	 */
+	@Length(min = 1, max = 2, message = "提单份数不能超过2位")
+	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位")
+	private String packagesDescribe;
+
+	/*     PIA+5+   */
+	/**
+	 * HS 编码
+	 */
+	@Length(min = 1, max = 10, message = "HS 编码不能超过10字符")
+	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;
+
+	/*      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 boxCode;
+	/**
+	 * 货主箱标识
+	 */
+	private String shipperBoxIdentification;
+
+	/*    EQN+   */
+	/**
+	 * 箱量
+	 */
+	@NotEmpty(message = "箱量不能为空")
+	@Length(min = 1, max = 15, message = "箱量不能超过15位")
+	private BigDecimal boxNumber;
+
+	/*    MEA+AAE+AAS+CBM:   */
+	/**
+	 * 冷藏通风量
+	 */
+	private String ventilation;
+
+	/*    TMP+2+   */
+	/**
+	 * 温度
+	 */
+	@Length(min = 1, max = 3, message = "温度不能超过3位")
+	private Integer temperature;
+	/**
+	 * 温度单位
+	 */
+	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;
+
+
+}

+ 20 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java

@@ -30,6 +30,7 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.fees.entity.LosBFeesTemplate;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.finance.fee.entity.FeeCenter;
@@ -188,6 +189,15 @@ public class FeeCenterController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + ids + "')"));
+		for (FeeCenter item : feeCenterList) {
+			if (item.getAccStatus() != 0) {
+				throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单,删除失败");
+			}
+		}
 		return R.status(feeCenterService.removeByIds(Func.toLongList(ids)));
 	}
 
@@ -203,7 +213,7 @@ public class FeeCenterController extends BladeController {
 	}
 
 	/**
-	 *  物流-费用中心
+	 * 物流-费用中心
 	 */
 	@GetMapping("/selectByAccNoList")
 	@ApiOperationSupport(order = 2)
@@ -218,5 +228,14 @@ public class FeeCenterController extends BladeController {
 		return R.data(list);
 	}
 
+	/**
+	 * 获取费用中心单据客户列表
+	 */
+	@GetMapping("/getFeeCenterCorpIds")
+	@ApiOperationSupport(order = 2)
+	public R<List<BCorps>> getFeeCenterCorpIds(@RequestParam("billId") Long billId,@RequestParam("dc") String dc) {
+		return R.data(feeCenterService.getFeeCenterCorpIds(billId,dc));
+	}
+
 
 }

+ 8 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java

@@ -19,6 +19,7 @@ package org.springblade.los.finance.fee.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.fees.entity.LosBFeesTemplate;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.vo.FeeCenterVO;
@@ -70,4 +71,11 @@ public interface IFeeCenterService extends IService<FeeCenter> {
 	 * @return
 	 */
 	R submitList(List<FeeCenter> feeCenter);
+
+	/**
+	 * 获取费用中心单据客户列表
+	 * @param billId
+	 * @return
+	 */
+	List<BCorps> getFeeCenterCorpIds(Long billId,String dc);
 }

+ 56 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java

@@ -24,6 +24,8 @@ import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.basic.cur.mapper.CurrencyMapper;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
@@ -44,6 +46,7 @@ import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -63,6 +66,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final IBCurrencyService bCurrencyService;
 
+	private final IBCorpsService bCorpsService;
+
 	@Override
 	public IPage<FeeCenterVO> selectFeeCenterPage(IPage<FeeCenterVO> page, FeeCenterVO feeCenter) {
 		return page.setRecords(baseMapper.selectFeeCenterPage(page, feeCenter));
@@ -333,4 +338,55 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		return R.data(feeCenterList);
 	}
 
+	@Override
+	public List<BCorps> getFeeCenterCorpIds(Long billId,String dc) {
+		Bills bills = billsMapper.selectById(billId);
+		List<Long> corpIds = new ArrayList<>();
+		if (bills != null) {
+			if ("MM".equals(bills.getBillType())) {
+				List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getMasterId, bills.getId())
+					.eq(Bills::getMasterBillNo, bills.getBillNo()));
+				if (billsList.size() > 0) {
+					List<Long> billIds;
+					billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+					if (billIds.size() > 0) {
+						billIds.add(billId);
+					} else {
+						billIds = new ArrayList<>();
+						billIds.add(billId);
+					}
+					List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+						.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+						.eq(FeeCenter::getIsDeleted, 0)
+						.eq(FeeCenter::getDc, dc)
+						.in(FeeCenter::getPid, billIds));
+					if (feeCenterList.size() > 0) {
+						corpIds = feeCenterList.stream().map(FeeCenter::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+					}
+				}
+			} else {
+				List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getDc, dc)
+					.eq(FeeCenter::getPid, billId));
+				if (feeCenterList.size() > 0) {
+					corpIds = feeCenterList.stream().map(FeeCenter::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+				}
+			}
+		}
+		if (corpIds.size() > 0) {
+			return bCorpsService.list(new LambdaQueryWrapper<BCorps>()
+				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorps::getIsDeleted, 0)
+				.in(BCorps::getId, corpIds));
+		} else {
+			return new ArrayList<>();
+		}
+
+	}
+
 }

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

@@ -37,6 +37,12 @@ import org.springblade.los.finance.fee.mapper.FinAccBillsMapper;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
+import org.springblade.los.finance.invoices.entity.FinInvoicesItems;
+import org.springblade.los.finance.invoices.mapper.FinInvoicesItemsMapper;
+import org.springblade.los.finance.stl.entity.FinStlBillsItems;
+import org.springblade.los.finance.stl.mapper.FinStlBillsItemsMapper;
+import org.springblade.los.finance.vouchers.entity.FinVouchersItems;
+import org.springblade.los.finance.vouchers.mapper.FinVouchersItemsMapper;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -69,6 +75,12 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 
 	private final IBusinessTypeService bBusinessTypeService;
 
+	private final FinInvoicesItemsMapper finInvoicesItemsMapper;
+
+	private final FinStlBillsItemsMapper finStlBillsItemsMapper;
+
+	private final FinVouchersItemsMapper finVouchersItemsMapper;
+
 	@Override
 	public IPage<FinAccBillsVO> selectFinAccBillsPage(IPage<FinAccBillsVO> page, FinAccBillsVO finAccBills) {
 		return page.setRecords(baseMapper.selectFinAccBillsPage(page, finAccBills));
@@ -297,6 +309,53 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 				.in(Bills::getId, ids));
 		}
 		List<Long> finAccBillsIds = finAccBills.getFeeCenterList().stream().map(FeeCenter::getAccBillId).distinct().collect(Collectors.toList());
+		String finAccBillsBillNo = finAccBills.getFeeCenterList().stream().map(FeeCenter::getBillNo).distinct().collect(Collectors.joining(","));
+		if (finAccBillsIds.size() > 0) {
+			if (finInvoicesItemsMapper.selectCount(new LambdaQueryWrapper<FinInvoicesItems>()
+				.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinInvoicesItems::getIsDeleted, 0)
+				.in(FinInvoicesItems::getAccBillId, finAccBillsIds)) > 0) {
+				throw new RuntimeException("账单已生成发票单,撤销失败");
+			}
+			if (finStlBillsItemsMapper.selectCount(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.eq(FinStlBillsItems::getItemType, "CHK")
+				.in(FinStlBillsItems::getAccBillId, finAccBillsIds)) > 0) {
+				throw new RuntimeException("账单已对账,撤销失败");
+			}
+			if (finStlBillsItemsMapper.selectCount(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.eq(FinStlBillsItems::getItemType, "STL")
+				.eq(FinStlBillsItems::getDc, "D")
+				.in(FinStlBillsItems::getAccBillId, finAccBillsIds)) > 0) {
+				throw new RuntimeException("账单已生成收款单,撤销失败");
+			}
+			if (finStlBillsItemsMapper.selectCount(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.eq(FinStlBillsItems::getItemType, "STL")
+				.eq(FinStlBillsItems::getDc, "C")
+				.in(FinStlBillsItems::getAccBillId, finAccBillsIds)) > 0) {
+				throw new RuntimeException("账单已生成付款单,撤销失败");
+			}
+			if (finStlBillsItemsMapper.selectCount(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.eq(FinStlBillsItems::getItemType, "FFSQ")
+				.in(FinStlBillsItems::getAccBillId, finAccBillsIds)) > 0) {
+				throw new RuntimeException("账单已付费申请,撤销失败");
+			}
+			if (finVouchersItemsMapper.selectCount(new LambdaQueryWrapper<FinVouchersItems>()
+				.eq(FinVouchersItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinVouchersItems::getIsDeleted, 0)
+				.apply("find_in_set(bill_no,'" + finAccBillsBillNo + "')")) > 0) {
+				throw new RuntimeException("账单已生成凭证,撤销失败");
+			}
+		} else {
+			throw new RuntimeException("未找到账单信息");
+		}
 		this.removeByIds(finAccBillsIds);
 		List<FeeCenter> feeCenterList1 = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())

+ 0 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java

@@ -146,7 +146,6 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				//计算字段null值处理
 				item.setCurrentAmount(ObjectUtils.isNotNull(item.getCurrentAmount()) ? item.getCurrentAmount() : new BigDecimal("0.00"));
 				item.setAmount(ObjectUtils.isNotNull(item.getAmount()) ? item.getAmount() : new BigDecimal("0.00"));
-
 				//判断是否是本位币
 				if ("CNY".equals(item.getCurrentCurCode())) {
 					item.setCurrentAmountLoc(item.getCurrentAmount());

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -172,7 +172,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				//计算字段null值处理
 				item.setCurrentStlAmount(ObjectUtils.isNotNull(item.getCurrentStlAmount()) ? item.getCurrentStlAmount() : new BigDecimal("0.00"));
 				item.setAmount(ObjectUtils.isNotNull(item.getAmount()) ? item.getAmount() : new BigDecimal("0.00"));
-
+				item.setItemType(finStlBills.getBusinessType());
 				item.setPid(finStlBills.getId());
 				//判断是否是本位币
 				if ("CNY".equals(item.getCurrentStlCurCode())) {
@@ -1204,7 +1204,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			.eq(FinStlBills::getIsDeleted, 0)
 			.eq(FinStlBills::getStatus, 3)
 		);
-		if (ObjectUtils.isNotNull(detail)){
+		if (ObjectUtils.isNotNull(detail)) {
 			detail.setFinStlBillsItemsList(finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
 				.eq(FinStlBillsItems::getIsDeleted, 0)
 				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())