Browse Source

jms:1.修改海运出口保存,箱型一键保存接口逻辑
2.海运进出口,空运进出口复制接口修改操作人数据
3.海运进出口文本数据清空bug修复
4.海运,空运进出口,报关保存接口获取汇率改为按照业务日期获取

纪新园 10 months ago
parent
commit
453ce2cac5

+ 17 - 18
blade-service/blade-los/src/main/java/org/springblade/los/Util/StringTools.java

@@ -65,8 +65,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("BPorts".equals(type)) {
+		} else if ("BPorts".equals(type)) {
 			Class<?> inttraSoDtoClass = BPorts.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			BPorts bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), BPorts.class);
@@ -102,8 +101,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("Bills".equals(type)) {
+		} else if ("Bills".equals(type)) {
 			Class<?> inttraSoDtoClass = Bills.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			Bills bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), Bills.class);
@@ -125,11 +123,15 @@ public class StringTools {
 						if (conversion) {
 							if (ObjectUtils.isNotNull(value)) {
 								value = value.toString().toUpperCase();
+							} else {
+								value = "";
 							}
 						}
 						if (space) {
 							if (ObjectUtils.isNotNull(value)) {
 								value = value.toString().trim();
+							} else {
+								value = "";
 							}
 						}
 						field.set(bVessels, value);
@@ -139,8 +141,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("SeaBillsDetail".equals(type)) {
+		} else if ("SeaBillsDetail".equals(type)) {
 			Class<?> inttraSoDtoClass = SeaBillsDetail.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			SeaBillsDetail bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), SeaBillsDetail.class);
@@ -162,11 +163,15 @@ public class StringTools {
 						if (conversion) {
 							if (ObjectUtils.isNotNull(value)) {
 								value = value.toString().toUpperCase();
+							}else {
+								value = "";
 							}
 						}
 						if (space) {
 							if (ObjectUtils.isNotNull(value)) {
 								value = value.toString().trim();
+							}else {
+								value = "";
 							}
 						}
 						field.set(bVessels, value);
@@ -176,8 +181,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("AeaBills".equals(type)) {
+		} else if ("AeaBills".equals(type)) {
 			Class<?> inttraSoDtoClass = AeaBills.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			AeaBills bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), AeaBills.class);
@@ -213,8 +217,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("CustomsDeclaration".equals(type)) {
+		} else if ("CustomsDeclaration".equals(type)) {
 			Class<?> inttraSoDtoClass = CustomsDeclaration.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			CustomsDeclaration bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), CustomsDeclaration.class);
@@ -250,8 +253,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("BCorps".equals(type)) {
+		} else if ("BCorps".equals(type)) {
 			Class<?> inttraSoDtoClass = BCorps.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			BCorps bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), BCorps.class);
@@ -287,8 +289,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("BCntrTypes".equals(type)) {
+		} else if ("BCntrTypes".equals(type)) {
 			Class<?> inttraSoDtoClass = BCntrTypes.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			BCntrTypes bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), BCntrTypes.class);
@@ -324,8 +325,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else if ("SeaReleaseBill".equals(type)) {
+		} else if ("SeaReleaseBill".equals(type)) {
 			Class<?> inttraSoDtoClass = SeaReleaseBill.class;
 			Field[] fileds = inttraSoDtoClass.getDeclaredFields();
 			SeaReleaseBill bVessels = JSONObject.parseObject(JSONObject.toJSONString(data), SeaReleaseBill.class);
@@ -361,8 +361,7 @@ public class StringTools {
 				}
 			}
 			return bVessels;
-		}
-		else {
+		} else {
 			throw new RuntimeException("数据处理失败,请联系管理员");
 		}
 	}

+ 16 - 9
blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/service/IBCurrencyService.java

