Browse Source

Merge remote-tracking branch 'origin/dev' into dev

liyuan 2 months ago
parent
commit
a4e77235fc

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

@@ -2017,6 +2017,17 @@ public class Bills implements Serializable {
 	private Date lockedDate;
 
 	/**
+	 * 客服
+	 */
+	@ApiModelProperty(value = "客服")
+	private Long customerServiceId;
+	/**
+	 * 客服
+	 */
+	@ApiModelProperty(value = "客服")
+	private String customerServiceName;
+
+	/**
 	 * 临时来源id
 	 */
 	@TableField(exist = false)
@@ -2382,6 +2393,11 @@ public class Bills implements Serializable {
 	private String payableAt;
 
 	/**
+	 * 船名航次
+	 */
+	@TableField(exist = false)
+	private String vesselVoyageNo;
+	/**
 	 * 业务来源 报表中 dictionaryConversion 函数更改了 srcType 值
 	 */
 	@TableField(exist = false)

+ 81 - 25
blade-service/blade-los/src/main/java/org/springblade/los/Util/BigDecimalUtils.java

@@ -8,54 +8,110 @@ import java.math.BigDecimal;
  */
 public class BigDecimalUtils {
 
+	private static final String[] units = {
+		"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
+		"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen",
+		"Eighteen", "Nineteen"
+	};
+
+	private static final String[] tens = {
+		"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
+	};
+
 	/**
 	 * 数字转英文大写
 	 *
 	 * @param number 数字
 	 * @return 结果
 	 */
-	public static String convertToEnglish(BigDecimal number) {
+	public static String convertToEnglish(BigDecimal number, Boolean toUpper) {
 		BigDecimal integerPart = number.setScale(0, BigDecimal.ROUND_DOWN);
 		String decimal = number.toString();
+		String res = "";
 		if (decimal.indexOf(".") > 0) {
 			BigDecimal decimalAmount = new BigDecimal(decimal.substring(decimal.indexOf(".") + 1));
-			long integralPart = integerPart.longValue();
+			int integralPart = integerPart.intValue();
 			String uppercaseInteger = convert(integralPart).trim();
 			if (new BigDecimal("0.00").compareTo(decimalAmount) != 0) {
-				uppercaseInteger = uppercaseInteger + " POINT " + convert(decimalAmount.longValue()).trim();
+				uppercaseInteger = uppercaseInteger + " POINT " + convert(decimalAmount.intValue()).trim();
 			}
-			return uppercaseInteger;
+			res = uppercaseInteger;
 		} else {
-			long integralPart = integerPart.longValue();
-            return convert(integralPart).trim();
+			int integralPart = integerPart.intValue();
+			res = convert(integralPart).trim();
 		}
+
+		return  toUpper==true ? res.toUpperCase() : res;
 	}
 
-	private static String convert(long number) {
-		if (number == 0) return "ZERO";
+	public static String convertToEnglish(BigDecimal number) {
+		return convertToEnglish(number, true);
+	}
 
-		StringBuilder result = new StringBuilder();
+	// private static String convert(long number) {
+	// 	if (number == 0) return "ZERO";
+	//
+	// 	StringBuilder result = new StringBuilder();
+	//
+	// 	if ((number / 1000) > 0) {
+	// 		result.append(convert(number / 1000)).append(" THOUSAND ");
+	// 		number %= 1000;
+	// 	}
+	//
+	// 	if ((number / 100) > 0) {
+	// 		result.append(convert(number / 100)).append(" HUNDRED ");
+	// 		number %= 100;
+	// 	}
+	//
+	// 	if (number > 0) {
+	// 		if (number < 20) {
+	// 			result.append(MagicValues.units[(int) number]).append(" ");
+	// 		} else {
+	// 			result.append(MagicValues.tens[(int) number / 10]).append(" ");
+	// 			if (number % 10 > 0) {
+	// 				result.append(MagicValues.units[(int) number % 10]).append(" ");
+	// 			}
+	// 		}
+	// 	}
+	// 	return result.toString();
+	// }
 
-		if ((number / 1000) > 0) {
-			result.append(convert(number / 1000)).append(" THOUSAND ");
-			number %= 1000;
+	private static String convert(int number) {
+		if (number == 0) {
+			return "Zero";
 		}
 
-		if ((number / 100) > 0) {
-			result.append(convert(number / 100)).append(" HUNDRED ");
-			number %= 100;
+		return convertToWords(number, false).trim();
+	}
+
+	// 注意:此实现最多支持到十亿(Integer的最大值约为20亿,所以足够处理int范围的正数)。
+	// 如果需要处理更大的数字(如Long类型),可以扩展代码添加更大的单位(Trillion等)
+	private static String convertToWords(int number, Boolean pre) {
+		if (number < 0) {
+			return "Minus " + convertToWords(-number, pre);
 		}
 
-		if (number > 0) {
-			if (number < 20) {
-				result.append(MagicValues.units[(int) number]).append(" ");
-			} else {
-				result.append(MagicValues.tens[(int) number / 10]).append(" ");
-				if (number % 10 > 0) {
-					result.append(MagicValues.units[(int) number % 10]).append(" ");
-				}
-			}
+		if (number < 20) {
+			return units[number];
 		}
-		return result.toString();
+
+		if (number < 100) {
+			String S = tens[number / 10] + ((number % 10 != 0) ? " " + units[number % 10] : "");
+			return pre == true && !S.isEmpty() ? "And " + S : S;
+		}
+
+		if (number < 1000) {
+			return units[number / 100] + " Hundred" + ((number % 100 != 0) ? " " + convertToWords(number % 100, true) : "");
+		}
+
+		if (number < 1000000) {
+			return convertToWords(number / 1000, false) + " Thousand" + ((number % 1000 != 0) ? " " + convertToWords(number % 1000, false) : "");
+		}
+
+		if (number < 1000000000) {
+			return convertToWords(number / 1000000, false) + " Million" + ((number % 1000000 != 0) ? " " + convertToWords(number % 1000000, false) : "");
+		}
+
+		return convertToWords(number / 1000000000, false) + " Billion" + ((number % 1000000000 != 0) ? " " + convertToWords(number % 1000000000, false) : "");
 	}
 }

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

@@ -1720,9 +1720,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (bills != null) {
 				this.dictionaryConversion(bills);
 				this.assignmentSeaBillsDetail(bills);
-//				bills.setFM(MagicValues.FM);
-				bills.setCapitalLetters("SAY " + BigDecimalUtils.convertToEnglish(bills.getQuantity()) + " " + bills.getPackingUnit() + " ONLY.");
-				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+
 				BigDecimal boxWeightSum = BigDecimal.ZERO;
 				List<ContainersReports> containersReportsList = new ArrayList<>();
 				List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
@@ -1765,6 +1763,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						cntrSealNo.append(item.getCntrNo()).append("/").append(item.getSealNo()).append("  ");
 					}
 				}
+
+				PrepareBills(bills, preContainersList, reportParams);
+
 				bills.setCntryString(text.toString());
 				bills.setCntrSealNo(cntrSealNo.toString());
 				bills.setContainersReportsList(containersReportsList);
@@ -1798,13 +1799,6 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 				PrepareBills(bills, preContainersList, reportParams);
 
-//				bills.setFM(MagicValues.FM);
-				if("1".equals(bills.getCapitalLettersRule())){
-					bills.setCapitalLetters(bills.getQuantityCntrTypesDescr());
-				}else{
-					bills.setCapitalLetters("SAY " + BigDecimalUtils.convertToEnglish(bills.getQuantity()) + " " + bills.getPackingUnit() + " ONLY.");
-				}
-
 				StringBuilder text1 = new StringBuilder();
 				text1.append(bills.getQuantity()).append(System.lineSeparator());
 				text1.append(bills.getPackingUnit()).append(System.lineSeparator());
@@ -3217,9 +3211,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			if (bills != null) {
 				this.dictionaryConversion(bills);
 				this.assignmentSeaBillsDetail(bills);
-//				bills.setFM(MagicValues.FM);
-				bills.setCapitalLetters("SAY " + BigDecimalUtils.convertToEnglish(bills.getQuantity()) + " " + bills.getPackingUnit() + " ONLY.");
-				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
+
 				BigDecimal boxWeightSum = BigDecimal.ZERO;
 				List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
 					.eq(Containers::getTenantId, AuthUtil.getTenantId())
@@ -3251,6 +3243,9 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				}
 				bills.setCntryString(text.toString());
 				bills.setDept(dept);
+
+				PrepareBills(bills, preContainersList, reportParams);
+
 				map.put(MagicValues.DATA, bills);
 			} else {
 				map.put(MagicValues.DATA, null);
@@ -7609,31 +7604,21 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				if (cntrQtyInwords.length() > 0) {
 					cntrQtyInwords = new StringBuilder(cntrQtyInwords.substring(0, cntrQtyInwords.length() - 4));
 					cntrQtyInwords.append(" ONLY.");
-					bill.setQuantityCntrTypesDescr(cntrQtyInwords.toString());
+					bill.setQuantityCntrTypesDescr("SAY " + cntrQtyInwords.toString());
 				}else{
 					bill.setQuantityCntrTypesDescr("");
 				}
 			}
 
-			// 处理大唛头和大货描
-			/*
-			JsonNode jsMarks = RegularUtils.readJSONObject(reportParams, "marks");
-			if(ObjectUtils.isNotNull(jsMarks) && RegularUtils.readJSONBooleanValue(jsMarks, "enabled", false)){
-				String marks = ObjectUtils.isNotNull(bill.getMarks()) ? RegularUtils.trimRight(bill.getMarks()) : "";
-				List<String> marksList = null;
-				int lineLength = RegularUtils.readJSONIntValue(jsMarks, "lineLength", 0);
-				if(lineLength>0){
-					marksList = RegularUtils.reformatEDIText(marks, lineLength, false);
-				}else{
-					marksList = new ArrayList<>(Arrays.asList(marks.split("\n")));
-				}
-				int lineCount = RegularUtils.readJSONIntValue(jsMarks, "lineCount", 0);
-
+			if("1".equals(bill.getCapitalLettersRule())){
+				bill.setCapitalLetters(bill.getQuantityCntrTypesDescr());
+			}else{
+				bill.setCapitalLetters("SAY " + BigDecimalUtils.convertToEnglish(bill.getQuantity()) + " " + bill.getPackingUnit() + " ONLY.");
 			}
-			JsonNode jsGoodsDesc = RegularUtils.readJSONObject(reportParams, "goodsDesc,goodsDescr,CommodityDesc,CommodityDescr");
 
-			// bill.getCommodityDescr()
-			*/
+			String vslvoyNo = bill.getVesselEnName() + "/" + bill.getVoyageNo();
+			bill.setVesselCnName(vslvoyNo.trim());
+			bill.setVesselVoyageNo(vslvoyNo.trim());
 		}
 
 		return bill;

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

@@ -182,6 +182,9 @@ public class BillsController extends BladeController {
 				} else if (AuthUtil.getUserRole().contains("业务员")) {
 					lambdaQueryWrapper.and(i -> i.eq(Bills::getSrcId, AuthUtil.getUserId()).or()
 						.eq(Bills::getCreateUser, AuthUtil.getUserId()));
+				} else if (AuthUtil.getUserRole().contains("客服")) {
+					lambdaQueryWrapper.and(i -> i.eq(Bills::getCustomerServiceId, AuthUtil.getUserId()).or()
+						.eq(Bills::getCreateUser, AuthUtil.getUserId()));
 				} else {
 					lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
 				}

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

@@ -542,7 +542,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal teu = new BigDecimal("0.00");
 		StringBuilder boxTypeSum = new StringBuilder();
 		StringBuilder quantityCntrTypesDescr = new StringBuilder();
-		quantityCntrTypesDescr.append("SAY ");
 		if (ObjectUtils.isNull(bills.getCfsQuantity()) || bills.getCfsQuantity().compareTo(new BigDecimal("0.00")) == 0) {
 			if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
 				bills.setCfsMeasurement(new BigDecimal("0.00"));
@@ -603,7 +602,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				if (quantityCntrTypesDescr.length() > 0) {
 					quantityCntrTypesDescr = new StringBuilder(quantityCntrTypesDescr.substring(0, quantityCntrTypesDescr.length() - 4));
 					quantityCntrTypesDescr.append(" ONLY.");
-					bills.setQuantityCntrTypesDescr(quantityCntrTypesDescr.toString());
+					bills.setQuantityCntrTypesDescr("SAY " + quantityCntrTypesDescr.toString());
+				}else{
+					bills.setQuantityCntrTypesDescr("");
 				}
 				preContainersService.saveOrUpdateBatch(bills.getPreContainersList());
 				List<Long> idList = bills.getPreContainersList().stream().map(PreContainers::getId).collect(Collectors.toList());

+ 11 - 2
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -353,10 +354,18 @@ public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> imp
 				reportsList.add(item);
 			}
 			losClient.addBCurrencyList(reportsList);
-		}else if (type.contains("9")) {
+		} else if (type.contains("9")) {
+			String salesCompanyId = "1703929959275413506";
+			Dept dept1 = deptService.getOne(new LambdaQueryWrapper<Dept>()
+				.eq(Dept::getTenantId, tenantId)
+				.eq(Dept::getIsDeleted, 0)
+				.last("LIMIT 1"));
+			if (dept1 != null) {
+				salesCompanyId = dept1.getId() + "";
+			}
 			// 业务参数
 			List<ParamService> roleLinkedList = new ArrayList<>();
-			List<ParamService> roleList = paramServiceService.selectParamService(tenantId,"1703929959275413506");
+			List<ParamService> roleList = paramServiceService.selectParamService(tenantId, salesCompanyId);
 			for (ParamService item : roleList) {
 				item.setId(null);
 				item.setTenantId(tenantIdCopy);

+ 14 - 9
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

@@ -1344,12 +1344,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R submitWarehousing(OrderSubmitDto submitDto) {
 		List<OrderItemsVO> orderItemsList = submitDto.getItemsVOList();
-		//获取系统编号
-		R billNo = serialClient.getBillNo(submitDto.getBillType(), OrderTypeEnum.WOOD_HARVESTING_CLOUD.getType(), submitDto.getBillType());
-		if (!billNo.isSuccess()) {
-			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-			throw new Error("生成系统编号失败");
-		}
 		submitDto.setBillType(submitDto.getBillType());//业务类型
 		submitDto.setTradeType(OrderTypeEnum.WOOD_HARVESTING_CLOUD.getType());//类型
 		submitDto.setTenantId(AuthUtil.getTenantId());
@@ -1360,6 +1354,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			submitDto.setUpdateTime(new Date());
 			baseMapper.updateById(submitDto);
 		} else {
+			//获取系统编号
+			R billNo = serialClient.getBillNo(submitDto.getBillType(), OrderTypeEnum.WOOD_HARVESTING_CLOUD.getType(), submitDto.getBillType());
+			if (!billNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new Error("生成系统编号失败");
+			}
 			if (OrderTypeEnum.WAREHOUSING.getType().equals(submitDto.getBillType())) {
 				submitDto.setOrderNo(billNo.getData().toString());
 				submitDto.setOrgOrderNo(billNo.getData().toString());
@@ -2221,11 +2221,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						qRCode = qRCode.replace("/home/minio", "http://121.37.83.47");
 						item.setQrCode(qRCode);
 						item.setIsIssue(isIssue);
-						orderItemsMapper.updateById(item);
+//						orderItemsMapper.updateById(item);
 					} catch (IOException e) {
 						throw new SecurityException("生成码失败");
 					}
 				}
+				orderItemsService.updateBatchById(orderItems);
 			}
 		} else if (OrderTypeEnum.OUT_WAREHOUSING.getType().equals(type)) {
 			if ("app".equals(toolType)) {
@@ -2240,18 +2241,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				.eq(OrderItems::getPid, order.getId())
 				.eq(OrderItems::getTenantId, AuthUtil.getTenantId());
 			List<OrderItems> CKOrderItemsList = orderItemsMapper.selectList(CKOrderItemsLambdaQueryWrapper);
+			List<OrderItems> RkList = new ArrayList<>();
 			for (OrderItems orderItems : CKOrderItemsList) {
 				OrderItems Rk = new OrderItems();
 				Rk.setId(orderItems.getSrcItemId());
 				Rk.setIsIssue(isIssue);
 				Rk.setScanningComparison(scanningComparison);
 				Rk.setDeliveryDate(new Date());
+				RkList.add(Rk);
 				orderItems.setIsIssue(isIssue);
 				orderItems.setDeliveryDate(new Date());
 				orderItems.setScanningComparison(scanningComparison);
-				orderItemsMapper.updateById(Rk);
-				orderItemsMapper.updateById(orderItems);
+//				orderItemsMapper.updateById(Rk);
+//				orderItemsMapper.updateById(orderItems);
 			}
+			orderItemsService.updateBatchById(RkList);
+			orderItemsService.updateBatchById(CKOrderItemsList);
 		}
 		order.setStatus(status);
 		order.setUpdateUser(AuthUtil.getUserId());