Browse Source

2024年9月29日17:26:32

纪新园 1 year ago
parent
commit
d45ed4c232
16 changed files with 394 additions and 108 deletions
  1. 10 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java
  2. 40 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/DispatchVehicles.java
  3. 46 47
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  4. 12 5
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  5. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  6. 20 0
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/controller/IndexStatisticsController.java
  7. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/IStatisticAnalysisService.java
  8. 102 18
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java
  9. 36 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/DispatchVehiclesController.java
  10. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IDispatchVehiclesService.java
  11. 52 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.java
  12. 10 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/StorageServiceImpl.java
  13. 34 32
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceBankServiceImpl.java
  14. 4 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  15. 1 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/impl/StatisticsServiceImpl.java
  16. 7 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

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

@@ -16,7 +16,6 @@
  */
 package org.springblade.los.business.sea.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -219,6 +218,11 @@ public class PreContainers implements Serializable {
 	@ApiModelProperty(value = "单价")
 	private BigDecimal price;
 	/**
+	 * 金额
+	 */
+	@ApiModelProperty(value = "金额")
+	private BigDecimal amount;
+	/**
 	 * 查验类型
 	 */
 	@ApiModelProperty(value = "查验类型")
@@ -265,6 +269,11 @@ public class PreContainers implements Serializable {
 	 */
 	@ApiModelProperty(value = "是否已生成派车")
 	private String whetherDispatchVehicles;
+	/**
+	 * 币种
+	 */
+	@ApiModelProperty(value = "币种")
+	private String curCode;
 
 	/**
 	 * 1 派车  2 自提

+ 40 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/DispatchVehicles.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.los.trade.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -177,6 +179,7 @@ public class DispatchVehicles implements Serializable {
 	 * 返空时间
 	 */
 	@ApiModelProperty(value = "返空时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date returnDate;
 	/**
 	 * 返空场站
@@ -189,6 +192,11 @@ public class DispatchVehicles implements Serializable {
 	@ApiModelProperty(value = "返空场站")
 	private String returnCyName;
 	/**
+	 * 是否还箱
+	 */
+	@ApiModelProperty(value = "是否还箱")
+	private String whetherReturn;
+	/**
 	 * 箱号
 	 */
 	@ApiModelProperty(value = "箱号")
@@ -256,5 +264,37 @@ public class DispatchVehicles implements Serializable {
 	@ApiModelProperty(value = "商品类别")
 	private String goodsType;
 
+	/**
+	 * 查验/倒柜承运车队
+	 */
+	@ApiModelProperty(value = "查验/倒柜承运车队")
+	private Long inspectionFleetId;
+	/**
+	 * 查验/倒柜承运车队
+	 */
+	@ApiModelProperty(value = "查验/倒柜承运车队")
+	private String inspectionFleetName;
+	/**
+	 * 查验/倒柜车号
+	 */
+	@ApiModelProperty(value = "查验/倒柜车号")
+	private String inspectionLicenseNumber;
+	/**
+	 * 查验/倒柜姓名
+	 */
+	@ApiModelProperty(value = "查验/倒柜姓名")
+	private String inspectionFullName;
+	/**
+	 * 查验/倒柜联系方式
+	 */
+	@ApiModelProperty(value = "查验/倒柜联系方式")
+	private String inspectionContactInformation;
+
+	/**
+	 * 是否查验/倒柜
+	 */
+	@ApiModelProperty(value = "是否查验/倒柜")
+	private String whetherInspection;
+
 
 }

+ 46 - 47
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -3,7 +3,6 @@ package org.springblade.client.corps.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -337,45 +336,45 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 			List<Boolean> countList = new ArrayList<>();
 			String[] deptIds = SecureUtil.getDeptId().split(",");
 			data.forEach(e -> {
-				String type = e.getCorpsTypeName();
-				CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(type, AuthUtil.getTenantId());
-				if (corpsType != null) {
-					countList.add(true);
-					CorpsDesc corpsDesc = new CorpsDesc();
-					corpsDesc.setCname(e.getCname());
-					corpsDesc.setAttn(e.getAttn());
-					corpsDesc.setAttn(e.getAttn());
-					corpsDesc.setTel(e.getTel());
-					corpsDesc.setAddr(e.getAddr());
-					corpsDesc.setAccountBank(e.getAccountBank());
-					corpsDesc.setAccountName(e.getAccountName());
-					corpsDesc.setAccountNo(e.getAccountNo());
-					corpsDesc.setAccountBankFcy(e.getAccountBankFcy());
-					corpsDesc.setAccountNameFcy(e.getAccountNameFcy());
-					corpsDesc.setTenantId(AuthUtil.getTenantId());
-					corpsDesc.setAccountNoFcy(e.getAccountNoFcy());
-					corpsDesc.setEnname(e.getEnname());
-					corpsDesc.setCountry(e.getCountry());
-					corpsDesc.setGoodtypes(e.getGoodtypes());
-					if (StringUtil.isNotBlank(e.getCompanyName())) {
-						CorpsDesc company = baseMapper.selectCorpsDescCname(e.getCompanyName(), AuthUtil.getTenantId());
-						if (ObjectUtil.isNotEmpty(company)) {
-							corpsDesc.setBelongtocompany(String.valueOf(company.getId()));
-						} else {
-							throw new SecurityException("请输入正确的所属公司");
-						}
+				CorpsDesc corpsDesc = new CorpsDesc();
+				corpsDesc.setCname(e.getCname());
+				corpsDesc.setAttn(e.getAttn());
+				corpsDesc.setAttn(e.getAttn());
+				corpsDesc.setTel(e.getTel());
+				corpsDesc.setAddr(e.getAddr());
+				corpsDesc.setAccountBank(e.getAccountBank());
+				corpsDesc.setAccountName(e.getAccountName());
+				corpsDesc.setAccountNo(e.getAccountNo());
+				corpsDesc.setAccountBankFcy(e.getAccountBankFcy());
+				corpsDesc.setAccountNameFcy(e.getAccountNameFcy());
+				corpsDesc.setTenantId(AuthUtil.getTenantId());
+				corpsDesc.setAccountNoFcy(e.getAccountNoFcy());
+				corpsDesc.setEnname(e.getEnname());
+				corpsDesc.setCountry(e.getCountry());
+				corpsDesc.setGoodtypes(e.getGoodtypes());
+				if (StringUtil.isNotBlank(e.getCompanyName())) {
+					CorpsDesc company = baseMapper.selectCorpsDescCname(e.getCompanyName(), AuthUtil.getTenantId());
+					if (ObjectUtil.isNotEmpty(company)) {
+						corpsDesc.setBelongtocompany(String.valueOf(company.getId()));
+					} else {
+						throw new SecurityException("请输入正确的所属公司");
 					}
-					corpsDesc.setBelongtoarea(e.getBelongtoarea());
-					corpsDesc.setCompanytype(e.getCompanytype());
-					corpsDesc.setPosition(e.getPosition());
-					corpsDesc.setCorpsTypeId(String.valueOf(corpsType.getId()));
-					corpsDesc.setCorpType("KH");
-					if (ObjectUtils.isNotNull(e.getCorpId())){
-						corpsDesc.setId(Long.parseLong(e.getCorpId()));
-						corpsDesc.setUpdateTime(new Date());
-						corpsDesc.setUpdateUser(AuthUtil.getUserId());
-						baseMapper.updateById(corpsDesc);
-					}else{
+				}
+				corpsDesc.setBelongtoarea(e.getBelongtoarea());
+				corpsDesc.setCompanytype(e.getCompanytype());
+				corpsDesc.setPosition(e.getPosition());
+				corpsDesc.setCorpType("KH");
+				if (ObjectUtils.isNotNull(e.getCorpId())) {
+					corpsDesc.setId(Long.parseLong(e.getCorpId()));
+					corpsDesc.setUpdateTime(new Date());
+					corpsDesc.setUpdateUser(AuthUtil.getUserId());
+					baseMapper.updateById(corpsDesc);
+				} else {
+					String type = e.getCorpsTypeName();
+					CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(type, AuthUtil.getTenantId());
+					if (corpsType != null) {
+						countList.add(true);
+						corpsDesc.setCorpsTypeId(String.valueOf(corpsType.getId()));
 						//名称相等视为重复数据
 						LambdaQueryWrapper<CorpsDesc> queryWrapper = new LambdaQueryWrapper<>();
 						queryWrapper.eq(CorpsDesc::getCname, corpsDesc.getCname());
@@ -428,9 +427,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 							corpsDesc.setUpdateUser(AuthUtil.getUserId());
 							baseMapper.updateById(corpsDesc);
 						}
+					}else{
+						countList.add(false);
 					}
-				} else {
-					countList.add(false);
 				}
 			});
 			List<Boolean> booleanList = countList.stream().filter(e -> e == true).collect(Collectors.toList());
@@ -769,12 +768,12 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 		}
 		List<Long> collect = new ArrayList<>();
 		List<String> str = Arrays.stream(ids.split(",")).collect(Collectors.toList());
-		for (String item : str){
-			if (ObjectUtils.isNotNull(item) && !item.equals("null")){
+		for (String item : str) {
+			if (ObjectUtils.isNotNull(item) && !item.equals("null")) {
 				collect.add(Long.parseLong(item));
 			}
 		}
-		if (collect.isEmpty()){
+		if (collect.isEmpty()) {
 			return new ArrayList<>();
 		}
 		return baseMapper.selectByCorpIds(collect);
@@ -828,7 +827,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 			} else {
 				//保护客户联系人信息
 				CorpsAttn corpsAttn1 = new CorpsAttn();
-				User user = userClient.loginByAccount("", corpsDesc.getTel(), "4", AuthUtil.getTenantId(),null);
+				User user = userClient.loginByAccount("", corpsDesc.getTel(), "4", AuthUtil.getTenantId(), null);
 				if (ObjectUtils.isNotNull(user)) {
 					corpsAttn1.setUserId(user.getId());
 				}
@@ -892,10 +891,10 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				//保护客户联系人信息
 				CorpsAttn corpsAttn = new CorpsAttn();
 				R<Dept> resDept = sysClient.getDept(Long.parseLong(AuthUtil.getDeptId()));
-				if (!resDept.isSuccess() || ObjectUtils.isNull(resDept.getData())){
+				if (!resDept.isSuccess() || ObjectUtils.isNull(resDept.getData())) {
 					throw new RuntimeException("未找到小程序id");
 				}
-				User user = userClient.loginByAccount("", corpsDesc.getTel(), "4", AuthUtil.getTenantId(),resDept.getData().getAppletsId());
+				User user = userClient.loginByAccount("", corpsDesc.getTel(), "4", AuthUtil.getTenantId(), resDept.getData().getAppletsId());
 				if (ObjectUtils.isNotNull(user)) {
 					corpsAttn.setUserId(user.getId());
 				}

+ 12 - 5
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -1097,7 +1097,10 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 			});
 			//更新库存内容
-			iDeliveryItemsService.updateBatchById(reducelList);
+			boolean status = iDeliveryItemsService.updateBatchById(reducelList);
+			if (!status) {
+				throw new RuntimeException("提交失败");
+			}
 			if ("681169".equals(AuthUtil.getTenantId())) {
 				// ===================增加益付款逻辑=========================
 				if (CollectionUtils.isNotEmpty(list)) {
@@ -1163,8 +1166,10 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				temp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			temp.setDeliverTime(date);
-			orderDescClient.updateOrder(temp);
-
+			R res = orderDescClient.updateOrder(temp);
+			if (!res.isSuccess()) {
+				throw new RuntimeException("提交失败");
+			}
 			Order orderTemp = new Order();
 			orderTemp.setId(select.getOrgId());//采购主表id
 			orderTemp.setOrderStatus("待收货");
@@ -1175,8 +1180,10 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			orderTemp.setDeliverTime(date);
-			orderDescClient.updateOrder(orderTemp);
-
+			R res1 = orderDescClient.updateOrder(orderTemp);
+			if (!res1.isSuccess()) {
+				throw new RuntimeException("提交失败");
+			}
 		} else {
 			if (ObjectUtils.isNotNull(sysClient.getParamService("inventory"))
 				&& "1".equals(sysClient.getParamService("inventory"))) {

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

@@ -3132,6 +3132,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.eq(Bills::getIsDeleted, 0)
 			.in(Bills::getId, idList));
+		List<DispatchVehicles> dispatchVehiclesList = dispatchVehiclesMapper.selectList(new LambdaQueryWrapper<DispatchVehicles>()
+			.eq(DispatchVehicles::getPid, idList)
+			.eq(DispatchVehicles::getIsDeleted, 0)
+			.eq(DispatchVehicles::getTenantId, AuthUtil.getTenantId()));
+		long count = dispatchVehiclesList.stream().filter(e -> "0".equals(e.getWhetherReturn())).count();
+		if (count > 0) {
+			throw new RuntimeException("有未归还箱,退押失败");
+		}
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.in(FeeCenter::getPid, idList)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())

+ 20 - 0
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/controller/IndexStatisticsController.java

@@ -69,4 +69,24 @@ public class IndexStatisticsController {
 		return statisticAnalysisService.trend(date,type);
 	}
 
+	/**
+	 * 还箱提醒
+	 */
+	@GetMapping("/boxReturnReminder")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "完成率")
+	public R<List<Map<String, Object>>> boxReturnReminder() {
+		return statisticAnalysisService.boxReturnReminder();
+	}
+
+	/**
+	 * 退押提醒
+	 */
+	@GetMapping("/withdrawalReminder")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "完成率")
+	public R<List<Map<String, Object>>> withdrawalReminder() {
+		return statisticAnalysisService.withdrawalReminder();
+	}
+
 }

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/IStatisticAnalysisService.java

@@ -82,4 +82,8 @@ public interface IStatisticAnalysisService {
 	List<BoxNumberProfitExcel> boxNumberProfitStatisticsList(BoxNumberProfitQ boxNumberProfit);
 
 	R boxNumberProfitStatisticsChart(BoxNumberProfitQ boxNumberProfit);
+
+	R<List<Map<String, Object>>> boxReturnReminder();
+
+	R<List<Map<String, Object>>> withdrawalReminder();
 }

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

@@ -29,8 +29,9 @@ import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
 import org.springblade.los.statisticAnalysis.*;
 import org.springblade.los.statisticAnalysis.service.IStatisticAnalysisService;
 import org.springblade.los.trade.entity.Agent;
+import org.springblade.los.trade.entity.DispatchVehicles;
 import org.springblade.los.trade.mapper.AgentMapper;
-import org.springblade.los.trade.service.IAgentService;
+import org.springblade.los.trade.mapper.DispatchVehiclesMapper;
 import org.springblade.los.view.entity.BoxNumberProfit;
 import org.springblade.los.view.mapper.BoxNumberProfitMapper;
 import org.springblade.los.view.mapper.FinanceProfitMapper;
@@ -70,6 +71,8 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 
 	private final AgentMapper agentMapper;
 
+	private final DispatchVehiclesMapper dispatchVehiclesMapper;
+
 	@Override
 	public R<IPage<DecisionAnalysis>> decisionAnalysis(DecisionAnalysis decisionAnalysis, IPage<DecisionAnalysis> page) {
 		return R.data(page.setRecords(billsMapper.decisionAnalysis(decisionAnalysis, page)));
@@ -598,12 +601,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 	}
 
 	@Override
-	public R<Map<String, Object>> completionRate(String dateStart, String dateEnd,String type ) {
+	public R<Map<String, Object>> completionRate(String dateStart, String dateEnd, String type) {
 		long sum;
 		long refurbishment;
 		long complete;
 		Map<String, Object> map = new HashMap<>();
-		if ("1".equals(type)){
+		if ("1".equals(type)) {
 			LambdaQueryWrapper<Bills> lambdaQueryWrapperSE = new LambdaQueryWrapper<>();
 			lambdaQueryWrapperSE.eq(Bills::getTenantId, AuthUtil.getTenantId())
 				.eq(Bills::getIsDeleted, 0)
@@ -643,7 +646,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			} else {
 				map.put("rate", new BigDecimal(complete).divide(new BigDecimal(sum), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
 			}
-		}else if ("2".equals(type)){
+		} else if ("2".equals(type)) {
 			LambdaQueryWrapper<AeaBills> aeaBillsLambdaQueryWrapperAE = new LambdaQueryWrapper<>();
 			aeaBillsLambdaQueryWrapperAE.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
 				.eq(AeaBills::getIsDeleted, 0)
@@ -683,7 +686,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			} else {
 				map.put("rate", new BigDecimal(complete).divide(new BigDecimal(sum), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
 			}
-		}else if ("3".equals(type)){
+		} else if ("3".equals(type)) {
 			LambdaQueryWrapper<Agent> agentLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			agentLambdaQueryWrapper.eq(Agent::getTenantId, AuthUtil.getTenantId())
 				.eq(Agent::getIsDeleted, 0)
@@ -719,7 +722,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		} else if ("3".equals(type)) {
 			List<Map<String, Object>> mapList = agentMapper.trend(AuthUtil.getTenantId(), date);
 			return R.data(mapList);
-		}else {
+		} else {
 			return R.fail("参数错误");
 		}
 	}
@@ -1398,10 +1401,10 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 					map.put("amountProfitLoc", amountProfitLoc);
 					amountProfitSum = amountProfitSum.add(amountProfitLoc);
 					amountDrLocSum = amountDrLocSum.add(amountDrLoc);
-					if (new BigDecimal("0.00").compareTo(amountProfitLoc) != 0 && new BigDecimal("0.00").compareTo(amountDrLoc) != 0){
+					if (new BigDecimal("0.00").compareTo(amountProfitLoc) != 0 && new BigDecimal("0.00").compareTo(amountDrLoc) != 0) {
 						BigDecimal profitMargin = amountProfitLoc.divide(amountDrLoc, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
 						map.put("profitMargin", profitMargin);
-					}else{
+					} else {
 						map.put("profitMargin", new BigDecimal("0.00"));
 					}
 					mapList.add(map);
@@ -1410,9 +1413,9 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				mapSum.put("corpName", "总计");
 				mapSum.put("teu", teuSum);
 				mapSum.put("amountProfitLoc", amountProfitSum);
-				if (new BigDecimal("0.00").compareTo(amountProfitSum) != 0 && new BigDecimal("0.00").compareTo(amountDrLocSum) != 0){
+				if (new BigDecimal("0.00").compareTo(amountProfitSum) != 0 && new BigDecimal("0.00").compareTo(amountDrLocSum) != 0) {
 					mapSum.put("profitMargin", amountProfitSum.divide(amountDrLocSum, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
-				}else{
+				} else {
 					mapSum.put("profitMargin", new BigDecimal("0.00"));
 				}
 				mapList.add(0, mapSum);
@@ -1438,10 +1441,10 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 					map.put("amountProfitLoc", amountProfitLoc);
 					amountProfitSum = amountProfitSum.add(amountProfitLoc);
 					amountDrLocSum = amountDrLocSum.add(amountDrLoc);
-					if (new BigDecimal("0.00").compareTo(amountProfitLoc) != 0 && new BigDecimal("0.00").compareTo(amountDrLoc) != 0){
+					if (new BigDecimal("0.00").compareTo(amountProfitLoc) != 0 && new BigDecimal("0.00").compareTo(amountDrLoc) != 0) {
 						BigDecimal profitMargin = amountProfitLoc.divide(amountDrLoc, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
 						map.put("profitMargin", profitMargin);
-					}else{
+					} else {
 						map.put("profitMargin", new BigDecimal("0.00"));
 					}
 					mapList.add(map);
@@ -1450,9 +1453,9 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				mapSum.put("corpName", "总计");
 				mapSum.put("teu", teuSum);
 				mapSum.put("amountProfitLoc", amountProfitSum);
-				if (new BigDecimal("0.00").compareTo(amountProfitSum) != 0 && new BigDecimal("0.00").compareTo(amountDrLocSum) != 0){
+				if (new BigDecimal("0.00").compareTo(amountProfitSum) != 0 && new BigDecimal("0.00").compareTo(amountDrLocSum) != 0) {
 					mapSum.put("profitMargin", amountProfitSum.divide(amountDrLocSum, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
-				}else{
+				} else {
 					mapSum.put("profitMargin", new BigDecimal("0.00"));
 				}
 				mapList.add(0, mapSum);
@@ -1478,10 +1481,10 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 					map.put("amountProfitLoc", amountProfitLoc);
 					amountProfitSum = amountProfitSum.add(amountProfitLoc);
 					amountDrLocSum = amountDrLocSum.add(amountDrLoc);
-					if (new BigDecimal("0.00").compareTo(amountProfitLoc) != 0 && new BigDecimal("0.00").compareTo(amountDrLoc) != 0){
+					if (new BigDecimal("0.00").compareTo(amountProfitLoc) != 0 && new BigDecimal("0.00").compareTo(amountDrLoc) != 0) {
 						BigDecimal profitMargin = amountProfitLoc.divide(amountDrLoc, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
 						map.put("profitMargin", profitMargin);
-					}else{
+					} else {
 						map.put("profitMargin", new BigDecimal("0.00"));
 					}
 					mapList.add(map);
@@ -1490,9 +1493,9 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				mapSum.put("corpName", "总计");
 				mapSum.put("teu", teuSum);
 				mapSum.put("amountProfitLoc", amountProfitSum);
-				if (new BigDecimal("0.00").compareTo(amountProfitSum) != 0 && new BigDecimal("0.00").compareTo(amountDrLocSum) != 0){
+				if (new BigDecimal("0.00").compareTo(amountProfitSum) != 0 && new BigDecimal("0.00").compareTo(amountDrLocSum) != 0) {
 					mapSum.put("profitMargin", amountProfitSum.divide(amountDrLocSum, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
-				}else{
+				} else {
 					mapSum.put("profitMargin", new BigDecimal("0.00"));
 				}
 				mapList.add(0, mapSum);
@@ -1500,4 +1503,85 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		}
 		return R.data(mapList);
 	}
+
+	@Override
+	public R<List<Map<String, Object>>> boxReturnReminder() {
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getBusinessType, "SE"));
+		List<Long> billId = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+		List<DispatchVehicles> dispatchVehiclesList = dispatchVehiclesMapper.selectList(new LambdaQueryWrapper<DispatchVehicles>()
+			.eq(DispatchVehicles::getIsDeleted, 0)
+			.eq(DispatchVehicles::getTenantId, AuthUtil.getTenantId())
+			.eq(DispatchVehicles::getWhetherReturn, "0")
+			.in(DispatchVehicles::getPid, billId));
+		if (dispatchVehiclesList.isEmpty()) {
+			return R.data(mapList);
+		}
+		Date date = new Date();
+		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+		for (Bills item : billsList) {
+			if (dispatchVehiclesList.stream().anyMatch(e -> e.getPid().equals(item.getId()))) {
+				if (ObjectUtils.isNotNull(item.getEta()) && ObjectUtils.isNotNull(item.getIqNo())) {
+					int count = Integer.parseInt(item.getIqNo());
+					Calendar calendar = Calendar.getInstance();
+					calendar.setTime(item.getEta());
+					calendar.add(Calendar.DAY_OF_MONTH, count - 2);
+					Date newDate = calendar.getTime();
+					if (date.compareTo(newDate) == 0) {
+						Map<String, Object> map = new HashMap<>();
+						map.put("id", item.getId());
+						map.put("mblno", item.getMblno());
+						map.put("corpName", item.getCorpCnName());
+						map.put("eta", formatter.format(item.getEta()));
+						map.put("iqNo", item.getIqNo());
+						mapList.add(map);
+					}
+				}
+			}
+		}
+		return R.data(mapList);
+	}
+
+	@Override
+	public R<List<Map<String, Object>>> withdrawalReminder() {
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getBusinessType, "SE"));
+		List<Long> billId = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+		List<DispatchVehicles> dispatchVehiclesList = dispatchVehiclesMapper.selectList(new LambdaQueryWrapper<DispatchVehicles>()
+			.eq(DispatchVehicles::getIsDeleted, 0)
+			.eq(DispatchVehicles::getTenantId, AuthUtil.getTenantId())
+			.eq(DispatchVehicles::getWhetherReturn, "1")
+			.in(DispatchVehicles::getPid, billId));
+		if (dispatchVehiclesList.isEmpty()) {
+			return R.data(mapList);
+		}
+		Date date = new Date();
+		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+		for (DispatchVehicles item : dispatchVehiclesList) {
+			if (ObjectUtils.isNotNull(item.getReturnDate())) {
+				Bills bills = billsList.stream().filter(e-> e.getId().equals(item.getPid())).findFirst().orElse(null);
+				if (bills != null){
+					Calendar calendar = Calendar.getInstance();
+					calendar.setTime(item.getReturnDate());
+					calendar.add(Calendar.DAY_OF_MONTH, 5);
+					Date newDate = calendar.getTime();
+					if (date.compareTo(newDate) == 0) {
+						Map<String, Object> map = new HashMap<>();
+						map.put("id", item.getId());
+						map.put("mblno", bills.getMblno());
+						map.put("corpName", bills.getCorpCnName());
+						map.put("eta", formatter.format(item.getReturnDate()));
+						mapList.add(map);
+					}
+				}
+			}
+		}
+		return R.data(mapList);
+	}
 }

+ 36 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/DispatchVehiclesController.java

@@ -173,5 +173,41 @@ public class DispatchVehiclesController extends BladeController {
 		return dispatchVehiclesService.revokeDispatchVehicles(dispatchVehicles);
 	}
 
+	/**
+	 * 确认查验/倒柜派车
+	 */
+	@PostMapping("/confirmInspection")
+	@RepeatSubmit
+	public R confirmInspection(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.confirmInspection(dispatchVehicles);
+	}
+
+	/**
+	 * 撤销查验/倒柜派车
+	 */
+	@PostMapping("/revokeInspection")
+	@RepeatSubmit
+	public R revokeInspection(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.revokeInspection(dispatchVehicles);
+	}
+
+	/**
+	 * 确认还箱
+	 */
+	@PostMapping("/confirmReturnBox")
+	@RepeatSubmit
+	public R confirmReturnBox(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.confirmReturnBox(dispatchVehicles);
+	}
+
+	/**
+	 * 撤销还箱
+	 */
+	@PostMapping("/revokeReturnBox")
+	@RepeatSubmit
+	public R revokeReturnBox(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.revokeReturnBox(dispatchVehicles);
+	}
+
 
 }

+ 8 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IDispatchVehiclesService.java

@@ -50,4 +50,12 @@ public interface IDispatchVehiclesService extends IService<DispatchVehicles> {
 	R revokeDispatchVehicles(DispatchVehicles dispatchVehicles);
 
 	R revokeWarehouseEntry(DispatchVehicles dispatchVehicles);
+
+	R confirmInspection(DispatchVehicles dispatchVehicles);
+
+	R revokeInspection(DispatchVehicles dispatchVehicles);
+
+	R confirmReturnBox(DispatchVehicles dispatchVehicles);
+
+	R revokeReturnBox(DispatchVehicles dispatchVehicles);
 }

+ 52 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.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;
@@ -239,4 +238,56 @@ public class DispatchVehiclesServiceImpl extends ServiceImpl<DispatchVehiclesMap
 		return R.data(dispatchVehicles);
 	}
 
+	@Override
+	public R confirmInspection(DispatchVehicles dispatchVehicles) {
+		dispatchVehicles.setWhetherInspection("1");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		dispatchVehicles.setDispatchVehiclesDate(new Date());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
+	@Override
+	public R revokeInspection(DispatchVehicles dispatchVehicles) {
+		dispatchVehicles.setWhetherInspection("0");
+		dispatchVehicles.setInspectionFleetId(0L);
+		dispatchVehicles.setInspectionFleetName("");
+		dispatchVehicles.setInspectionLicenseNumber("");
+		dispatchVehicles.setInspectionFullName("");
+		dispatchVehicles.setInspectionContactInformation("");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		dispatchVehicles.setDispatchVehiclesDate(new Date());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
+	@Override
+	public R confirmReturnBox(DispatchVehicles dispatchVehicles) {
+		dispatchVehicles.setWhetherReturn("1");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		dispatchVehicles.setDispatchVehiclesDate(new Date());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
+	@Override
+	public R revokeReturnBox(DispatchVehicles dispatchVehicles) {
+		dispatchVehicles.setWhetherReturn("0");
+		dispatchVehicles.setReturnDate(null);
+		dispatchVehicles.setReturnCyId(0L);
+		dispatchVehicles.setReturnCyName("");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		dispatchVehicles.setDispatchVehiclesDate(new Date());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
 }

+ 10 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/StorageServiceImpl.java

@@ -20,7 +20,12 @@ 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.core.context.RootContext;
+import io.seata.core.exception.TransactionException;
+import io.seata.spring.annotation.GlobalTransactional;
+import io.seata.tm.api.GlobalTransactionContext;
 import lombok.AllArgsConstructor;
+import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.los.Util.IDeptUtils;
@@ -51,6 +56,11 @@ public class StorageServiceImpl extends ServiceImpl<StorageMapper, Storage> impl
 
 	private final IStorageFeeItemsService storageFeeItemsService;
 
+	/**
+	 * 生成系统编号
+	 */
+	private ISerialClient serialClient;
+
 	@Override
 	public IPage<StorageVO> selectStoragePage(IPage<StorageVO> page, StorageVO storage) {
 		return page.setRecords(baseMapper.selectStoragePage(page, storage));

+ 34 - 32
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceBankServiceImpl.java

@@ -146,39 +146,41 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 			}
 			//采购报价=单价 / (1+税率/100) *(1+FOB系数/100)
 			priceBank.setPurchaseAmount(priceBank.getPrice().divide((new BigDecimal(1).add((priceBank.getTaxRate().divide(new BigDecimal(100))))), 4).multiply(new BigDecimal(1).add((priceBank.getCoefficient().divide(new BigDecimal(100))))));
-			if (StringUtils.isNotBlank(item.getCorpName())) {
-				CorpsDesc corpByName = corpsDescClient.getCorpsDesc(item.getCorpName(), "GYS");
-				if (corpByName != null) {
-					priceBank.setCorpName(item.getCorpName());//供应商
-					priceBank.setCorpId(corpByName.getId());//供应商id
-					//查商品id
-					GoodsType goodsType = goodsDescClient.goodTypeCname(item.getGoodsTypeName());
-					if (goodsType != null) {
-						priceBank.setGoodTypeId(goodsType.getId());
+
+			if (ObjectUtils.isNotNull(item.getPriceBankId())) {
+				PriceBank bank = baseMapper.selectById(Long.parseLong(item.getPriceBankId()));
+				if (bank != null) {
+					if (priceBank.getPriceTime().compareTo(bank.getPriceTime()) > 0) {
+						baseMapper.updatePrice(Long.parseLong(item.getPriceBankId()));//更新历史价格
 					}
-					//查商品看商品是否存在
-					GoodsDesc goodName = goodsDescClient.getGoodName(item.getCname(), null);
-					if (goodName != null) {
-						priceBank.setCname(item.getCname());//商品名
-						priceBank.setEname(goodName.getEname());
-						priceBank.setItemId(goodName.getId());//商品id
-						priceBank.setCode(goodName.getCode());//商品编码
-						priceBank.setSpecs(goodName.getTypeno());//商品中文规格
-						priceBank.setCnameDescription(goodName.getCnameDescription());//英文描述
-						priceBank.setSupervisorUserIdGroup(goodName.getSupervisorUserIdGroup());//分管员id组
-						priceBank.setSupervisorUserNameGroup(goodName.getSupervisorUserNameGroup());//分管员名组
-						if (ObjectUtils.isNotNull(item.getPriceBankId())) {
-							PriceBank bank = baseMapper.selectById(Long.parseLong(item.getPriceBankId()));
-							if (bank != null) {
-								if (priceBank.getPriceTime().compareTo(bank.getPriceTime()) > 0) {
-									baseMapper.updatePrice(Long.parseLong(item.getPriceBankId()));//更新历史价格
-								}
-							}
-							priceBank.setId(Long.parseLong(item.getPriceBankId()));
-							priceBank.setUpdateTime(new Date());
-							priceBank.setUpdateUser(SecureUtil.getUserId());
-							baseMapper.updateById(priceBank);
-						} else {
+				}
+				priceBank.setId(Long.parseLong(item.getPriceBankId()));
+				priceBank.setUpdateTime(new Date());
+				priceBank.setUpdateUser(SecureUtil.getUserId());
+				baseMapper.updateById(priceBank);
+			} else {
+				if (StringUtils.isNotBlank(item.getCorpName())) {
+					CorpsDesc corpByName = corpsDescClient.getCorpsDesc(item.getCorpName(), "GYS");
+					if (corpByName != null) {
+						priceBank.setCorpName(item.getCorpName());//供应商
+						priceBank.setCorpId(corpByName.getId());//供应商id
+						//查商品id
+						GoodsType goodsType = goodsDescClient.goodTypeCname(item.getGoodsTypeName());
+						if (goodsType != null) {
+							priceBank.setGoodTypeId(goodsType.getId());
+						}
+						//查商品看商品是否存在
+						GoodsDesc goodName = goodsDescClient.getGoodName(item.getCname(), null);
+						if (goodName != null) {
+							priceBank.setCname(item.getCname());//商品名
+							priceBank.setEname(goodName.getEname());
+							priceBank.setItemId(goodName.getId());//商品id
+							priceBank.setCode(goodName.getCode());//商品编码
+							priceBank.setSpecs(goodName.getTypeno());//商品中文规格
+							priceBank.setCnameDescription(goodName.getCnameDescription());//英文描述
+							priceBank.setSupervisorUserIdGroup(goodName.getSupervisorUserIdGroup());//分管员id组
+							priceBank.setSupervisorUserNameGroup(goodName.getSupervisorUserNameGroup());//分管员名组
+
 							//查询是否存在
 							LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 							lambdaQueryWrapper.eq(PriceBank::getCorpId, priceBank.getCorpId());

+ 4 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1359,7 +1359,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 //						throw new SecurityException("锁定库存失败: " + salesOrder.getOrderNo() + "更新失败");
 						throw new SecurityException(goods.getMsg());
 					}
-					stockGoodsClient.saveOrUpdateBatchListLog(stockGoodsLogList);
+					boolean res = stockGoodsClient.saveOrUpdateBatchListLog(stockGoodsLogList);
+					if (!res) {
+						throw new RuntimeException("提交失败");
+					}
 				}
 			}
 		}

+ 1 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/impl/StatisticsServiceImpl.java

@@ -1314,7 +1314,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
 		LambdaQueryWrapper<PjCorpsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjCorpsDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjCorpsDesc::getIsDeleted, 0)
-			.like(ObjectUtils.isNotNull(corpBuySingular), PjCorpsDesc::getCname, corpBuySingular.getCorpName())
+			.like(ObjectUtils.isNotNull(corpBuySingular.getCorpName()), PjCorpsDesc::getCname, corpBuySingular.getCorpName())
 			.eq(PjCorpsDesc::getCorpType, "KH");
 		IPage<PjCorpsDesc> corpsDescIPage = corpsDescService.page(Condition.getPage(query), lambdaQueryWrapper);
 		if (!corpsDescIPage.getRecords().isEmpty()) {

+ 7 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -483,10 +483,15 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 			return Collections.emptyList();
 		}
 
-		List<Long> collect = Arrays.stream(userIds.split(","))
+		/*List<Long> collect = Arrays.stream(userIds.split(","))
 			.map(s -> Long.parseLong(s.trim()))
 			.collect(Collectors.toList());
-		return baseMapper.selectUserIds(collect);
+		return baseMapper.selectUserIds(collect);*/
+
+		return baseMapper.selectList(new LambdaQueryWrapper<User>()
+			.eq(User::getIsDeleted, 0)
+			.eq(User::getTenantId, AuthUtil.getTenantId())
+			.apply("find_in_set(id,'" + userIds + "')"));
 	}
 
 	@Override