@@ -16,15 +16,16 @@
  */
 package org.springblade.los.basic.cur.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.excel.BCurrencyExcel;
 import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.basic.cur.vo.BCurrencyVO;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.excel.BCurrencyExcel;
 import org.springblade.los.finance.genleg.dto.PeriodExchangeRate;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -46,13 +47,15 @@ public interface IBCurrencyService extends IService<BCurrency> {
 
 	/**
 	 * 新增或修改 基础资料-币种
+	 *
 	 * @param bCurrency
 	 * @return
 	 */
-    R submit(BCurrency bCurrency);
+	R submit(BCurrency bCurrency);
 
 	/**
 	 * 详情
+	 *
 	 * @param bCurrency
 	 * @return
 	 */
@@ -60,6 +63,7 @@ public interface IBCurrencyService extends IService<BCurrency> {
 
 	/**
 	 * 导入 基础资料-币种
+	 *
 	 * @param excelList
 	 * @return
 	 */
@@ -67,26 +71,29 @@ public interface IBCurrencyService extends IService<BCurrency> {
 
 	/**
 	 * 非本币(美金)汇率转换美金
+	 *
 	 * @param curCode 币别
-	 * @param amount 金额
+	 * @param amount  金额
 	 * @return 结果
 	 */
-	BigDecimal converter(String curCode, BigDecimal amount,String dc,String type);
+	BigDecimal converter(String curCode, BigDecimal amount, String dc, String type);
 
 	/**
 	 * 非本币金额汇率转换本币
+	 *
 	 * @param curCode 币别
-	 * @param amount 金额
+	 * @param amount  金额
 	 * @return 结果
 	 */
-	BigDecimal converterCny(String curCode, BigDecimal amount,String dc,String type);
+	BigDecimal converterCny(String curCode, BigDecimal amount, String dc, String type);
 
 	/**
 	 * 非本币金额汇率
+	 *
 	 * @param curCode 币别
 	 * @return 结果
 	 */
-	BigDecimal getCnyExrate(String curCode, String dc,String type);
+	BigDecimal getCnyExrate(Date date, String curCode, String dc, String type);
 
 	List<BCurrency> getExrate(BCurrency bCurrency);
 

+ 4 - 2
blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/service/impl/BCurrencyServiceImpl.java

@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -445,10 +444,13 @@ public class BCurrencyServiceImpl extends ServiceImpl<CurrencyMapper, BCurrency>
 	}
 
 	@Override
-	public BigDecimal getCnyExrate(String curCode, String dc, String type) {
+	public BigDecimal getCnyExrate(Date date, String curCode, String dc, String type) {
 		BigDecimal CNY = new BigDecimal("0.00");
 		// 创建 Calendar 对象并设置为当前时间
 		Calendar calendar = Calendar.getInstance();
+		if (ObjectUtils.isNotNull(date)) {
+			calendar.setTime(date);
+		}
 		int year = calendar.get(Calendar.YEAR); // 获取年份
 		int month = calendar.get(Calendar.MONTH) + 1; // 获取月份(注意需加上1,因为月份从0开始计数)
 		int day = calendar.get(Calendar.DATE);

+ 37 - 20
blade-service/blade-los/src/main/java/org/springblade/los/business/aea/service/impl/AeaBillsServiceImpl.java

@@ -22,7 +22,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -46,7 +45,6 @@ import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.mapper.AmendsMapper;
 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.check.dto.LosAuditProecessDTO;
 import org.springblade.los.check.entity.LosAuditPathsActs;
 import org.springblade.los.check.entity.LosAuditPathsLevels;
@@ -124,16 +122,16 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public R submit(AeaBills aeaBillss)throws Exception {
-		Object object = StringTools.handle(aeaBillss,"AeaBills");
+	public R submit(AeaBills aeaBillss) throws Exception {
+		Object object = StringTools.handle(aeaBillss, "AeaBills");
 		AeaBills aeaBills = JSONObject.parseObject(JSONObject.toJSONString(object), AeaBills.class);
 		String deptId = "";
 		String deptName = "";
 		String branchId = deptUtils.getDeptPid() + "";
 		//获取部门ids对应中文名
-		if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
-			deptId = deptUtils.getDeptPid()+"";
-			R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid()+"");
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
+			deptId = deptUtils.getDeptPid() + "";
+			R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
 			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
 				deptName = String.join(",", res.getData());
 			}
@@ -142,7 +140,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 			aeaBills.setMblno(aeaBills.getMblno().replaceAll(" ", ""));
 		}
 		List<AeaBills> count = baseMapper.selectList(new LambdaQueryWrapper<AeaBills>()
-			.eq(AeaBills::getCreateDept, deptUtils.getDeptPid()+"")
+			.eq(AeaBills::getCreateDept, deptUtils.getDeptPid() + "")
 			.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
 			.eq(AeaBills::getIsDeleted, 0)
 			.eq(AeaBills::getMblno, aeaBills.getMblno()
@@ -193,7 +191,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 			aeaBills.setCreateTime(new Date());
 			aeaBills.setCreateUser(AuthUtil.getUserId());
 			aeaBills.setCreateUserName(AuthUtil.getUserName());
-			if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
+			if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
 				aeaBills.setBranchId(branchId);
 				aeaBills.setCreateDept(deptId);
 				aeaBills.setCreateDeptName(deptName);
@@ -216,7 +214,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				AeaBills details = baseMapper.selectById(aeaBills.getId());
 				if (!details.getVoyageNo().equals(aeaBills.getVoyageNo())) {
 					List<AeaBills> aeaBillsList = baseMapper.selectList(new LambdaQueryWrapper<AeaBills>()
-						.eq(AeaBills::getCreateDept, deptUtils.getDeptPid()+"")
+						.eq(AeaBills::getCreateDept, deptUtils.getDeptPid() + "")
 						.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
 						.eq(AeaBills::getIsDeleted, 0)
 						.eq(AeaBills::getMblno, aeaBills.getMblno()));
@@ -305,6 +303,14 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 			}
 		}
 		this.saveOrUpdate(aeaBills);
+		Date date;
+		if ("AE".equals(aeaBills.getBusinessType())) {
+			date = aeaBills.getEtd();
+		} else {
+			date = aeaBills.getEta();
+		}
+		BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
 		/**-------------费用计算---------*/
 		BigDecimal amountDr = new BigDecimal("0.00");
 		BigDecimal amountCr = new BigDecimal("0.00");
@@ -354,7 +360,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountCr = amountCr.add(item.getAmount());
 				} else {
-					BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(),"1");
+					BigDecimal usd = exrateC.multiply(item.getAmount());
 					amountCrUsd = amountCrUsd.add(usd);
 				}
 			}
@@ -399,7 +405,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountDr = amountDr.add(item.getAmount());
 				} else {
-					BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(),"1");
+					BigDecimal usd = exrateD.multiply(item.getAmount());
 					amountDrUsd = amountDrUsd.add(usd);
 				}
 			}
