Ver código fonte

1.海运进出口列表查询条件修改
2.币别汇率设置增加字段
3.海运进出口保存接口修改汇率
4.费用中心所有有关汇率计算逻辑修改
5.所有报表打印有关汇率计算逻辑修改
6.首页接口调试
7.增加获取当前所属公司本位币公共方法
8.增加获取当前所属公司所有币别某个日期对应汇率公共方法
9.增加获取对应币别汇率公共方法

纪新园 10 meses atrás
pai
commit
999e74fb1f

+ 11 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/cur/entity/BCurExrate.java

@@ -190,5 +190,16 @@ public class BCurExrate implements Serializable {
 	@ApiModelProperty(value = "类型")
 	private String type;
 
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+
 
 }

+ 11 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/cur/entity/BCurrency.java

@@ -181,6 +181,17 @@ public class BCurrency implements Serializable {
 	private Integer moon;
 
 	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+
+	/**
 	 * 币种汇率
 	 */
 	@TableField(exist = false)

+ 185 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/CurrencyUtils.java

@@ -0,0 +1,185 @@
+package org.springblade.los.Util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.los.basic.cur.entity.BCurExrate;
+import org.springblade.los.basic.cur.entity.BCurrency;
+import org.springblade.los.basic.cur.service.IBCurExrateService;
+import org.springblade.los.basic.cur.service.IBCurrencyService;
+import org.springblade.system.feign.ISysClient;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author :jixinyuan
+ * @date : 2025/5/23
+ */
+@Component
+@AllArgsConstructor
+public class CurrencyUtils {
+
+	private final IBCurExrateService bCurExrateService;
+
+	private final IBCurrencyService bCurrencyService;
+
+	private final ISysClient sysClient;
+
+
+	/**
+	 * 获取当前所属公司本位币
+	 *
+	 * @return 币别代码
+	 */
+	public String standardCurrency() {
+		BCurrency bCurExrate = bCurrencyService.getOne(new LambdaQueryWrapper<BCurrency>()
+			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
+			.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
+			.eq(BCurrency::getIsDeleted, 0)
+			.eq(BCurrency::getIsLocal, 1));
+		if (bCurExrate == null) {
+			throw new RuntimeException("请先维护本位币基础资料");
+		}
+		return bCurExrate.getCode();
+	}
+
+	/**
+	 * 获取当前所属公司下所有币别汇率信息
+	 *
+	 * @param date 时间
+	 * @param type 类型  1=业务 2=财务
+	 * @return 币别汇率集合
+	 */
+	public List<BCurExrate> obtainRate(Date date, String type) {
+		List<BCurExrate> curExrateList = new ArrayList<>();
+		// 创建 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);
+		//获取所有币别
+		List<BCurrency> currencyList = bCurrencyService.list(new LambdaQueryWrapper<BCurrency>()
+			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
+			.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
+			.eq(BCurrency::getIsDeleted, 0));
+		if (currencyList.isEmpty()) {
+			throw new RuntimeException("请先维护位币基础资料");
+		}
+		boolean status = false;
+		//获取业务汇率范围
+		String exchangeRateType = sysClient.getParamServiceNew("business.exchange.rate");
+		if ("1".equals(type)) {
+			if (ObjectUtils.isNotNull(exchangeRateType)) {
+				status = true;
+			}
+		}
+		for (BCurrency bCurrency : currencyList) {
+			LambdaQueryWrapper<BCurExrate> lambdaQueryWrapper = new LambdaQueryWrapper<BCurExrate>()
+				.in(BCurExrate::getCode, currencyList.stream().map(BCurrency::getCode).collect(Collectors.toList()))
+				.eq(BCurExrate::getTenantId, AuthUtil.getTenantId())
+				.eq(BCurExrate::getIsDeleted, 0)
+				.eq(BCurExrate::getExrateYear, year);
+			//判断查询条件为  配置范围/默认范围
+			if (status) {
+				if ("月".equals(exchangeRateType)) {
+					lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month)
+						.eq(BCurExrate::getType, "月汇率");
+				} else if ("日".equals(exchangeRateType)) {
+					lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month);
+					lambdaQueryWrapper.eq(BCurExrate::getExrateDay, day)
+						.eq(BCurExrate::getType, "日汇率");
+				}
+			} else {
+				if ("月汇率".equals(bCurrency.getParitiesType())) {
+					lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month)
+						.eq(BCurExrate::getType, bCurrency.getParitiesType());
+				} else if ("日汇率".equals(bCurrency.getParitiesType())) {
+					lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month);
+					lambdaQueryWrapper.eq(BCurExrate::getExrateDay, day)
+						.eq(BCurExrate::getType, bCurrency.getParitiesType());
+				}
+			}
+			//获取具体日期汇率
+			BCurExrate bCurExrate = bCurExrateService.getOne(lambdaQueryWrapper);
+			if (bCurExrate != null) {
+				curExrateList.add(bCurExrate);
+			}
+		}
+		if (curExrateList.isEmpty()) {
+			throw new RuntimeException("请维护" + year + "年" + month + "月汇率");
+		}
+		return curExrateList;
+	}
+
+	/**
+	 * 外币转换本位币
+	 * @param dc 收付
+	 * @param curExrateList  汇率数据
+	 * @param amount 金额
+	 * @param curCode 外币
+	 * @param type 类型 1=业务 2=财务
+	 * @return 本位币
+	 */
+	public BigDecimal converter(String dc, List<BCurExrate> curExrateList, BigDecimal amount, String curCode, String type) {
+		BigDecimal exrate;
+		BCurExrate bCurExrate = curExrateList.stream().filter(e -> e.getCode().equals(curCode)).findFirst().orElse(null);
+		if (bCurExrate == null) {
+			throw new RuntimeException("未查到币别" + curCode + "," + curExrateList.get(0).getExrateYear() + "年" + curExrateList.get(0).getExrateMonth() + "月汇率信息");
+		}
+		if ("D".equals(dc)) {
+			if ("1".equals(type)) {
+				exrate = bCurExrate.getExrateReceivable();
+			} else {
+				exrate = bCurExrate.getExrateReceipts();
+			}
+		} else {
+			if ("1".equals(type)) {
+				exrate = bCurExrate.getExratePayable();
+			} else {
+				exrate = bCurExrate.getExratePayment();
+			}
+		}
+		return amount.multiply(exrate);
+	}
+
+	/**
+	 * 获取对应币别汇率
+	 * @param dc 收付
+	 * @param curExrateList  汇率数据
+	 * @param curCode 外币
+	 * @param type 类型 1=业务 2=财务
+	 * @return 本位币
+	 */
+	public BigDecimal obtainExrate(String dc, List<BCurExrate> curExrateList,  String curCode, String type) {
+		BigDecimal exrate;
+		BCurExrate bCurExrate = curExrateList.stream().filter(e -> e.getCode().equals(curCode)).findFirst().orElse(null);
+		if (bCurExrate == null) {
+			throw new RuntimeException("未查到币别" + curCode + "," + curExrateList.get(0).getExrateYear() + "年" + curExrateList.get(0).getExrateMonth() + "月汇率信息");
+		}
+		if ("D".equals(dc)) {
+			if ("1".equals(type)) {
+				exrate = bCurExrate.getExrateReceivable();
+			} else {
+				exrate = bCurExrate.getExrateReceipts();
+			}
+		} else {
+			if ("1".equals(type)) {
+				exrate = bCurExrate.getExratePayable();
+			} else {
+				exrate = bCurExrate.getExratePayment();
+			}
+		}
+		return exrate;
+	}
+
+}

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/controller/BCurExrateController.java