@@ -411,7 +417,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 			aeaBills.setAccountStatus(1);
 		} else if (0 == statusD && 1 == statusC) {
 			aeaBills.setAccountStatus(2);
-		}else if (1 == statusD && 1 == statusC) {
+		} else if (1 == statusD && 1 == statusC) {
 			aeaBills.setAccountStatus(3);
 		}
 		BigDecimal quantity = aeaBills.getQuantity();
@@ -462,7 +468,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountCrM = amountCrM.add(item.getAmount());
 						} else {
-							BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(),"1");
+							BigDecimal usd = exrateC.multiply(item.getAmount());
 							amountCrUsdM = amountCrUsdM.add(usd);
 						}
 					} else {
@@ -471,7 +477,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 						} else if ("CNY".equals(item.getCurCode())) {
 							amountDrM = amountDrM.add(item.getAmount());
 						} else {
-							BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(),"1");
+							BigDecimal usd = exrateD.multiply(item.getAmount());
 							amountDrUsdM = amountDrUsdM.add(usd);
 						}
 					}
@@ -501,8 +507,10 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 				//利润 = 收 - 付
 				amountProfitM = amountDrM.subtract(amountCrM);
 				amountProfitUsdM = amountDrUsdM.subtract(amountCrUsdM);
-				amountDrLocM = amountDrLocM.add(bCurrencyService.converterCny("USD", amountDrUsdM, "D","1")).add(amountDrM);
-				amountCrLocM = amountCrLocM.add(bCurrencyService.converterCny("USD", amountCrUsdM, "C","1")).add(amountCrM);
+				amountDrUsdM = exrateD.multiply(amountDrUsdM);
+				amountDrLocM = amountDrLocM.add(amountDrUsdM).add(amountDrM);
+				amountCrUsdM = exrateC.multiply(amountCrUsdM);
+				amountCrLocM = amountCrLocM.add(amountCrUsdM).add(amountCrM);
 				amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 				details.setAmountDr(amountDrM);
 				details.setAmountCr(amountCrM);
@@ -522,8 +530,10 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 		//利润 = 收 - 付
 		amountProfit = amountDr.subtract(amountCr);
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-		amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D","1")).add(amountDr);
-		amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C","1")).add(amountCr);
+		amountDrUsd = exrateD.multiply(amountDrUsd);
+		amountDrLoc = amountDrLoc.add(amountDrUsd).add(amountDr);
+		amountCrUsd = exrateC.multiply(amountCrUsd);
+		amountCrLoc = amountCrLoc.add(amountCrUsd).add(amountCr);
 		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 		aeaBills.setAmountDr(amountDr);
 		aeaBills.setAmountCr(amountCr);
@@ -930,7 +940,7 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 
 			auditProecessDTO.setGrossProfit(amountCnyD.subtract(amountCnyC));
 			auditProecessDTO.setGrossProfitUsd(amountUsdD.subtract(amountUsdC));
-			auditProecessDTO.setGrossProfitLoc(auditProecessDTO.getGrossProfit().add(bCurrencyService.converterCny("USD", auditProecessDTO.getGrossProfitUsd(), "","1")));
+			auditProecessDTO.setGrossProfitLoc(auditProecessDTO.getGrossProfit().add(bCurrencyService.converterCny("USD", auditProecessDTO.getGrossProfitUsd(), "", "1")));
 
 			auditProecessDTO.setSalesCompanyName(declare.getCreateDeptName());
 			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
@@ -1236,6 +1246,13 @@ public class AeaBillsServiceImpl extends ServiceImpl<AeaBillsMapper, AeaBills> i
 		AeaBills copyBills = new AeaBills();
 		BeanUtil.copyProperties(detail, copyBills);
 		copyBills.setId(null);
+		copyBills.setOperatorId(AuthUtil.getUserId());
+		copyBills.setOperatorName(AuthUtil.getUserName());
+		Dept dept = deptUtils.getDept(AuthUtil.getDeptId());
+		if (dept != null) {
+			copyBills.setOperatorDept(dept.getId() + "");
+			copyBills.setOperatorDeptName(dept.getDeptName());
+		}
 		copyBills.setBillNo("");
 		copyBills.setMblno("");
 		copyBills.setHblno("");

+ 8 - 4
blade-service/blade-los/src/main/java/org/springblade/los/business/customsDeclaration/service/impl/CustomsDeclarationServiceImpl.java

@@ -175,6 +175,8 @@ public class CustomsDeclarationServiceImpl extends ServiceImpl<CustomsDeclaratio
 				}
 			}
 		}
+		BigDecimal exrateD = bCurrencyService.getCnyExrate(customsDeclaration.getBillDate(), "USD", "D", "1");
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(customsDeclaration.getBillDate(), "USD", "C", "1");
 		List<CustomsDeclaration> count = baseMapper.selectList(new LambdaQueryWrapper<CustomsDeclaration>()
 			.eq(CustomsDeclaration::getCreateDept, AuthUtil.getDeptId())
 			.eq(CustomsDeclaration::getTenantId, AuthUtil.getTenantId())
@@ -268,7 +270,7 @@ public class CustomsDeclarationServiceImpl extends ServiceImpl<CustomsDeclaratio
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountCr = amountCr.add(item.getAmount());
 				} else {
-					BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(),"1");
+					BigDecimal usd = exrateD.multiply(item.getAmount());
 					amountCrUsd = amountCrUsd.add(usd);
 				}
 			}
@@ -299,7 +301,7 @@ public class CustomsDeclarationServiceImpl extends ServiceImpl<CustomsDeclaratio
 				} else if ("CNY".equals(item.getCurCode())) {
 					amountDr = amountDr.add(item.getAmount());
 				} else {
-					BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(),"1");
+					BigDecimal usd = exrateC.multiply(item.getAmount());
 					amountDrUsd = amountDrUsd.add(usd);
 				}
 			}
@@ -317,8 +319,10 @@ public class CustomsDeclarationServiceImpl extends ServiceImpl<CustomsDeclaratio
 		//利润 = 收 - 付
 		amountProfit = amountDr.subtract(amountCr);
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-		amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D","1")).add(amountDr);
-		amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C","1")).add(amountCr);
+		amountDrUsd = exrateD.multiply(amountDrUsd);
+		amountDrLoc = amountDrLoc.add(amountDrUsd).add(amountDr);
+		amountCrUsd = exrateC.multiply(amountCrUsd);
+		amountCrLoc = amountCrLoc.add(amountCrUsd).add(amountCr);
 		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 		customsDeclaration.setAmountDr(amountDr);
 		customsDeclaration.setAmountCr(amountCr);

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

@@ -474,10 +474,40 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		StringBuilder boxTypeSum = new StringBuilder();
 		if (ObjectUtils.isNull(bills.getCfsQuantity()) || bills.getCfsQuantity().compareTo(new BigDecimal("0.00")) == 0) {
 			if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
+				bills.setCfsMeasurement(new BigDecimal("0.00"));
+				bills.setCfsGrossWeight(new BigDecimal("0.00"));
+				bills.setCfsQuantity(new BigDecimal("0.00"));
+				BigDecimal measurementSum = bills.getPreContainersList().stream().map(PreContainers::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal grossWeightSum = bills.getPreContainersList().stream().map(PreContainers::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal quantitySum = bills.getPreContainersList().stream().map(PreContainers::getNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (measurementSum.compareTo(new BigDecimal("0")) != 0) {
+					bills.setMeasurement(measurementSum);
+				}
+				if (grossWeightSum.compareTo(new BigDecimal("0")) != 0) {
+					bills.setGrossWeight(grossWeightSum);
+				}
+				if (quantitySum.compareTo(new BigDecimal("0")) != 0) {
+					bills.setQuantity(quantitySum);
+				}
+				bills.setTeu(teu.intValue());
 				for (PreContainers item : bills.getPreContainersList()) {
 					if (ObjectUtils.isNull(item.getCntrTypeCode())) {
 						throw new RuntimeException("箱型不能为空");
 					}
+					if (item.getId() == null) {
+						item.setCreateTime(new Date());
+						item.setCreateUser(AuthUtil.getUserId());
+						item.setCreateUserName(AuthUtil.getUserName());
+						if (ObjectUtils.isNotNull(branchId)) {
+							item.setBranchId(branchId);
+							item.setCreateDept(deptId);
+							item.setCreateDeptName(deptName);
+						}
+					} else {
+						item.setUpdateUser(AuthUtil.getUserId());
+						item.setUpdateTime(new Date());
+						item.setUpdateUserName(AuthUtil.getUserName());
+					}
 					item.setPid(bills.getId());
 					if (item.getCntrTypeCode().contains("20")) {
 						V20 += item.getQuantity();
@@ -497,14 +527,32 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						teu = teu.add(new BigDecimal(item.getQuantity()).multiply(item.getTeu()));
 					}
 				}
-				R res = preContainersService.submitList(bills.getPreContainersList());
-				if (!res.isSuccess()) {
-					throw new RuntimeException("保存失败");
+				preContainersService.saveOrUpdateBatch(bills.getPreContainersList());
+				List<Long> idList = bills.getPreContainersList().stream().map(PreContainers::getId).collect(Collectors.toList());
+				List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+					.eq(Containers::getPid, idList)
+					.eq(Containers::getTenantId, AuthUtil.getTenantId())
+					.eq(Containers::getIsDeleted, 0));
+				if (!containersList.isEmpty()) {
+					for (Containers item : containersList) {
+						item.setUpdateUser(AuthUtil.getUserId());
+						item.setUpdateUserName(AuthUtil.getUserName());
+						item.setUpdateTime(new Date());
+						item.setQuantity(new BigDecimal("0"));
+						item.setGrossWeight(new BigDecimal("0"));
+						item.setMeasurement(new BigDecimal("0"));
+						item.setNetWeight(new BigDecimal("0"));
+					}
+					containersService.updateBatchById(containersList);
 				}
 				if (boxTypeSum.length() > 0) {
 					boxTypeSum = new StringBuilder(boxTypeSum.substring(0, boxTypeSum.length() - 1));
 					bills.setQuantityCntrDescr(boxTypeSum.toString());
 				}
+				if ("263057".equals(AuthUtil.getTenantId())) {
+					bills.setCommodityDescr(bills.getPreContainersList().stream().map(PreContainers::getGoodsName)
+						.distinct().filter(Objects::nonNull).collect(Collectors.joining(",")));
+				}
 			}
 		}
 		bills.setQuantityV20(V20);
@@ -524,8 +572,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal amountCrLoc = new BigDecimal("0.00");
 		BigDecimal amountProfitLoc = new BigDecimal("0.00");
 		List<FeeCenter> feeCenterListAll = new ArrayList<>();
-		BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D", "1");
-		BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C", "1");
+		Date date = bills.getEtd();
+		if ("SE".equals(bills.getBusinessType())) {
+			date = bills.getEtd();
+		} else {
+			date = bills.getEta();
+		}
+		BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
 		//应付
 		int statusC = 0;
 		if (ObjectUtils.isNotNull(bills.getFeeCenterListC())) {
@@ -1740,6 +1794,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		Bills copyBills = new Bills();
 		BeanUtil.copyProperties(detail, copyBills);
 		copyBills.setId(null);
+		copyBills.setOperatorId(AuthUtil.getUserId());
+		copyBills.setOperatorName(AuthUtil.getUserName());
+		Dept dept = deptUtils.getDept(AuthUtil.getDeptId());
+		if (dept != null) {
+			copyBills.setOperatorDept(dept.getId() + "");
+			copyBills.setOperatorDeptName(dept.getDeptName());
+		}
 		copyBills.setBillNo("");
 		copyBills.setMblno("");
 		copyBills.setHblno("");
@@ -1774,9 +1835,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		copyBills.setFeeCenterListC(feeCenterListC);
 		copyBills.setFeeCenterListD(feeCenterListD);
 		copyBills.setPreContainersList(preContainersList);
-		/*copyBills.setQuantity(new BigDecimal("0.00"));
-		copyBills.setGrossWeight(new BigDecimal("0.00"));
-		copyBills.setMeasurement(new BigDecimal("0.00"));*/
 		copyBills.setCfsQuantity(new BigDecimal("0.00"));
 		copyBills.setCfsGrossWeight(new BigDecimal("0.00"));
 		copyBills.setCfsMeasurement(new BigDecimal("0.00"));

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

@@ -262,7 +262,7 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 				.eq(Bills::getIsDeleted, 0)
 				.in(Bills::getId, idList));
 			for (Bills item : billsList) {
-				BigDecimal quantity = containersBillsList.stream().filter(e -> e.getPpId().equals(item.getId()))
+				/*BigDecimal quantity = containersBillsList.stream().filter(e -> e.getPpId().equals(item.getId()))
 					.map(ContainersBills::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
 				BigDecimal grossWeight = containersBillsList.stream().filter(e -> e.getPpId().equals(item.getId()))
 					.map(ContainersBills::getGrossWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -270,7 +270,10 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 					.map(ContainersBills::getMeasurement).reduce(BigDecimal.ZERO, BigDecimal::add);
 				item.setCfsQuantity((ObjectUtils.isNotNull(item.getCfsQuantity()) ? item.getCfsQuantity() : new BigDecimal("0.00")).subtract(quantity));
 				item.setCfsMeasurement((ObjectUtils.isNotNull(item.getCfsMeasurement()) ? item.getCfsMeasurement() : new BigDecimal("0.00")).subtract(measurement));
-				item.setCfsGrossWeight((ObjectUtils.isNotNull(item.getCfsGrossWeight()) ? item.getCfsGrossWeight() : new BigDecimal("0.00")).subtract(grossWeight));
+				item.setCfsGrossWeight((ObjectUtils.isNotNull(item.getCfsGrossWeight()) ? item.getCfsGrossWeight() : new BigDecimal("0.00")).subtract(grossWeight));*/
+				item.setCfsQuantity(new BigDecimal("0.00"));
+				item.setCfsMeasurement(new BigDecimal("0.00"));
+				item.setCfsGrossWeight(new BigDecimal("0.00"));
 				item.setUpdateUserName(AuthUtil.getUserName());
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());

+ 18 - 70
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java

@@ -305,27 +305,6 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 			}
 			billsMapper.updateById(bills);
 		}
-		/*List<Containers> containersList = new ArrayList<>();
-		if (preContainersList.isEmpty()) {
-			return R.data(containersList);
-		}
-		List<Long> idsList = preContainersList.stream().map(PreContainers::getPid).distinct().collect(Collectors.toList());
-		List<Containers> removeContainersList = containersService.list(new LambdaQueryWrapper<Containers>()
-			.eq(Containers::getTenantId, AuthUtil.getTenantId())
-			.eq(Containers::getIsDeleted, 0)
-			.in(Containers::getPid, idsList));
-		if (!removeContainersList.isEmpty()) {
-			List<Long> ids = removeContainersList.stream().map(Containers::getId).collect(Collectors.toList());
-			containersService.removeByIds(ids);
-			if (!ids.isEmpty()) {
-				containersBillsService.removeByPid(ids);
-			}
-		}
-		String cntrTypeCode = preContainersList.stream().map(PreContainers::getCntrTypeCode).distinct().collect(Collectors.joining(","));
-		List<BCntrTypes> bCntrTypesList = bCntrTypesService.list(new LambdaQueryWrapper<BCntrTypes>()
-			.apply("find_in_set(cn_name,'" + cntrTypeCode + "')")
-			.eq(BCntrTypes::getStatus, 0)
-		);*/
 		for (PreContainers preContainers : preContainersList) {
 			if (preContainers.getId() == null) {
 				preContainers.setCreateTime(new Date());
@@ -341,57 +320,26 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				preContainers.setUpdateTime(new Date());
 				preContainers.setUpdateUserName(AuthUtil.getUserName());
 			}
-			/*this.saveOrUpdate(preContainers);
-			String ediCode = "";
-			if (!bCntrTypesList.isEmpty()) {
-				BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e -> e.getCnName().equals(preContainers.getCntrTypeCode()))
-					.findFirst().orElse(null);
-				if (bCntrTypes != null && bills != null) {
-					ediCode = RegularUtils.getEdiCode(bills.getCyCode(), bCntrTypes.getExtendedData());
-				}
-			}
-			//生成海运进出口配箱-箱号装箱
-			for (int i = 0; i < preContainers.getQuantity(); i++) {
-				Containers containers = new Containers();
-				containers.setCreateTime(new Date());
-				containers.setCreateUser(AuthUtil.getUserId());
-				containers.setCreateUserName(AuthUtil.getUserName());
-				containers.setCyCntrCode(ediCode);
-				if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
-					containers.setBranchId(branchId);
-					containers.setCreateDept(deptId);
-					containers.setCreateDeptName(deptName);
-				}
-				if (bills != null) {
-					containers.setBillNo(bills.getBillNo());
-					containers.setPolId(bills.getPolId());
-					containers.setPolCode(bills.getPolCode());
-					containers.setPolCnName(bills.getPolCnName());
-					containers.setPolEnName(bills.getPolEnName());
-					containers.setPodId(bills.getPodId());
-					containers.setPodCode(bills.getPodCode());
-					containers.setPodCnName(bills.getPodCnName());
-					containers.setPodEnName(bills.getPodEnName());
-					containers.setMblno(bills.getMblno());
-					containers.setHblno(bills.getHblno());
-					containers.setCommodityDescr(bills.getCommodityDescr());
-					containers.setPackingUnitId(bills.getPackingUnitId());
-					containers.setPackingUnit(bills.getPackingUnit());
-				}
-				containers.setPid(preContainers.getPid());
-				containers.setTeu(preContainers.getTeu());
-				containers.setIsSoc(preContainers.getIsSoc());
-				containers.setIsOneway(preContainers.getIsOneway());
-				containers.setCntrTypeCode(preContainers.getCntrTypeCode());
-				containers.setCntrTypeCodeId(preContainers.getCntrTypeCodeId());
-				containers.setLineNo(preContainers.getId());
-				containersList.add(containers);
-			}*/
 		}
-		/*if (!containersList.isEmpty()) {
-			containersService.saveOrUpdateBatch(containersList);
-		}*/
 		this.saveOrUpdateBatch(preContainersList);
+		List<Long> idList = preContainersList.stream().map(PreContainers::getId).collect(Collectors.toList());
+		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+			.eq(Containers::getPid, idList)
+			.eq(Containers::getTenantId, AuthUtil.getTenantId())
+			.eq(Containers::getIsDeleted, 0));
+		if (!containersList.isEmpty()) {
+			for (Containers item : containersList) {
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+				item.setQuantity(new BigDecimal("0"));
+				item.setGrossWeight(new BigDecimal("0"));
+				item.setMeasurement(new BigDecimal("0"));
+				item.setNetWeight(new BigDecimal("0"));
+			}
+			containersService.updateBatchById(containersList);
+		}
+
 		return R.data(preContainersList);
 	}
 

+ 12 - 9
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/TemplateImportServiceImpl.java

@@ -18,6 +18,7 @@ import org.springblade.los.basic.vessels.service.IBVesselsService;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.Containers;
 import org.springblade.los.business.sea.entity.SeaBillsDetail;
+import org.springblade.los.business.sea.service.IBillsService;
 import org.springblade.los.business.sea.service.ITemplateImportService;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -47,6 +48,8 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 	private final IBPortsService bPortsService;
 	private final IBPackagesService bPackagesService;
 
+	private final IBillsService billsService;
+
 	public static double splitNumericPrefixFromString(String str){
 		str=str.trim();
 		String str2="";
@@ -213,8 +216,8 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 		}
 	}
 	@Override
-	public R<Bills> importOne(MultipartFile file) throws Exception {
-		Bills bills = new Bills();
+	public R<Bills> importOne(MultipartFile file,Long billId) throws Exception {
+		Bills bills = billsService.getById(billId);
 		SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
 		// 创建临时文件
 		Path tempFile = Files.createTempFile("prefix", "suffix");
@@ -517,8 +520,8 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 	}
 
 	@Override
-	public R<Bills> importPilBooking(MultipartFile file) throws Exception {
-		Bills bills = new Bills();
+	public R<Bills> importPilBooking(MultipartFile file,Long billId) throws Exception {
+		Bills bills = billsService.getById(billId);
 		SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
 		// 创建临时文件
 		Path tempFile = Files.createTempFile("prefix", "suffix");
@@ -784,8 +787,8 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 	}
 
 	@Override
-	public R<Bills> importPilCutOffOrders(MultipartFile file) throws Exception {
-		Bills bills = new Bills();
+	public R<Bills> importPilCutOffOrders(MultipartFile file,Long billId) throws Exception {
+		Bills bills = billsService.getById(billId);
 		SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
 		// 创建临时文件
 		Path tempFile = Files.createTempFile("prefix", "suffix");
@@ -1050,8 +1053,8 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 	}
 
 	@Override
-	public R<Bills> importHisenseBill(MultipartFile file) throws Exception {
-		Bills bills = new Bills();
+	public R<Bills> importHisenseBill(MultipartFile file,Long billId) throws Exception {
+		Bills bills = billsService.getById(billId);
 		SeaBillsDetail seaBillsDetail = new SeaBillsDetail();
 		List<Containers> containersList = new ArrayList<>();
 
@@ -1251,7 +1254,7 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 	}
 
 	@Override
-	public R<List<Containers>> importHisense(MultipartFile file) throws Exception {
+	public R<List<Containers>> importHisense(MultipartFile file,Long billId) throws Exception {
 		List<Containers> containersList = new ArrayList<>();
 
 		// 创建临时文件

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

@@ -927,10 +927,11 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				deptName = String.join(",", res.getData());
 			}
 		}
-		BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D", "1");
-		BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C", "1");
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(list) && !list.isEmpty()) {
+			Date date = list.get(0).getBillDate();
+			BigDecimal exrateD = bCurrencyService.getCnyExrate(date,"USD", "D", "1");
+			BigDecimal exrateC = bCurrencyService.getCnyExrate(date,"USD", "C", "1");
 			for (FeeCenter feeCenter : list) {
 				if (feeCenter.getId() == null) {
 					feeCenter.setCreateTime(new Date());

+ 6 - 6
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -127,8 +127,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			}
 		}
 		List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C", "2");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D", "2");
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(null,"USD", "C", "2");
+		BigDecimal exrateD = bCurrencyService.getCnyExrate(null,"USD", "D", "2");
 		//是否合并amend费用  true 合并  false 不合并
 		if ("1".equals(financeProfit.getMergeAmendFee())) {
 			financeProfitList = financeProfitMapper.financeProfit(financeProfit, page);
@@ -1073,8 +1073,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			}
 		}
 		List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C", "2");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D", "2");
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(null,"USD", "C", "2");
+		BigDecimal exrateD = bCurrencyService.getCnyExrate(null,"USD", "D", "2");
 		//是否合并amend费用  true 合并  false 不合并
 		if ("1".equals(financeProfit.getMergeAmendFee())) {
 			financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);
@@ -1302,8 +1302,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			}
 		}
 		List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C", "2");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D", "2");
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(null,"USD", "C", "2");
+		BigDecimal exrateD = bCurrencyService.getCnyExrate(null,"USD", "D", "2");
 		//是否合并amend费用  true 合并  false 不合并
 		if (ObjectUtils.isNotNull(financeProfit.getMergeAmendFee())) {
 			financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);