@@ -75,6 +75,7 @@ public class BCurExrateController extends BladeController {
 		LambdaQueryWrapper<BCurExrate> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(BCurExrate::getTenantId, AuthUtil.getTenantId())
 			.eq(BCurExrate::getIsDeleted, 0)
+			.eq(BCurExrate::getBranchId, AuthUtil.getDeptId())
 			.eq(ObjectUtils.isNotNull(bCurExrate.getCode()), BCurExrate::getCode, bCurExrate.getCode())
 			.eq(ObjectUtils.isNotNull(bCurExrate.getExrateYear()), BCurExrate::getExrateYear, bCurExrate.getExrateYear())
 			.eq(ObjectUtils.isNotNull(bCurExrate.getExrateMonth()), BCurExrate::getExrateMonth, bCurExrate.getExrateMonth())

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/controller/BCurrencyController.java

@@ -28,6 +28,7 @@ import lombok.AllArgsConstructor;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import org.checkerframework.checker.units.qual.A;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -84,6 +85,7 @@ public class BCurrencyController extends BladeController {
 		LambdaQueryWrapper<BCurrency> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
 			.eq(BCurrency::getIsDeleted, 0)
+			.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
 			.like(ObjectUtils.isNotNull(bCurrency.getCode()), BCurrency::getCode, bCurrency.getCode())
 			.like(ObjectUtils.isNotNull(bCurrency.getUnCode()), BCurrency::getUnCode, bCurrency.getUnCode())
 			.like(ObjectUtils.isNotNull(bCurrency.getCnName()), BCurrency::getCnName, bCurrency.getCnName())

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

@@ -68,31 +68,45 @@ public class BCurrencyServiceImpl extends ServiceImpl<CurrencyMapper, BCurrency>
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R submit(BCurrency bCurrency) {
-		String deptId = "";
+		String deptId = AuthUtil.getDeptId();
 		String deptName = "";
 		//获取部门ids对应中文名
-		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());
-			}
+		R<String> res = sysClient.getDeptName(Long.parseLong(deptId));
+		if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+			deptName = res.getData();
 		}
+		List<BCurrency> currencyList = baseMapper.selectList(new LambdaQueryWrapper<BCurrency>()
+			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
+			.eq(BCurrency::getIsDeleted, 0)
+			.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
+			.eq(BCurrency::getCode, bCurrency.getCode()));
+		List<BCurrency> isLocalList = baseMapper.selectList(new LambdaQueryWrapper<BCurrency>()
+			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
+			.eq(BCurrency::getIsDeleted, 0)
+			.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
+			.eq(BCurrency::getIsLocal, 1)
+		);
 		if (bCurrency.getId() == null) {
 			bCurrency.setCreateTime(new Date());
 			bCurrency.setCreateUser(AuthUtil.getUserId());
 			bCurrency.setCreateUserName(AuthUtil.getUserName());
-			if (baseMapper.selectCount(new LambdaQueryWrapper<BCurrency>()
-				.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
-				.eq(BCurrency::getIsDeleted, 0)
-				.eq(BCurrency::getCnName, bCurrency.getCnName())) > 0) {
-				throw new RuntimeException("名称已存在");
+			if (!currencyList.isEmpty()) {
+				throw new RuntimeException("编码已存在");
 			}
-			if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
-				bCurrency.setCreateDept(deptId);
-				bCurrency.setCreateDeptName(deptName);
+			if (!isLocalList.isEmpty()) {
+				throw new RuntimeException("只允许存在一个本位币");
 			}
+			bCurrency.setCreateDept(deptId);
+			bCurrency.setCreateDeptName(deptName);
+			bCurrency.setBranchId(deptId);
+			bCurrency.setBranchName(deptName);
 		} else {
+			if (currencyList.stream().anyMatch(e -> !e.getId().equals(bCurrency.getId()))) {
+				throw new RuntimeException("编码已存在");
+			}
+			if (isLocalList.stream().anyMatch(e -> !e.getId().equals(bCurrency.getId()) && bCurrency.getIsLocal() == 1)) {
+				throw new RuntimeException("只允许存在一个本位币");
+			}
 			bCurrency.setUpdateUser(AuthUtil.getUserId());
 			bCurrency.setUpdateTime(new Date());
 			bCurrency.setUpdateUserName(AuthUtil.getUserName());
@@ -102,7 +116,7 @@ public class BCurrencyServiceImpl extends ServiceImpl<CurrencyMapper, BCurrency>
 			List<BCurExrate> bCurExrateListAdd = new ArrayList<>();
 			List<BCurExrate> bCurExrateListUpdate = new ArrayList<>();
 			for (BCurExrate item : bCurrency.getCurExrateList()) {
-				if (item.getId() == null){
+				if (item.getId() == null) {
 					item.setType(bCurrency.getParitiesType());
 				}
 				item.setCode(bCurrency.getCode());
@@ -123,10 +137,10 @@ public class BCurrencyServiceImpl extends ServiceImpl<CurrencyMapper, BCurrency>
 					item.setCreateTime(new Date());
 					item.setCreateUser(AuthUtil.getUserId());
 					item.setCreateUserName(AuthUtil.getUserName());
-					if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
-						item.setCreateDept(deptId);
-						item.setCreateDeptName(deptName);
-					}
+					item.setCreateDept(deptId);
+					item.setCreateDeptName(deptName);
+					item.setBranchId(deptId);
+					item.setBranchName(deptName);
 					bCurExrateListAdd.add(item);
 				}
 			}

Diferenças do arquivo suprimidas por serem muito extensas
+ 50 - 602
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java


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

@@ -158,13 +158,17 @@ public class BillsController extends BladeController {
 					lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
 				} else if (0 == bills.getBillStatus()) {
 					lambdaQueryWrapper.and(i -> i.isNull(Bills::getMblno).or().eq(Bills::getMblno, ""));
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (4 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getMblno)
 						.ne(Bills::getMblno, "");
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (5 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEtd);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (6 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEta);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				}
 			} else if ("SI".equals(bills.getBusinessType())) {
 				if ("1,2,3".contains(bills.getBillStatus() + "")) {
@@ -176,12 +180,16 @@ public class BillsController extends BladeController {
 					lambdaQueryWrapper.ne(Bills::getBillStatus, "1");
 				} else if (6 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEta);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (8 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getReturnEmptyDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (9 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getChangeOrderDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (10 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				}
 			}
 		}
@@ -303,13 +311,17 @@ public class BillsController extends BladeController {
 					lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
 				} else if (0 == bills.getBillStatus()) {
 					lambdaQueryWrapper.and(i -> i.isNull(Bills::getMblno).or().eq(Bills::getMblno, ""));
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (4 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getMblno)
 						.ne(Bills::getMblno, "");
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (5 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEtd);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (6 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEta);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				}
 			} else if ("SI".equals(bills.getBusinessType())) {
 				if ("1,2,3".contains(bills.getBillStatus() + "")) {
@@ -321,12 +333,16 @@ public class BillsController extends BladeController {
 					lambdaQueryWrapper.ne(Bills::getBillStatus, "1");
 				} else if (6 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEta);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (8 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getReturnEmptyDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (9 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getChangeOrderDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (10 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				}
 			}
 		}
@@ -673,13 +689,17 @@ public class BillsController extends BladeController {
 					lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
 				} else if (0 == bills.getBillStatus()) {
 					lambdaQueryWrapper.and(i -> i.isNull(Bills::getMblno).or().eq(Bills::getMblno, ""));
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (4 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getMblno)
 						.ne(Bills::getMblno, "");
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (5 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEtd);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (6 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEta);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				}
 			} else if ("SI".equals(bills.getBusinessType())) {
 				if ("1,2,3".contains(bills.getBillStatus() + "")) {
@@ -691,12 +711,16 @@ public class BillsController extends BladeController {
 					lambdaQueryWrapper.ne(Bills::getBillStatus, "1");
 				} else if (6 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getActualEta);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (8 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getReturnEmptyDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (9 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getChangeOrderDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				} else if (10 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
+					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
 				}
 			}
 		}

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

@@ -31,6 +31,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.core.tool.utils.StringUtil;
+import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.Util.StringTools;
 import org.springblade.los.Util.ZrUtil;
 import org.springblade.los.basic.business.entity.BusinessType;
@@ -39,7 +40,7 @@ import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.entity.BCorpsAttn;
 import org.springblade.los.basic.corps.mapper.CorpsAttnMapper;
 import org.springblade.los.basic.corps.mapper.CorpsMapper;
-import org.springblade.los.basic.cur.entity.BCurrency;
+import org.springblade.los.basic.cur.entity.BCurExrate;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.basic.vessels.entity.BVessels;
 import org.springblade.los.basic.vessels.mapper.VesselsMapper;
@@ -117,8 +118,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final IBusinessBillNoService businessBillNoService;
 
-	private final IBCurrencyService bCurrencyService;
-
 	private final IBusinessTypeService bBusinessTypeService;
 
 	private final IAuditPathsActsService auditPathsActsService;
@@ -149,6 +148,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final IUserClient userClient;
 
+	private final CurrencyUtils currencyUtils;
+
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
 		return page.setRecords(baseMapper.selectBillsPage(page, bills));
@@ -419,8 +420,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		} else {
 			date = bills.getEta();
 		}
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
+		String exrateType = currencyUtils.standardCurrency();
+		List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 		//应付
 		int statusC = 0;
 		if (ObjectUtils.isNotNull(bills.getFeeCenterListC())) {
@@ -463,13 +464,12 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setRefno(bills.getRefno());
 				item.setBookingNo(bills.getBookingNo());
 				item.setCntrNo(bills.getQuantityCntrTypesDescr());
-				if ("USD".equals(item.getCurCode())) {
-					amountCrUsd = amountCrUsd.add(item.getAmount());
-				} else if ("CNY".equals(item.getCurCode())) {
+				if (exrateType.equals(item.getCurCode())) {
 					amountCr = amountCr.add(item.getAmount());
+					amountCrLoc = amountCrLoc.add(item.getAmount());
 				} else {
-					BigDecimal usd = item.getAmount().multiply(exrateC);
-					amountCrUsd = amountCrUsd.add(usd);
+					amountCrUsd = amountCrUsd.add(item.getAmount());
+					amountCrLoc = amountCrLoc.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 				}
 				feeCenterListAll.add(item);
 			}
@@ -516,13 +516,12 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setRefno(bills.getRefno());
 				item.setBookingNo(bills.getBookingNo());
 				item.setCntrNo(bills.getQuantityCntrTypesDescr());
-				if ("USD".equals(item.getCurCode())) {
-					amountDrUsd = amountDrUsd.add(item.getAmount());
-				} else if ("CNY".equals(item.getCurCode())) {
+				if (exrateType.equals(item.getCurCode())) {
 					amountDr = amountDr.add(item.getAmount());
+					amountDrLoc = amountDrLoc.add(item.getAmount());
 				} else {
-					BigDecimal usd = item.getAmount().multiply(exrateD);
-					amountDrUsd = amountDrUsd.add(usd);
+					amountDrUsd = amountDrUsd.add(item.getAmount());
+					amountDrLoc = amountDrLoc.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 				}
 				feeCenterListAll.add(item);
 			}
@@ -564,13 +563,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			if (details != null) {
 				BigDecimal amountDrM = new BigDecimal("0.00");
 				BigDecimal amountCrM = new BigDecimal("0.00");
-				BigDecimal amountProfitM = new BigDecimal("0.00");
+				BigDecimal amountProfitM;
 				BigDecimal amountDrUsdM = new BigDecimal("0.00");
 				BigDecimal amountCrUsdM = new BigDecimal("0.00");
-				BigDecimal amountProfitUsdM = new BigDecimal("0.00");
+				BigDecimal amountProfitUsdM;
 				BigDecimal amountDrLocM = new BigDecimal("0.00");
 				BigDecimal amountCrLocM = new BigDecimal("0.00");
-				BigDecimal amountProfitLocM = new BigDecimal("0.00");
+				BigDecimal amountProfitLocM;
 				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.select(FeeCenter::getCurCode, FeeCenter::getAmount, FeeCenter::getDc)
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -578,22 +577,20 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					.eq(FeeCenter::getPid, details.getId()));
 				for (FeeCenter item : feeCenterList) {
 					if ("C".equals(item.getDc())) {
-						if ("USD".equals(item.getCurCode())) {
-							amountCrUsdM = amountCrUsdM.add(item.getAmount());
-						} else if ("CNY".equals(item.getCurCode())) {
+						if (exrateType.equals(item.getCurCode())) {
 							amountCrM = amountCrM.add(item.getAmount());
+							amountCrLocM = amountCrLocM.add(item.getAmount());
 						} else {
-							BigDecimal usd = item.getAmount().multiply(exrateC);
-							amountCrUsdM = amountCrUsdM.add(usd);
+							amountCrUsdM = amountCrUsdM.add(item.getAmount());
+							amountCrLocM = amountCrLocM.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 						}
 					} else {
-						if ("USD".equals(item.getCurCode())) {
-							amountDrUsdM = amountDrUsdM.add(item.getAmount());
-						} else if ("CNY".equals(item.getCurCode())) {
+						if (exrateType.equals(item.getCurCode())) {
 							amountDrM = amountDrM.add(item.getAmount());
+							amountDrLocM = amountDrLocM.add(item.getAmount());
 						} else {
-							BigDecimal usd = item.getAmount().multiply(exrateD);
-							amountDrUsdM = amountDrUsdM.add(usd);
+							amountDrUsdM = amountDrUsdM.add(item.getAmount());
+							amountDrLocM = amountDrLocM.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 						}
 					}
 				}
@@ -618,8 +615,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				//利润 = 收 - 付
 				amountProfitM = amountDrM.subtract(amountCrM);
 				amountProfitUsdM = amountDrUsdM.subtract(amountCrUsdM);
-				amountDrLocM = amountDrLocM.add(amountDrUsdM.multiply(exrateD)).add(amountDrM);
-				amountCrLocM = amountCrLocM.add(amountCrUsdM.multiply(exrateC)).add(amountCrM);
 				amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 				details.setAmountDr(amountDrM);
 				details.setAmountCr(amountCrM);
@@ -636,16 +631,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		//利润 = 收 - 付
 		amountProfit = amountDr.subtract(amountCr);
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-		if (amountDrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-			amountDrLoc = amountDrLoc.add(amountDrUsd.multiply(exrateD)).add(amountDr);
-		} else {
-			amountDrLoc = amountDrLoc.add(amountDr);
-		}
-		if (amountCrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-			amountCrLoc = amountCrLoc.add(amountCrUsd.multiply(exrateC)).add(amountCr);
-		} else {
-			amountCrLoc = amountCrLoc.add(amountCr);
-		}
 		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 		bills.setAmountDr(amountDr);
 		bills.setAmountCr(amountCr);
@@ -1031,6 +1016,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal amountDrLoc = new BigDecimal("0.00");
 		BigDecimal amountCrLoc = new BigDecimal("0.00");
 		BigDecimal amountProfitLoc;
+		String exrateType = currencyUtils.standardCurrency();
 		if (!amendsList.isEmpty()) {
 			List<Long> ids = amendsList.stream().map(Amends::getId).distinct().collect(Collectors.toList());
 			List<FeeCenter> feeCenterAmendList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
@@ -1040,7 +1026,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			detail.setFeeCenterAmendList(feeCenterAmendList.isEmpty() ? new ArrayList<>() : feeCenterAmendList);
 			for (FeeCenter item : feeCenterAmendList) {
 				if ("D".equals(item.getDc())) {
-					if ("CNY".equals(item.getCurCode())) {
+					if (exrateType.equals(item.getCurCode())) {
 						amountDr = amountDr.add(item.getAmount());
 						amountDrLoc = amountDrLoc.add(item.getAmount());
 					} else {
@@ -1048,7 +1034,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						amountDrLoc = amountDrLoc.add(item.getAmount().multiply(item.getExrate()));
 					}
 				} else {
-					if ("CNY".equals(item.getCurCode())) {
+					if (exrateType.equals(item.getCurCode())) {
 						amountCr = amountCr.add(item.getAmount());
 						amountCrLoc = amountCrLoc.add(item.getAmount());
 					} else {
@@ -2067,93 +2053,51 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		}
 		if ("1".equals(type)) {
 			List<FeeCenter> feeCenterListSum = new ArrayList<>();
-			BigDecimal exrateDUsd = null;
-			BigDecimal exrateCUsd = null;
-			BCurrency bCurrency = new BCurrency();
-			bCurrency.setType("1");
-			bCurrency.setDc("D");
-			bCurrency.setDate(date1);
-			List<BCurrency> bCurrencyListD = bCurrencyService.getExrate(bCurrency);
-			if (!bCurrencyListD.isEmpty()) {
-				BCurrency bCurrency1 = bCurrencyListD.stream().filter(e -> e.getCode().equals("USD"))
-					.findFirst().orElse(null);
-				if (bCurrency1 != null) {
-					exrateDUsd = bCurrency1.getExrate();
-				}
-			}
-			bCurrency.setDc("C");
-			List<BCurrency> bCurrencyListC = bCurrencyService.getExrate(bCurrency);
-			if (!bCurrencyListD.isEmpty()) {
-				BCurrency bCurrency1 = bCurrencyListC.stream().filter(e -> e.getCode().equals("USD"))
-					.findFirst().orElse(null);
-				if (bCurrency1 != null) {
-					exrateCUsd = bCurrency1.getExrate();
-				}
-			}
-			if (ObjectUtils.isNull(exrateDUsd) || ObjectUtils.isNull(exrateCUsd)) {
-				throw new RuntimeException("请先维护汇率信息");
-			}
-
+			String exrateType = currencyUtils.standardCurrency();
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date1, "1");
 			BigDecimal amountDr = new BigDecimal("0.00");
 			BigDecimal amountCr = new BigDecimal("0.00");
-			BigDecimal amountProfit = new BigDecimal("0.00");
+			BigDecimal amountProfit;
 			BigDecimal amountDrUsd = new BigDecimal("0.00");
 			BigDecimal amountCrUsd = new BigDecimal("0.00");
-			BigDecimal amountProfitUsd = new BigDecimal("0.00");
+			BigDecimal amountProfitUsd;
 			BigDecimal amountDrLoc = new BigDecimal("0.00");
 			BigDecimal amountCrLoc = new BigDecimal("0.00");
-			BigDecimal amountProfitLoc = new BigDecimal("0.00");
+			BigDecimal amountProfitLoc;
 
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 				.eq(FeeCenter::getIsDeleted, 0)
 				.eq(FeeCenter::getPid, billId));
 			if (!feeCenterList.isEmpty()) {
-				List<FeeCenter> feeCenterListD = feeCenterList.stream().filter(e -> e.getDc().equals("D")).collect(Collectors.toList());
-				if (!feeCenterListD.isEmpty()) {
-					for (FeeCenter item : feeCenterListD) {
-						item.setEtd(bills.getEtd());
-						item.setEta(bills.getEta());
-						if ("USD".equals(item.getCurCode())) {
-							amountCrUsd = amountCrUsd.add(item.getAmount());
-						} else if ("CNY".equals(item.getCurCode())) {
-							amountCr = amountCr.add(item.getAmount());
-						} else {
-							BigDecimal usd = item.getAmount().multiply(exrateDUsd);
-							amountCrUsd = amountCrUsd.add(usd);
-						}
-						if ("USD".equals(item.getCurCode())) {
-							item.setExrate(exrateDUsd);
-							item.setAmountNetLoc(item.getAmountNet().multiply(exrateDUsd));
-							item.setAmountTaxLoc(item.getAmountTax().multiply(exrateDUsd));
-							item.setAmountLoc(item.getAmount().multiply(exrateDUsd));
-							item.setAmountDiscountLoc(item.getAmount().multiply(exrateDUsd));
-						}
-						feeCenterListSum.add(item);
-					}
-				}
-				List<FeeCenter> feeCenterListC = feeCenterList.stream().filter(e -> e.getDc().equals("C")).collect(Collectors.toList());
-				if (!feeCenterListC.isEmpty()) {
-					for (FeeCenter item : feeCenterListC) {
-						item.setEtd(bills.getEtd());
-						item.setEta(bills.getEta());
-						if ("USD".equals(item.getCurCode())) {
-							amountDrUsd = amountDrUsd.add(item.getAmount());
-						} else if ("CNY".equals(item.getCurCode())) {
+				for (FeeCenter item : feeCenterList) {
+					item.setEtd(bills.getEtd());
+					item.setEta(bills.getEta());
+					if ("D".equals(item.getDc())){
+						if (exrateType.equals(item.getCurCode())) {
 							amountDr = amountDr.add(item.getAmount());
+							amountDrLoc = amountDrLoc.add(item.getAmount());
 						} else {
-							BigDecimal usd = item.getAmount().multiply(exrateCUsd);
-							amountDrUsd = amountDrUsd.add(usd);
+							amountDrUsd = amountDrUsd.add(item.getAmount());
+							amountDrLoc = amountDrLoc.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 						}
-						if ("USD".equals(item.getCurCode())) {
-							item.setExrate(exrateCUsd);
-							item.setAmountNetLoc(item.getAmountNet().multiply(exrateCUsd));
-							item.setAmountTaxLoc(item.getAmountTax().multiply(exrateCUsd));
-							item.setAmountLoc(item.getAmount().multiply(exrateCUsd));
-							item.setAmountDiscountLoc(item.getAmount().multiply(exrateCUsd));
+					}else{
+						if (exrateType.equals(item.getCurCode())) {
+							amountCr = amountCr.add(item.getAmount());
+							amountCrLoc = amountCrLoc.add(item.getAmount());
+						} else {
+							amountCrUsd = amountCrUsd.add(item.getAmount());
+							amountCrLoc = amountCrLoc.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 						}
-						feeCenterListSum.add(item);
 					}
+					if (!exrateType.equals(item.getCurCode())) {
+						item.setExrate(currencyUtils.obtainExrate(item.getDc(), curExrateList, item.getCurCode(), "1"));
+						item.setAmountNetLoc(currencyUtils.converter(item.getDc(), curExrateList, item.getAmountNet(), item.getCurCode(), "1"));
+						item.setAmountTaxLoc(currencyUtils.converter(item.getDc(), curExrateList, item.getAmountTax(), item.getCurCode(), "1"));
+						item.setAmountLoc(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
+						item.setAmountDiscountLoc(item.getAmountLoc());
+					}
+					feeCenterListSum.add(item);
 				}
 				//主单应加上分单费用
 				if ("MM".equals(bills.getBillType())) {
@@ -2170,17 +2114,15 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 							.eq(FeeCenter::getIsDeleted, 0)
 							.in(FeeCenter::getPid, billIds));
 						for (Bills item : details) {
-
 							BigDecimal amountDrMH = new BigDecimal("0.00");
 							BigDecimal amountCrMH = new BigDecimal("0.00");
-							BigDecimal amountProfitMH = new BigDecimal("0.00");
+							BigDecimal amountProfitMH;
 							BigDecimal amountDrUsdMH = new BigDecimal("0.00");
 							BigDecimal amountCrUsdMH = new BigDecimal("0.00");
-							BigDecimal amountProfitUsdMH = new BigDecimal("0.00");
+							BigDecimal amountProfitUsdMH;
 							BigDecimal amountDrLocMH = new BigDecimal("0.00");
 							BigDecimal amountCrLocMH = new BigDecimal("0.00");
-							BigDecimal amountProfitLocMH = new BigDecimal("0.00");
-
+							BigDecimal amountProfitLocMH;
 							item.setUpdateUserName(AuthUtil.getUserName());
 							item.setUpdateTime(new Date());
 							item.setUpdateUser(AuthUtil.getUserId());
@@ -2191,74 +2133,47 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 							}
 							item.setBillDate(date1);
 							if (!feeCenterListMH.isEmpty()) {
-								List<FeeCenter> feeCenterListDMH = feeCenterListMH.stream().filter(e -> e.getDc().equals("D")
-									&& item.getId().equals(e.getPid())).collect(Collectors.toList());
-								if (!feeCenterListDMH.isEmpty()) {
-									for (FeeCenter itemMH : feeCenterListDMH) {
-										itemMH.setEtd(bills.getEtd());
-										itemMH.setEta(bills.getEta());
-										if ("USD".equals(itemMH.getCurCode())) {
-											amountCrUsd = amountCrUsd.add(itemMH.getAmount());
-											amountCrUsdMH = amountCrUsdMH.add(itemMH.getAmount());
-										} else if ("CNY".equals(itemMH.getCurCode())) {
-											amountCr = amountCr.add(itemMH.getAmount());
-											amountCrMH = amountCrMH.add(itemMH.getAmount());
-										} else {
-											BigDecimal usd = itemMH.getAmount().multiply(exrateDUsd);
-											amountCrUsd = amountCrUsd.add(usd);
-											amountCrUsdMH = amountCrUsdMH.add(usd);
-										}
-										if ("USD".equals(itemMH.getCurCode())) {
-											itemMH.setExrate(exrateDUsd);
-											itemMH.setAmountNetLoc(itemMH.getAmountNet().multiply(exrateDUsd));
-											itemMH.setAmountTaxLoc(itemMH.getAmountTax().multiply(exrateDUsd));
-											itemMH.setAmountLoc(itemMH.getAmount().multiply(exrateDUsd));
-											itemMH.setAmountDiscountLoc(itemMH.getAmount().multiply(exrateDUsd));
-										}
-										feeCenterListSum.add(itemMH);
-									}
-								}
-								List<FeeCenter> feeCenterListCMH = feeCenterListMH.stream().filter(e -> e.getDc().equals("C")
-									&& item.getId().equals(e.getPid())).collect(Collectors.toList());
-								if (!feeCenterListCMH.isEmpty()) {
-									for (FeeCenter itemMH : feeCenterListCMH) {
-										itemMH.setEtd(bills.getEtd());
-										itemMH.setEta(bills.getEta());
-										if ("USD".equals(itemMH.getCurCode())) {
-											amountDrUsd = amountDrUsd.add(itemMH.getAmount());
-											amountDrUsdMH = amountDrUsdMH.add(itemMH.getAmount());
-										} else if ("CNY".equals(itemMH.getCurCode())) {
+								for (FeeCenter itemMH : feeCenterListMH) {
+									itemMH.setEtd(bills.getEtd());
+									itemMH.setEta(bills.getEta());
+									if ("D".equals(itemMH.getDc())){
+										if (exrateType.equals(itemMH.getCurCode())) {
 											amountDr = amountDr.add(itemMH.getAmount());
 											amountDrMH = amountDrMH.add(itemMH.getAmount());
+											amountDrLoc = amountDrLoc.add(itemMH.getAmount());
+											amountDrLocMH = amountDrLocMH.add(itemMH.getAmount());
 										} else {
-											BigDecimal usd = itemMH.getAmount().multiply(exrateCUsd);
-											amountDrUsd = amountDrUsd.add(usd);
-											amountDrUsdMH = amountDrUsdMH.add(usd);
+											amountDrUsd = amountDrUsd.add(itemMH.getAmount());
+											amountDrUsdMH = amountDrUsdMH.add(itemMH.getAmount());
+											amountDrLoc = amountDrLoc.add(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmount(), itemMH.getCurCode(), "1"));
+											amountDrLocMH = amountDrLocMH.add(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmount(), itemMH.getCurCode(), "1"));
 										}
-										if ("USD".equals(itemMH.getCurCode())) {
-											itemMH.setExrate(exrateCUsd);
-											itemMH.setAmountNetLoc(itemMH.getAmountNet().multiply(exrateCUsd));
-											itemMH.setAmountTaxLoc(itemMH.getAmountTax().multiply(exrateCUsd));
-											itemMH.setAmountLoc(itemMH.getAmount().multiply(exrateCUsd));
-											itemMH.setAmountDiscountLoc(itemMH.getAmount().multiply(exrateCUsd));
+									}else{
+										if (exrateType.equals(itemMH.getCurCode())) {
+											amountCr = amountCr.add(itemMH.getAmount());
+											amountCrMH = amountCrMH.add(itemMH.getAmount());
+											amountCrLoc = amountCrLoc.add(itemMH.getAmount());
+											amountCrLocMH = amountCrLocMH.add(itemMH.getAmount());
+										} else {
+											amountCrUsd = amountCrUsd.add(itemMH.getAmount());
+											amountCrUsdMH = amountCrUsdMH.add(itemMH.getAmount());
+											amountCrLoc = amountCrLoc.add(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmount(), itemMH.getCurCode(), "1"));
+											amountCrLocMH = amountCrLocMH.add(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmount(), itemMH.getCurCode(), "1"));
 										}
-										feeCenterListSum.add(itemMH);
 									}
+									if (!exrateType.equals(itemMH.getCurCode())) {
+										itemMH.setExrate(currencyUtils.obtainExrate(itemMH.getDc(), curExrateList, itemMH.getCurCode(), "1"));
+										itemMH.setAmountNetLoc(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmountNet(), itemMH.getCurCode(), "1"));
+										itemMH.setAmountTaxLoc(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmountTax(), itemMH.getCurCode(), "1"));
+										itemMH.setAmountLoc(currencyUtils.converter(itemMH.getDc(), curExrateList, itemMH.getAmount(), itemMH.getCurCode(), "1"));
+										itemMH.setAmountDiscountLoc(itemMH.getAmountLoc());
+									}
+									feeCenterListSum.add(itemMH);
 								}
 							}
 							//利润 = 收 - 付
 							amountProfitMH = amountDrMH.subtract(amountCrMH);
 							amountProfitUsdMH = amountDrUsdMH.subtract(amountCrUsdMH);
-							if (amountDrUsdMH.compareTo(new BigDecimal("0.00")) != 0) {
-								amountDrLocMH = amountDrLocMH.add(amountDrUsdMH.multiply(exrateDUsd).add(amountDrMH));
-							} else {
-								amountDrLocMH = amountDrLocMH.add(amountDrMH);
-							}
-							if (amountCrUsdMH.compareTo(new BigDecimal("0.00")) != 0) {
-								amountCrLocMH = amountCrLocMH.add(amountCrUsdMH.multiply(exrateCUsd).add(amountCrMH));
-							} else {
-								amountCrLocMH = amountCrLocMH.add(amountCrMH);
-							}
 							amountProfitLocMH = amountDrLocMH.subtract(amountCrLocMH);
 							item.setAmountDr(amountDrMH);
 							item.setAmountCr(amountCrMH);
@@ -2282,13 +2197,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					if (details != null) {
 						BigDecimal amountDrM = new BigDecimal("0.00");
 						BigDecimal amountCrM = new BigDecimal("0.00");
-						BigDecimal amountProfitM = new BigDecimal("0.00");
+						BigDecimal amountProfitM;
 						BigDecimal amountDrUsdM = new BigDecimal("0.00");
 						BigDecimal amountCrUsdM = new BigDecimal("0.00");
-						BigDecimal amountProfitUsdM = new BigDecimal("0.00");
+						BigDecimal amountProfitUsdM;
 						BigDecimal amountDrLocM = new BigDecimal("0.00");
 						BigDecimal amountCrLocM = new BigDecimal("0.00");
-						BigDecimal amountProfitLocM = new BigDecimal("0.00");
+						BigDecimal amountProfitLocM;
 						amountDrM = amountDrM.add(details.getAmountDr());
 						amountCrM = amountCrM.add(details.getAmountCr());
 						amountDrUsdM = amountDrUsdM.add(details.getAmountDrUsd());
@@ -2302,7 +2217,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						List<Bills> billsLists = billsList.stream().filter(e -> !e.getId().equals(bills.getId())).collect(Collectors.toList());
 						if (!billsLists.isEmpty()) {
 							amountDrM = amountDrM.add(billsLists.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+							amountDrLocM = amountDrLocM.add(billsLists.stream().map(Bills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 							amountCrM = amountCrM.add(billsLists.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+							amountCrLocM = amountCrLocM.add(billsLists.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 							amountDrUsdM = amountDrUsdM.add(billsLists.stream().map(Bills::getAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 							amountCrUsdM = amountCrUsdM.add(billsLists.stream().map(Bills::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						}
@@ -2313,8 +2230,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						//利润 = 收 - 付
 						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);
 						amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 						details.setAmountDr(amountDrM);
 						details.setAmountCr(amountCrM);
@@ -2331,16 +2246,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				//利润 = 收 - 付
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-				if (amountDrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-					amountDrLoc = amountDrLoc.add(amountDrUsd.multiply(exrateDUsd).add(amountDr));
-				} else {
-					amountDrLoc = amountDrLoc.add(amountDr);
-				}
-				if (amountCrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-					amountCrLoc = amountCrLoc.add(amountCrUsd.multiply(exrateDUsd).add(amountCr));
-				} else {
-					amountCrLoc = amountCrLoc.add(amountCr);
-				}
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				bills.setAmountDr(amountDr);
 				bills.setAmountCr(amountCr);
@@ -2585,8 +2490,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal amountProfitLoc;
 
 		Date date = new Date();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
-
 		//主单应加上分单费用
 		if ("MM".equals(billsJkNew.getBillType()) && ObjectUtils.isNotNull(billsJkNew.getId())) {
 			List<Bills> details = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
@@ -2656,11 +2559,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		//利润 = 收 - 付
 		amountProfit = new BigDecimal("0.00").subtract(amountCr);
 		amountProfitUsd = new BigDecimal("0.00").subtract(amountCrUsd);
-		if (amountCrUsd.compareTo(new BigDecimal("0.00")) != 0) {
-			amountCrLoc = amountCrLoc.add(amountCrUsd.multiply(exrateC)).add(amountCr);
-		} else {
-			amountCrLoc = amountCrLoc.add(amountCr);
-		}
 		amountProfitLoc = new BigDecimal("0.00").subtract(amountCrLoc);
 		billsJkNew.setAmountCr(billsJkNew.getAmountCr().add(amountCr));
 		billsJkNew.setAmountProfit(billsJkNew.getAmountProfit().add(amountProfit));
@@ -2838,8 +2736,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal amountProfitUsd = new BigDecimal("0.00");
 		BigDecimal amountCrLoc = new BigDecimal("0.00");
 		BigDecimal amountProfitLoc = new BigDecimal("0.00");
-		Date date = new Date();
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
 		//应收
 		int statusD = 0;
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
@@ -2849,6 +2745,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(FeeCenter::getCorpId, billsJk.getForeignAgencyId())
 			.eq(FeeCenter::getDc, "D")
 		);
+		Date date = new Date();
+		String exrateType = currencyUtils.standardCurrency();
+		List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 		if (!feeCenterList.isEmpty()) {
 			statusD += 1;
 			for (FeeCenter item : feeCenterList) {
@@ -2874,11 +2773,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				// 金额
 				BigDecimal amount = item.getAmount();
 				//判断是否是本位币
-				if ("CNY".equals(item.getCurCode())) {
+				if (exrateType.equals(item.getCurCode())) {
 					item.setAmountLoc(amount);
 					amountCr = amountCr.add(item.getAmount());
 				} else {
-					item.setAmountLoc(amount.multiply(exrateC));
+					item.setAmountLoc(currencyUtils.converter(item.getDc(), curExrateList, amount, item.getCurCode(), "1"));
 					amountCrUsd = amountCrUsd.add(item.getAmount());
 				}
 				item.setAmount(amount);

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

@@ -23,9 +23,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.service.IBCorpsService;
-import org.springblade.los.basic.cur.service.IBCurrencyService;
+import org.springblade.los.basic.cur.entity.BCurExrate;
 import org.springblade.los.basic.fees.entity.BFees;
 import org.springblade.los.basic.fees.entity.FeesTemplateItems;
 import org.springblade.los.basic.fees.entity.FeesTemplateSonItems;
@@ -74,8 +75,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final AmendsMapper amendsMapper;
 
-	private final IBCurrencyService bCurrencyService;
-
 	private final IBCorpsService bCorpsService;
 
 	private final IPreContainersService preContainersService;
@@ -90,6 +89,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final IBFeesService bFeesService;
 
+	private final CurrencyUtils currencyUtils;
+
 	@Override
 	public IPage<FeeCenterVO> selectFeeCenterPage(IPage<FeeCenterVO> page, FeeCenterVO feeCenter) {
 		return page.setRecords(baseMapper.selectFeeCenterPage(page, feeCenter));
@@ -118,6 +119,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				feeCenter.setShortName(corps.getShortName());
 			}
 		}
+		String exrateType = currencyUtils.standardCurrency();
+		List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1");
 		if (feeCenter.getId() == null) {
 			feeCenter.setCreateTime(new Date());
 			feeCenter.setCreateUser(AuthUtil.getUserId());
@@ -139,10 +142,10 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		feeCenter.setPrice(ObjectUtils.isNotNull(feeCenter.getPrice()) ? feeCenter.getPrice() : new BigDecimal("0.00"));
 		feeCenter.setStlTtlAmount(ObjectUtils.isNotNull(feeCenter.getStlTtlAmount()) ? feeCenter.getStlTtlAmount() : new BigDecimal("0.00"));
 		//判断是否是本位币
-		if ("CNY".equals(feeCenter.getCurCode())) {
+		if (exrateType.equals(feeCenter.getCurCode())) {
 			feeCenter.setAmountLoc(amount);
 		} else {
-			feeCenter.setAmountLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amount, "", "1"));
+			feeCenter.setAmountLoc(currencyUtils.converter(feeCenter.getDc(), curExrateList, feeCenter.getAmount(), feeCenter.getCurCode(), "1"));
 		}
 		feeCenter.setAmount(amount);
 		feeCenter.setUnsettledAmount(feeCenter.getAmount().subtract(feeCenter.getStlTtlAmount()));
@@ -182,8 +185,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				date = bills.getEta();
 			}
 		}
-		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
-		BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
+		String exrateType = currencyUtils.standardCurrency();
+		List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 		List<PreContainers> preContainers = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 			.eq(PreContainers::getIsDeleted, 0)
@@ -268,11 +271,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				feeCenter.setUnitNo(items.getUnitNo());
 				feeCenter.setPrice(items.getPrice());
 				feeCenter.setCurCode(items.getCurCode());
-				if (ObjectUtils.isNotNull(feeCenter.getCurCode()) && "D".equals(feeCenter.getCurCode())) {
-					feeCenter.setExrate(exrateD);
-				} else {
-					feeCenter.setExrate(exrateC);
-				}
+				feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList, feeCenter.getCurCode(), "1"));
 				if ("按箱型".equals(items.getQuantityRule())) {
 					if (preContainers.isEmpty()) {
 						text.append("费用:").append(items.getFeeCnName()).append("未找到集装箱信息!");
@@ -315,6 +314,15 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				if (ObjectUtils.isNull(feeCenter.getAmount())) {
 					feeCenter.setAmount(new BigDecimal("0"));
 				}
+				if (exrateType.equals(feeCenter.getCurCode())) {
+					feeCenter.setAmountLoc(feeCenter.getAmount());
+				} else {
+					if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
+						feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
+					} else {
+						feeCenter.setAmountLoc(new BigDecimal("0"));
+					}
+				}
 				list.add(feeCenter);
 			}
 		}
@@ -341,6 +349,20 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		}
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(list) && !list.isEmpty()) {
+			boolean status = false;
+			Bills bills = new Bills();
+			if ("SE".equals(list.get(0).getBusinessType()) || "SI".equals(list.get(0).getBusinessType())) {
+				bills = billsMapper.selectById(list.get(0).getPid());
+				status = true;
+			}
+			Date date;
+			if ("SE".equals(bills.getBusinessType())) {
+				date = bills.getEtd();
+			} else {
+				date = bills.getEta();
+			}
+			String exrateType = currencyUtils.standardCurrency();
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 			List<BCorps> bCorpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
 				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
 				.eq(BCorps::getIsDeleted, 0));
@@ -377,10 +399,10 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				feeCenter.setPrice(ObjectUtils.isNotNull(feeCenter.getPrice()) ? feeCenter.getPrice() : new BigDecimal("0.00"));
 				feeCenter.setStlTtlAmount(ObjectUtils.isNotNull(feeCenter.getStlTtlAmount()) ? feeCenter.getStlTtlAmount() : new BigDecimal("0.00"));
 				//判断是否是本位币
-				if ("CNY".equals(feeCenter.getCurCode())) {
+				if (exrateType.equals(feeCenter.getCurCode())) {
 					feeCenter.setAmountLoc(amount);
 				} else {
-					feeCenter.setAmountLoc(bCurrencyService.converterCny(feeCenter.getCurCode(), amount, "", "1"));
+					feeCenter.setAmountLoc(currencyUtils.converter(feeCenter.getDc(), curExrateList, feeCenter.getAmount(), feeCenter.getCurCode(), "1"));
 				}
 				feeCenter.setAmount(amount);
 				feeCenter.setUnsettledAmount(feeCenter.getAmount().subtract(feeCenter.getStlTtlAmount()));
@@ -402,8 +424,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			amountCr = list.stream().filter(e -> "C".equals(e.getDc()) && "CNY".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			amountCrUsd = list.stream().filter(e -> "C".equals(e.getDc()) && "USD".equals(e.getCurCode())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 
-			if ("SE".equals(list.get(0).getBusinessType()) || "SI".equals(list.get(0).getBusinessType())) {
-				Bills bills = billsMapper.selectById(list.get(0).getPid());
+			if (status) {
 				//主单应加上分单费用
 				if ("MM".equals(bills.getBillType())) {
 					List<Bills> details = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
@@ -425,13 +446,13 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					if (details != null) {
 						BigDecimal amountDrM = new BigDecimal("0.00");
 						BigDecimal amountCrM = new BigDecimal("0.00");
-						BigDecimal amountProfitM = new BigDecimal("0.00");
+						BigDecimal amountProfitM;
 						BigDecimal amountDrUsdM = new BigDecimal("0.00");
 						BigDecimal amountCrUsdM = new BigDecimal("0.00");
-						BigDecimal amountProfitUsdM = new BigDecimal("0.00");
+						BigDecimal amountProfitUsdM;
 						BigDecimal amountDrLocM = new BigDecimal("0.00");
 						BigDecimal amountCrLocM = new BigDecimal("0.00");
-						BigDecimal amountProfitLocM = new BigDecimal("0.00");
+						BigDecimal amountProfitLocM;
 						BigDecimal quantityM = new BigDecimal("0.00");
 						BigDecimal grossWeightM = new BigDecimal("0.00");
 						BigDecimal measurementM = new BigDecimal("0.00");
@@ -441,22 +462,20 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 							.eq(FeeCenter::getPid, details.getId()));
 						for (FeeCenter item : feeCenters) {
 							if ("C".equals(item.getDc())) {
-								if ("USD".equals(item.getCurCode())) {
-									amountCrUsdM = amountCrUsdM.add(item.getAmount());
-								} else if ("CNY".equals(item.getCurCode())) {
+								if (exrateType.equals(item.getCurCode())){
 									amountCrM = amountCrM.add(item.getAmount());
-								} else {
-									BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
-									amountCrUsdM = amountCrUsdM.add(usd);
+									amountCrLocM = amountCrLocM.add(item.getAmount());
+								}else{
+									amountCrUsdM = amountCrUsdM.add(item.getAmount());
+									amountCrLocM = amountCrLocM.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 								}
 							} else {
-								if ("USD".equals(item.getCurCode())) {
-									amountDrUsdM = amountDrUsdM.add(item.getAmount());
-								} else if ("CNY".equals(item.getCurCode())) {
+								if (exrateType.equals(item.getCurCode())){
 									amountDrM = amountDrM.add(item.getAmount());
-								} else {
-									BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
-									amountDrUsdM = amountDrUsdM.add(usd);
+									amountDrLocM = amountDrLocM.add(item.getAmount());
+								}else{
+									amountDrUsdM = amountDrUsdM.add(item.getAmount());
+									amountDrLocM = amountDrLocM.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
 								}
 							}
 						}
@@ -464,7 +483,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 							.eq(Bills::getTenantId, AuthUtil.getTenantId())
 							.eq(Bills::getIsDeleted, 0)
 							.eq(Bills::getMasterId, details.getId()));
-						List<Bills> billsLists = billsList.stream().filter(e -> !e.getId().equals(bills.getId())).collect(Collectors.toList());
+						Bills finalBills = bills;
+						List<Bills> billsLists = billsList.stream().filter(e -> !e.getId().equals(finalBills.getId())).collect(Collectors.toList());
 						if (!billsLists.isEmpty()) {
 							amountDrM = amountDrM.add(billsLists.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 							amountCrM = amountCrM.add(billsLists.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -485,8 +505,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						//利润 = 收 - 付
 						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);
 						amountProfitLocM = amountDrLocM.subtract(amountCrLocM);
 						details.setAmountDr(amountDrM);
 						details.setAmountCr(amountCrM);
@@ -506,8 +524,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				//利润 = 收 - 付
 				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);
 				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 				bills.setAmountDr(amountDr);
 				bills.setAmountCr(amountCr);
@@ -542,8 +558,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		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");
+			String exrateType = currencyUtils.standardCurrency();
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 			for (FeeCenter feeCenter : list) {
 				if (feeCenter.getId() == null) {
 					feeCenter.setCreateTime(new Date());
@@ -588,23 +604,16 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				amount = amount.add(amountNet.add(amountTax).subtract(feeCenter.getAmountDiscount()));
 
 				//判断是否是本位币
-				if ("CNY".equals(feeCenter.getCurCode())) {
+				if (exrateType.equals(feeCenter.getCurCode())) {
 					feeCenter.setAmountNetLoc(amountNet);
 					feeCenter.setAmountTaxLoc(amountTax);
 					feeCenter.setAmountLoc(amount);
 					feeCenter.setAmountDiscountLoc(amount);
 				} else {
-					if ("D".equals(feeCenter.getDc())) {
-						feeCenter.setAmountNetLoc(amountNet.multiply(exrateD));
-						feeCenter.setAmountTaxLoc(amountTax.multiply(exrateD));
-						feeCenter.setAmountLoc(amount.multiply(exrateD));
-						feeCenter.setAmountDiscountLoc(amount.multiply(exrateD));
-					} else {
-						feeCenter.setAmountNetLoc(amountNet.multiply(exrateC));
-						feeCenter.setAmountTaxLoc(amountTax.multiply(exrateC));
-						feeCenter.setAmountLoc(amount.multiply(exrateC));
-						feeCenter.setAmountDiscountLoc(amount.multiply(exrateC));
-					}
+					feeCenter.setAmountNetLoc(currencyUtils.converter(feeCenter.getDc(), curExrateList, amountNet, feeCenter.getCurCode(), "1"));
+					feeCenter.setAmountTaxLoc(currencyUtils.converter(feeCenter.getDc(), curExrateList, amountTax, feeCenter.getCurCode(), "1"));
+					feeCenter.setAmountLoc(currencyUtils.converter(feeCenter.getDc(), curExrateList, amount, feeCenter.getCurCode(), "1"));
+					feeCenter.setAmountDiscountLoc(feeCenter.getAmountLoc());
 				}
 				feeCenter.setAmountNet(amountNet);
 				feeCenter.setAmountTax(amountTax);
@@ -754,6 +763,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			BigDecimal amountC = new BigDecimal("0.00");
 			BigDecimal amountDUsd = new BigDecimal("0.00");
 			BigDecimal amountCUsd = new BigDecimal("0.00");
+			BigDecimal amountDLoc = new BigDecimal("0.00");
+			BigDecimal amountCLoc = new BigDecimal("0.00");
 			Date date;
 			if ("BUY".equals(tradingBox.getType()) || "SELL".equals(tradingBox.getType())) {
 				date = tradingBox.getPurchaseDate();
@@ -763,20 +774,24 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			} else {
 				date = new Date();
 			}
-			BigDecimal exrateD = bCurrencyService.getCnyExrate(date, "USD", "D", "1");
-			BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
+			String exrateType = currencyUtils.standardCurrency();
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 			for (FeeCenter feeCenter : list) {
-				if ("CNY".equals(feeCenter.getCurCode())) {
+				if (exrateType.equals(feeCenter.getCurCode())) {
 					if ("D".equals(feeCenter.getDc())) {
 						amountD = amountD.add(feeCenter.getAmount());
+						amountDLoc = amountDLoc.add(feeCenter.getAmount());
 					} else {
 						amountC = amountC.add(feeCenter.getAmount());
+						amountCLoc = amountCLoc.add(feeCenter.getAmount());
 					}
 				} else {
 					if ("D".equals(feeCenter.getDc())) {
 						amountDUsd = amountDUsd.add(feeCenter.getAmountLoc());
+						amountDLoc = amountDLoc.add(currencyUtils.converter(feeCenter.getDc(), curExrateList, feeCenter.getAmount(), feeCenter.getCurCode(), "1"));
 					} else {
 						amountCUsd = amountCUsd.add(feeCenter.getAmountLoc());
+						amountCLoc = amountCLoc.add(currencyUtils.converter(feeCenter.getDc(), curExrateList, feeCenter.getAmount(), feeCenter.getCurCode(), "1"));
 					}
 				}
 				feeCenter.setPid(tradingBox.getId());
@@ -826,9 +841,9 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			tradingBox.setAmountDUsd(tradingBox.getAmountDUsd().add(amountDUsd));
 			tradingBox.setProfit(amountD.subtract(amountC));
 			tradingBox.setProfitUsd(amountDUsd.subtract(amountCUsd));
-			BigDecimal totalAmountD = amountD.add(amountDUsd.multiply(exrateD));
+			BigDecimal totalAmountD = amountD.add(amountDLoc);
 			tradingBox.setTotalAmountD(tradingBox.getTotalAmountD().add(totalAmountD));
-			BigDecimal totalAmountC = amountC.add(amountCUsd.multiply(exrateC));
+			BigDecimal totalAmountC = amountC.add(amountCLoc);
 			tradingBox.setTotalAmountC(tradingBox.getTotalAmountC().add(totalAmountC));
 			tradingBox.setTotalProfit(totalAmountD.subtract(totalAmountC));
 			tradingBoxMapper.updateById(tradingBox);
@@ -912,7 +927,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					date = bills.getEta();
 				}
 			}
-			BigDecimal exrate = bCurrencyService.getCnyExrate(date, "USD", dc, "1");
+			String exrateType = currencyUtils.standardCurrency();
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 			int count = 1;
 			for (FeesTemplateSonItems items : sonItemsList) {
 				FeesTemplateItems templateItems = feesTemplateItemsList.stream().filter(e -> e.getId().equals(items.getPpid()))
@@ -998,7 +1014,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				feeCenter.setUnitNo(items.getUnitNo());
 				feeCenter.setPrice(items.getSalesPrice());
 				feeCenter.setCurCode(items.getCurCode());
-				feeCenter.setExrate(exrate);
+				feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList,  feeCenter.getCurCode(), "1"));
 				if ("按箱型".equals(items.getQuantityRule())) {
 					if (preContainers.isEmpty()) {
 						text.append("费用:").append(items.getFeeCnName()).append("未找到集装箱信息!");
@@ -1041,6 +1057,15 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				if (ObjectUtils.isNull(feeCenter.getAmount())) {
 					feeCenter.setAmount(new BigDecimal("0"));
 				}
+				if (exrateType.equals(feeCenter.getCurCode())) {
+					feeCenter.setAmountLoc(feeCenter.getAmount());
+				} else {
+					if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
+						feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
+					} else {
+						feeCenter.setAmountLoc(new BigDecimal("0"));
+					}
+				}
 				list.add(feeCenter);
 			}
 		}
@@ -1128,7 +1153,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					date = bills.getEta();
 				}
 			}
-			BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
+			String exrateType = currencyUtils.standardCurrency();
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1");
 			int count = 1;
 			for (RouteCostItem items : routeCostItemList) {
 				FeeCenter feeCenter = new FeeCenter();
@@ -1181,7 +1207,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					feeCenter.setPrice(items.getOceanFreight());
 				}
 				feeCenter.setCurCode(items.getCurCode());
-				feeCenter.setExrate(exrateC);
+				feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList,  feeCenter.getCurCode(), "1"));
 				Integer quantity = preContainers.stream().filter(e -> items.getBoxType().equals(e.getCntrTypeCode())).map(PreContainers::getQuantity).reduce(0, Integer::sum);
 				if (quantity == 0) {
 					continue;
@@ -1191,6 +1217,15 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				if (ObjectUtils.isNull(feeCenter.getAmount())) {
 					feeCenter.setAmount(new BigDecimal("0"));
 				}
+				if (exrateType.equals(feeCenter.getCurCode())) {
+					feeCenter.setAmountLoc(feeCenter.getAmount());
+				} else {
+					if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
+						feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
+					} else {
+						feeCenter.setAmountLoc(new BigDecimal("0"));
+					}
+				}
 				list.add(feeCenter);
 			}
 		}

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

@@ -23,6 +23,7 @@ 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.CurrencyUtils;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
@@ -90,6 +91,8 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 
 	private final FinVouchersItemsMapper finVouchersItemsMapper;
 
+	private final CurrencyUtils currencyUtils;
+
 	@Override
 	public IPage<FinAccBillsVO> selectFinAccBillsPage(IPage<FinAccBillsVO> page, FinAccBillsVO finAccBills) {
 		return page.setRecords(baseMapper.selectFinAccBillsPage(page, finAccBills));
@@ -174,14 +177,15 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 				billsMapper.updateById(item);
 			}
 		}
+		String exrateType = currencyUtils.standardCurrency();
 		for (FeeCenter item : reducelList) {
 			BigDecimal amountCNY = finAccBills.getFeeCenterList().stream()
 				.filter(e -> e.getBillKey().equals(item.getBillKey()) && item.getCurCode().equals(e.getCurCode())
-					&& "CNY".equals(e.getCurCode()))
+					&& exrateType.equals(e.getCurCode()))
 				.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 			BigDecimal amountUSD = finAccBills.getFeeCenterList().stream()
 				.filter(e -> e.getBillKey().equals(item.getBillKey()) && item.getCurCode().equals(e.getCurCode())
-					&& "USD".equals(e.getCurCode()))
+					&& !exrateType.equals(e.getCurCode()))
 				.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 			FinAccBills data = new FinAccBills();
 			data.setCreateTime(new Date());
@@ -264,7 +268,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 			data.setPodNamePrint(finAccBills.getPodNamePrint());
 			BigDecimal amountDrLoc = new BigDecimal("0.00");
 			BigDecimal amountCrLoc = new BigDecimal("0.00");
-			if ("CNY".equals(item.getCurCode())) {
+			if (exrateType.equals(item.getCurCode())) {
 				if ("D".equals(item.getDc())) {
 					data.setAmountDr(amountCNY);
 					data.setAmountCr(new BigDecimal("0.00"));

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

@@ -561,7 +561,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			List<Map<String, Object>> mapList = billsMapper.trend(AuthUtil.getTenantId(), deptId,
 				type, date, busType, userId);
 			return R.data(mapList);
-		} else if ("OW-F,OW-N".equals(type)) {
+		} else if ("OW-F,OW-N".contains(type)) {
 			List<Map<String, Object>> mapList = tradingBoxService.trend(AuthUtil.getTenantId(),
 				type, date);
 			return R.data(mapList);

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff