Browse Source

贸易代理 2024年8月7日17:19:44

纪新园 1 year ago
parent
commit
16a8bcfab3
23 changed files with 635 additions and 36 deletions
  1. 12 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  2. 0 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java
  3. 2 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/Agent.java
  4. 2 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/AgentItems.java
  5. 3 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/InOutStorage.java
  6. 5 2
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java
  7. 86 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  8. 9 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/PreContainersController.java
  9. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IPreContainersService.java
  10. 15 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  11. 48 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  12. 10 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentController.java
  13. 18 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/DispatchVehiclesController.java
  14. 19 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/InOutStorageController.java
  15. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/StorageFeeController.java
  16. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IAgentService.java
  17. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IDispatchVehiclesService.java
  18. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IInOutStorageService.java
  19. 229 21
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java
  20. 60 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.java
  21. 95 2
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java
  22. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/StorageFeeServiceImpl.java
  23. 8 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

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

@@ -1710,6 +1710,18 @@ public class Bills implements Serializable {
 	private String profitMargin;
 
 	/**
+	 * 公司分成比例
+	 */
+	@TableField(exist = false)
+	private String sharingRatio;
+
+	/**
+	 * 是否存在RMB海运费
+	 */
+	@TableField(exist = false)
+	private String text;
+
+	/**
 	 * 默认团队id
 	 */
 	@ApiModelProperty(value = "默认团队id")

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

@@ -269,7 +269,6 @@ public class PreContainers implements Serializable {
 	/**
 	 * 1 派车  2 自提
 	 */
-	@TableField(exist = false)
 	private String type;
 
 

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

@@ -330,6 +330,7 @@ public class Agent implements Serializable {
 	 * 首款实付时间
 	 */
 	@ApiModelProperty(value = "首款实付时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date firstActualPaymentDate;
 
 	/**
@@ -363,6 +364,7 @@ public class Agent implements Serializable {
 	 * 尾款实付时间
 	 */
 	@ApiModelProperty(value = "尾款实付时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date finalPaymentInFullDate;
 
 	/**

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

@@ -16,6 +16,7 @@
  */
 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;
@@ -223,6 +224,7 @@ public class AgentItems implements Serializable {
 	 * 派车日期
 	 */
 	@ApiModelProperty(value = "派车日期")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date dispatchDate;
 	/**
 	 * 库存件数

+ 3 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/InOutStorage.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;
@@ -147,6 +149,7 @@ public class InOutStorage implements Serializable {
 	 * 出库时间
 	 */
 	@ApiModelProperty(value = "出库时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date outStorageDate;
 	/**
 	 * 单价

+ 5 - 2
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java

@@ -117,6 +117,7 @@ public class BCorpsController extends BladeController {
 			.eq(ObjectUtils.isNotNull(bCorps.getStatus()), BCorps::getStatus, bCorps.getStatus())
 			.and(ObjectUtils.isNotNull(bCorps.getCnName()), i -> i.like(BCorps::getCnName, bCorps.getCnName()).or()
 				.like(BCorps::getEnName, bCorps.getCnName()).or().like(BCorps::getCode, bCorps.getCnName()))
+			.like(ObjectUtils.isNotNull(bCorps.getShortName()), BCorps::getShortName, bCorps.getShortName())
 			.like(ObjectUtils.isNotNull(bCorps.getEnName()), BCorps::getEnName, bCorps.getEnName())
 			.like(ObjectUtils.isNotNull(bCorps.getUscc()), BCorps::getUscc, bCorps.getUscc())
 			.like(ObjectUtils.isNotNull(bCorps.getCnAddr()), BCorps::getCnAddr, bCorps.getCnAddr())
@@ -203,11 +204,12 @@ public class BCorpsController extends BladeController {
 			.eq(BCorps::getIsDeleted, 0)
 			.in(!corpIds.isEmpty(), BCorps::getId, corpIds)
 			.and(ObjectUtils.isNotNull(bCorps.getCnName()), i -> i.like(BCorps::getCode, bCorps.getCnName()).or()
-				.like(BCorps::getCnName, bCorps.getCnName()).or()
-				.like(BCorps::getEnName, bCorps.getCnName()))
+				.like(BCorps::getCnName, bCorps.getCnName()).or().like(BCorps::getEnName, bCorps.getCnName())
+				.or().like(BCorps::getShortName, bCorps.getCnName()))
 			.like(ObjectUtils.isNotNull(bCorps.getCode()), BCorps::getCode, bCorps.getCode())
 			.eq(ObjectUtils.isNotNull(bCorps.getStatus()), BCorps::getStatus, bCorps.getStatus())
 			.like(ObjectUtils.isNotNull(bCorps.getEnName()), BCorps::getEnName, bCorps.getEnName())
+			.like(ObjectUtils.isNotNull(bCorps.getShortName()), BCorps::getShortName, bCorps.getShortName())
 			.like(ObjectUtils.isNotNull(bCorps.getUscc()), BCorps::getUscc, bCorps.getUscc());
 		if (AuthUtil.getUserRole().contains("admin") || AuthUtil.getUserRole().contains("secondaryAdmin")) {
 			//管理员、次级管理员查看全部数据
@@ -388,6 +390,7 @@ public class BCorpsController extends BladeController {
 			.like(ObjectUtils.isNotNull(bCorps.getEnAddr()), BCorps::getEnAddr, bCorps.getEnAddr())
 			.like(ObjectUtils.isNotNull(bCorps.getCntyCode()), BCorps::getCntyCode, bCorps.getCntyCode())
 			.like(ObjectUtils.isNotNull(bCorps.getCntyName()), BCorps::getCntyName, bCorps.getCntyName())
+			.like(ObjectUtils.isNotNull(bCorps.getShortName()), BCorps::getShortName, bCorps.getShortName())
 			.like(ObjectUtils.isNotNull(bCorps.getTel()), BCorps::getTel, bCorps.getTel())
 			.like(ObjectUtils.isNotNull(bCorps.getAdminProfiles()), BCorps::getAdminProfiles, bCorps.getAdminProfiles())
 //			.apply(ObjectUtils.isNotNull(bCorps.getCorpType()), "find_in_set('" + bCorps.getCorpType() + "',corp_type)");

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

@@ -74,6 +74,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -190,6 +191,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			.eq(BCorps::getIsDeleted, 0));
 		if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.SALES_REPORT.equals(groupCode) && (MagicValues.HYCK.equals(type) || MagicValues.HYJK.equals(type))) {
 			List<Bills> list = new ArrayList<>();
+			String profitMargin = sysClient.getParamServiceNew(MagicValues.PROFIT_MARGIN);
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				if (bCurrency != null) {
@@ -590,6 +592,58 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								feeCenterReports.add(feeCenterReports1);
 							}
 						}
+						if (ObjectUtils.isNotNull(item.getAmountProfitLocUpdate()) && ObjectUtils.isNotNull(item.getAmountDrLoc())) {
+							if (item.getAmountProfitLocUpdate().compareTo(new BigDecimal(MagicValues.ZERO)) == 0 ||
+								item.getAmountDrLoc().compareTo(new BigDecimal(MagicValues.ZERO)) == 0) {
+								item.setGrossMargin(new BigDecimal(MagicValues.ZERO));
+							} else {
+								item.setGrossMargin(item.getAmountProfitLocUpdate().divide(item.getAmountDrLoc(), 4, RoundingMode.HALF_UP));
+							}
+						} else {
+							item.setGrossMargin(new BigDecimal(MagicValues.ZERO));
+						}
+						if (ObjectUtils.isNotNull(profitMargin)) {
+							BigDecimal margin = new BigDecimal(profitMargin).divide(new BigDecimal(MagicValues.HUNDRED), 2, RoundingMode.HALF_UP);
+							if (margin.compareTo(item.getGrossMargin()) > 0) {
+								item.setProfitMargin("Profit was low and unfair(DC)!");
+								BigDecimal amountD = feeCenterReports.stream().filter(e -> e.getFeeCnName().equals("海运费"))
+									.map(FeeCenterReports::getAmountD).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+								BigDecimal amountC = feeCenterReports.stream().filter(e -> e.getFeeCnName().equals("海运费"))
+									.map(FeeCenterReports::getAmountC).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+								if (new BigDecimal("0.00").compareTo((amountD.add(amountC))) == 0) {
+									item.setText("(应收/应付)存在RMB海运费");
+								}
+								String status = sysClient.getParamServiceNew("is.profit.margin");
+								if ("1".equals(status)) {
+									BigDecimal amountHYD = item.getFeeCenterList().stream()
+										.filter(e -> e.getFeeCnName().equals("海运费") && "D".equals(e.getDc()))
+										.map(FeeCenterReports::getAmountUsdD).reduce(BigDecimal.ZERO, BigDecimal::add);
+									BigDecimal amountHYC = item.getFeeCenterList().stream()
+										.filter(e -> e.getFeeCnName().equals("海运费") && "C".equals(e.getDc()))
+										.map(FeeCenterReports::getAmountUsdC).reduce(BigDecimal.ZERO, BigDecimal::add);
+									BigDecimal amountPSD = item.getFeeCenterList().stream()
+										.filter(e -> e.getFeeCnName().equals("PS") && "D".equals(e.getDc()))
+										.map(FeeCenterReports::getAmountUsdD).reduce(BigDecimal.ZERO, BigDecimal::add);
+									BigDecimal amountPSC = item.getFeeCenterList().stream()
+										.filter(e -> e.getFeeCnName().equals("PS") && "C".equals(e.getDc()))
+										.map(FeeCenterReports::getAmountUsdC).reduce(BigDecimal.ZERO, BigDecimal::add);
+									BCorps bCorps = bCorpsService.getById(item.getCorpId());
+									BigDecimal PSAmount = amountPSC.subtract(amountPSD);
+									BigDecimal HYAmount = amountHYD.subtract(amountHYC);
+									BigDecimal rate = new BigDecimal("0.00");
+									if (PSAmount.compareTo(new BigDecimal("0.00")) != 0 && HYAmount.compareTo(new BigDecimal("0.00")) != 0) {
+										rate = PSAmount.divide(HYAmount, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP);
+										if (new BigDecimal(bCorps.getPsRate()).compareTo(rate) > 0) {
+											item.setText("公司实际分成比例:" + rate + "(" + bCorps.getPsRate() + ")");
+										}
+									}
+								}
+							} else {
+								item.setProfitMargin("");
+							}
+						} else {
+							item.setProfitMargin("");
+						}
 						item.setFeeCenterList(feeCenterReports);
 						item.setDept(dept);
 					}
@@ -2461,6 +2515,38 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 								BigDecimal margin = new BigDecimal(profitMargin).divide(new BigDecimal(MagicValues.HUNDRED), 2, RoundingMode.HALF_UP);
 								if (margin.compareTo(item.getGrossMargin()) > 0) {
 									item.setProfitMargin("Profit was low!");
+									BigDecimal amountD = feeCenterReports.stream().filter(e -> e.getFeeCnName().equals("海运费"))
+										.map(FeeCenterReports::getAmountD).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+									BigDecimal amountC = feeCenterReports.stream().filter(e -> e.getFeeCnName().equals("海运费"))
+										.map(FeeCenterReports::getAmountC).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+									if (new BigDecimal("0.00").compareTo((amountD.add(amountC))) == 0) {
+										item.setText("(应收/应付)存在RMB海运费");
+									}
+									String status = sysClient.getParamServiceNew("is.profit.margin");
+									if ("1".equals(status)) {
+										BigDecimal amountHYD = item.getFeeCenterList().stream()
+											.filter(e -> e.getFeeCnName().equals("海运费") && "D".equals(e.getDc()))
+											.map(FeeCenterReports::getAmountUsdD).reduce(BigDecimal.ZERO, BigDecimal::add);
+										BigDecimal amountHYC = item.getFeeCenterList().stream()
+											.filter(e -> e.getFeeCnName().equals("海运费") && "C".equals(e.getDc()))
+											.map(FeeCenterReports::getAmountUsdC).reduce(BigDecimal.ZERO, BigDecimal::add);
+										BigDecimal amountPSD = item.getFeeCenterList().stream()
+											.filter(e -> e.getFeeCnName().equals("PS") && "D".equals(e.getDc()))
+											.map(FeeCenterReports::getAmountUsdD).reduce(BigDecimal.ZERO, BigDecimal::add);
+										BigDecimal amountPSC = item.getFeeCenterList().stream()
+											.filter(e -> e.getFeeCnName().equals("PS") && "C".equals(e.getDc()))
+											.map(FeeCenterReports::getAmountUsdC).reduce(BigDecimal.ZERO, BigDecimal::add);
+										BCorps bCorps = bCorpsService.getById(item.getCorpId());
+										BigDecimal PSAmount = amountPSC.subtract(amountPSD);
+										BigDecimal HYAmount = amountHYD.subtract(amountHYC);
+										BigDecimal rate = new BigDecimal("0.00");
+										if (PSAmount.compareTo(new BigDecimal("0.00")) != 0 && HYAmount.compareTo(new BigDecimal("0.00")) != 0) {
+											rate = PSAmount.divide(HYAmount, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP);
+											if (new BigDecimal(bCorps.getPsRate()).compareTo(rate) > 0) {
+												item.setText("公司实际分成比例:" + rate + "(" + bCorps.getPsRate() + ")");
+											}
+										}
+									}
 								} else {
 									item.setProfitMargin("");
 								}

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

@@ -147,5 +147,14 @@ public class PreContainersController extends BladeController {
 		return preContainersService.generateDispatchVehicles(preContainers);
 	}
 
+	/**
+	 * 撤销派车信息
+	 */
+	@PostMapping("/revokeDispatchVehicles")
+	@RepeatSubmit
+	public R revokeDispatchVehicles(@Valid @RequestBody PreContainers preContainers){
+		return preContainersService.revokeDispatchVehicles(preContainers);
+	}
+
 
 }

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IPreContainersService.java

@@ -62,4 +62,6 @@ public interface IPreContainersService extends IService<PreContainers> {
 	R submitList(List<PreContainers> preContainersList);
 
     R generateDispatchVehicles(PreContainers preContainers);
+
+	R revokeDispatchVehicles(PreContainers preContainers);
 }

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

@@ -2463,7 +2463,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					for (AgentItems items : agentItemsList) {
 						if (item.getBoxNo().equals(items.getBoxNo())) {
 							String clearanceSpeedOfProgress = "已查验/查验时间:" + sdf.format(item.getInspectionDate()) + ";";
-							items.setClearanceSpeedOfProgress(items.getClearanceSpeedOfProgress() + clearanceSpeedOfProgress);
+							if(ObjectUtils.isNotNull(items.getClearanceSpeedOfProgress())){
+								items.setClearanceSpeedOfProgress(items.getClearanceSpeedOfProgress() + clearanceSpeedOfProgress);
+							}else{
+								items.setClearanceSpeedOfProgress(clearanceSpeedOfProgress);
+							}
 						}
 					}
 				}
@@ -2507,7 +2511,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (ObjectUtils.isNotNull(bills.getCyReturnTime())) {
 			for (AgentItems items : agentItemsList) {
 				String clearanceSpeedOfProgress = "已放行/放行日期:" + sdf.format(bills.getCyReturnTime()) + ";";
-				items.setClearanceSpeedOfProgress(items.getClearanceSpeedOfProgress() + clearanceSpeedOfProgress);
+				if (ObjectUtils.isNotNull(items.getClearanceSpeedOfProgress())){
+					items.setClearanceSpeedOfProgress(items.getClearanceSpeedOfProgress() + clearanceSpeedOfProgress);
+				}else{
+					items.setClearanceSpeedOfProgress(clearanceSpeedOfProgress);
+				}
 			}
 		}
 		this.updateById(bills);
@@ -2517,7 +2525,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					for (AgentItems items : agentItemsList) {
 						if (item.getBoxNo().equals(items.getBoxNo())) {
 							String clearanceSpeedOfProgress = "已派车/派车时间:" + sdf.format(item.getDispatchVehiclesDate()) + ";";
-							items.setClearanceSpeedOfProgress(items.getClearanceSpeedOfProgress() + clearanceSpeedOfProgress);
+							if (ObjectUtils.isNotNull(items.getClearanceSpeedOfProgress())){
+								items.setClearanceSpeedOfProgress(items.getClearanceSpeedOfProgress() + clearanceSpeedOfProgress);
+							}else{
+								items.setClearanceSpeedOfProgress(clearanceSpeedOfProgress);
+							}
 						}
 					}
 				}

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

@@ -383,6 +383,8 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R generateDispatchVehicles(PreContainers preContainers) {
 		Long deptId = 0L;
 		String deptName = "";
@@ -405,9 +407,9 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 		dispatchVehicles.setNetWeight(preContainers.getNetWeight());
 		dispatchVehicles.setHsCode(preContainers.getHsCode());
 		dispatchVehicles.setGoodsName(preContainers.getGoodsName());
-		if ("1".equals(preContainers.getType())){
+		if ("1".equals(preContainers.getType())) {
 			dispatchVehicles.setWhetherWarehousing(preContainers.getWhetherWarehousing());
-		}else{
+		} else {
 			dispatchVehicles.setWhetherWarehousing(0);
 		}
 		dispatchVehicles.setCreateTime(new Date());
@@ -440,4 +442,48 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 		baseMapper.updateById(preContainers);
 		return R.data(preContainers);
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R revokeDispatchVehicles(PreContainers preContainers) {
+		if ("1".equals(preContainers.getType())) {
+			DispatchVehicles dispatchVehicles = dispatchVehiclesService.getOne(new LambdaQueryWrapper<DispatchVehicles>()
+				.eq(DispatchVehicles::getBoxItemsId, preContainers.getId())
+				.eq(DispatchVehicles::getPid, preContainers.getPid()));
+			if (dispatchVehicles != null) {
+				if ("1".equals(dispatchVehicles.getWhetherWarehouseEntry())) {
+					throw new RuntimeException("已生成入库,撤销失败");
+				}
+				if ("1".equals(dispatchVehicles.getWhetherDispatchVehicles())) {
+					throw new RuntimeException("已确认派车,撤销失败");
+				}
+				dispatchVehiclesService.removeById(dispatchVehicles.getId());
+			} else {
+				throw new RuntimeException("未找到派车信息");
+			}
+		}
+		Bills bills = billsMapper.selectById(preContainers.getPid());
+		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+			List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+				.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0));
+			for (AgentItems items : agentItemsList) {
+				items.setUpdateTime(new Date());
+				items.setUpdateUser(AuthUtil.getUserId());
+				items.setUpdateUserName(AuthUtil.getUserName());
+				items.setWhetherDispatchCar("未派车");
+				items.setDispatchDate(null);
+				agentItemsMapper.updateById(items);
+			}
+		}
+		preContainers.setType("");
+		preContainers.setWhetherDispatchVehicles("0");
+		preContainers.setUpdateTime(new Date());
+		preContainers.setUpdateUser(AuthUtil.getUserId());
+		preContainers.setUpdateUserName(AuthUtil.getUserName());
+		baseMapper.updateById(preContainers);
+		return R.data(preContainers);
+	}
 }

+ 10 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentController.java

@@ -341,6 +341,16 @@ public class AgentController extends BladeController {
 	}
 
 	/**
+	 * 撤销确认付款
+	 */
+	@PostMapping("/revokeConfirmThePayment")
+	@RepeatSubmit
+	public R revokeConfirmThePayment(@RequestBody Agent agent) {
+		Agent declare = agentService.revokeConfirmThePayment(agent);
+		return R.data(declare);
+	}
+
+	/**
 	 * 申请付款请核
 	 */
 	@PostMapping("/applyForPayment")

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

@@ -147,6 +147,15 @@ public class DispatchVehiclesController extends BladeController {
 	}
 
 	/**
+	 * 撤销入库信息
+	 */
+	@PostMapping("/revokeWarehouseEntry")
+	@RepeatSubmit
+	public R revokeWarehouseEntry(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.revokeWarehouseEntry(dispatchVehicles);
+	}
+
+	/**
 	 * 确认派车
 	 */
 	@PostMapping("/confirmDispatchVehicles")
@@ -155,5 +164,14 @@ public class DispatchVehiclesController extends BladeController {
 		return dispatchVehiclesService.confirmDispatchVehicles(dispatchVehicles);
 	}
 
+	/**
+	 * 撤销派车
+	 */
+	@PostMapping("/revokeDispatchVehicles")
+	@RepeatSubmit
+	public R revokeDispatchVehicles(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.revokeDispatchVehicles(dispatchVehicles);
+	}
+
 
 }

+ 19 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/InOutStorageController.java

@@ -137,7 +137,7 @@ public class InOutStorageController extends BladeController {
 	}
 
 	/**
-	 * 确认入库
+	 * 确认入
 	 */
 	@PostMapping("/confirmWarehouseEntry")
 	@RepeatSubmit
@@ -146,6 +146,15 @@ public class InOutStorageController extends BladeController {
 	}
 
 	/**
+	 * 撤销入出库
+	 */
+	@PostMapping("/revokeWarehouseEntry")
+	@RepeatSubmit
+	public R revokeWarehouseEntry(@Valid @RequestBody InOutStorage inOutStorage){
+		return inOutStorageService.revokeWarehouseEntry(inOutStorage);
+	}
+
+	/**
 	 * 计算仓储单价
 	 */
 	@PostMapping("/calculationWarehouseUnitPrice")
@@ -163,5 +172,14 @@ public class InOutStorageController extends BladeController {
 		return inOutStorageService.generateOutbound(inOutStorage);
 	}
 
+	/**
+	 * 撤销出库
+	 */
+	@PostMapping("/revokeOutbound")
+	@RepeatSubmit
+	public R revokeOutbound(@Valid @RequestBody InOutStorage inOutStorage){
+		return inOutStorageService.revokeOutbound(inOutStorage);
+	}
+
 
 }

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/StorageFeeController.java

@@ -123,7 +123,7 @@ public class StorageFeeController extends BladeController {
 	}
 
 	/**
-	 * 详情
+	 * 复制
 	 */
 	@GetMapping("/copy")
 	public R<StorageFee> copy(StorageFee storageFee) {

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IAgentService.java

@@ -87,4 +87,6 @@ public interface IAgentService extends IService<Agent> {
 	R getReportDataTrade(String billId, String reportCode, String groupCode,String corpIds,  String itemIds, String type);
 
 	Agent revokeCollectionOfPayments(Agent agent);
+
+	Agent revokeConfirmThePayment(Agent agent);
 }

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

@@ -46,4 +46,8 @@ public interface IDispatchVehiclesService extends IService<DispatchVehicles> {
     R generateWarehouseEntry(DispatchVehicles dispatchVehicles);
 
 	R confirmDispatchVehicles(DispatchVehicles dispatchVehicles);
+
+	R revokeDispatchVehicles(DispatchVehicles dispatchVehicles);
+
+	R revokeWarehouseEntry(DispatchVehicles dispatchVehicles);
 }

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IInOutStorageService.java

@@ -48,4 +48,8 @@ public interface IInOutStorageService extends IService<InOutStorage> {
 	R submitList(List<InOutStorage> inOutStorage);
 
 	R calculationWarehouseUnitPrice(InOutStorage inOutStorage);
+
+	R revokeWarehouseEntry(InOutStorage inOutStorage);
+
+	R revokeOutbound(InOutStorage inOutStorage);
 }

+ 229 - 21
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -503,8 +503,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setBusinessType(agent.getBusinessType());
 					item.setBillNo(agent.getContractNo());
 					item.setBillDate(agent.getBusinessDate());
-					item.setCorpId(agent.getAbroadConsignorId());
-					item.setCorpCnName(agent.getAbroadConsignorCname());
+//					item.setCorpId(agent.getAbroadConsignorId());
+//					item.setCorpCnName(agent.getAbroadConsignorCname());
 					item.setBillCorpId(agent.getCorpId());
 					item.setBillCorpCnName(agent.getCorpName());
 					item.setPolId(agent.getPolId());
@@ -603,8 +603,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setBusinessType(agent.getBusinessType());
 					item.setBillNo(agent.getContractNo());
 					item.setBillDate(agent.getBusinessDate());
-					item.setCorpId(agent.getDomesticConsigneeId());
-					item.setCorpCnName(agent.getDomesticConsigneeCname());
+					/*item.setCorpId(agent.getDomesticConsigneeId());
+					item.setCorpCnName(agent.getDomesticConsigneeCname());*/
 					item.setBillCorpId(agent.getCorpId());
 					item.setBillCorpCnName(agent.getCorpName());
 					item.setPolId(agent.getPolId());
@@ -1248,13 +1248,13 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			String formattedDate = sdf.format(now);
 			for (AgentItems items : agentItemsList) {
 				if (ObjectUtils.isNull(items.getPaymentRecord())) {
-					items.setPaymentRecord("应收首付款/应收尾款/应付首付款/应付尾款");
+					items.setPaymentRecord("【应收首付款】,【应收尾款】,【应付首付款】,【应付尾款】");
 				}
 				if (new BigDecimal("0").compareTo(firstPaidInPayment) != 0) {
-					String msg = "应收首付款/已收款/时间:" + formattedDate;
+					String msg = "应收首付款:已收款-时间:" + formattedDate;
 					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应收首付款", msg));
 				} else if (new BigDecimal("0").compareTo(finalPaymentReceived) != 0) {
-					String msg = "应收尾款/已收款/时间:" + formattedDate;
+					String msg = "应收尾款:已收款-时间:" + formattedDate;
 					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应收尾款", msg));
 				}
 			}
@@ -1866,13 +1866,13 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			String formattedDate = sdf.format(now);
 			for (AgentItems items : agentItemsList) {
 				if (ObjectUtils.isNull(items.getPaymentRecord())) {
-					items.setPaymentRecord("应收首付款/应收尾款/应付首付款/应付尾款");
+					items.setPaymentRecord("【应收首付款】,【应收尾款】,【应付首付款】,【应付尾款】");
 				}
 				if (new BigDecimal("0").compareTo(firstActualPayment) != 0) {
-					String msg = "应付首付款/已付款/时间:" + formattedDate;
+					String msg = "应付首付款:已付款-时间:" + formattedDate;
 					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应付首付款", msg));
 				} else if (new BigDecimal("0").compareTo(finalPaymentInFull) != 0) {
-					String msg = "应付尾款/已付款/时间:" + formattedDate;
+					String msg = "应付尾款:已付款-时间:" + formattedDate;
 					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应付尾款", msg));
 				}
 			}
@@ -3767,16 +3767,23 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			.in(AgentItems::getPid, agentIdList));
 		if (!agentItemsList.isEmpty()) {
 			for (AgentItems items : agentItemsList) {
-				if (ObjectUtils.isNull(items.getPaymentRecord())) {
-					items.setPaymentRecord("应收首付款/应收尾款/应付首付款/应付尾款");
+				if (ObjectUtils.isNotNull(items.getPaymentRecord())) {
+					String[] arr = items.getPaymentRecord().split(",");
+					String[] newArr = new String[arr.length];
+					for (int i = 0; i <= arr.length; i++) {
+						if (new BigDecimal("0").compareTo(firstPaidInPayment) != 0) {
+							if (arr[i].contains("应收首付款")) {
+								arr[i] = "【应收首付款】";
+							}
+						} else if (new BigDecimal("0").compareTo(finalPaymentReceived) != 0) {
+							if (arr[i].contains("应收尾款")) {
+								arr[i] = "【应收尾款】";
+							}
+						}
+						newArr[i] = arr[i];
+					}
+					items.setPaymentRecord(String.join(",", newArr));
 				}
-				/*if (new BigDecimal("0").compareTo(firstPaidInPayment) != 0) {
-					String msg = "应收首付款/已收款/时间:" + formattedDate;
-					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应收首付款", msg));
-				} else if (new BigDecimal("0").compareTo(finalPaymentReceived) != 0) {
-					String msg = "应收尾款/已收款/时间:" + formattedDate;
-					items.setPaymentRecord(items.getPaymentRecord().replaceAll("应收尾款", msg));
-				}*/
 			}
 			agentItemsService.updateBatchById(agentItemsList);
 		}
@@ -3822,12 +3829,12 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		}
 		feeCenterService.updateBatchById(feeCenters);
 		List<Long> accBillId = feeCenterList.stream().map(FeeCenter::getAccBillId).collect(Collectors.toList());
-		if (!accBillId.isEmpty()){
+		if (!accBillId.isEmpty()) {
 			List<FinStlBillsItems> stlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
 				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
 				.eq(FinStlBillsItems::getIsDeleted, 0)
 				.in(FinStlBillsItems::getAccBillId, accBillId));
-			if (!stlBillsItemsList.isEmpty()){
+			if (!stlBillsItemsList.isEmpty()) {
 				List<Long> stlPid = stlBillsItemsList.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
 				finStlBillsService.removeByIds(stlPid);
 				finStlBillsItemsService.removeByIds(stlBillsItemsList.stream().map(FinStlBillsItems::getId).collect(Collectors.toList()));
@@ -3839,6 +3846,207 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		return agent;
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public Agent revokeConfirmThePayment(Agent agent) {
+		if (agent.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<FeeCenter> feeCentersList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getStlPid, agent.getId())
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0));
+		if (feeCentersList.isEmpty()) {
+			throw new RuntimeException("未找到费用明细");
+		}
+		List<Long> pids = feeCentersList.stream().map(FeeCenter::getPid).distinct().collect(Collectors.toList());
+		List<FeeCenter> feeCentersWK = feeCentersList.stream().filter(e -> "WK".equals(e.getFeeCode())).collect(Collectors.toList());
+		List<FeeCenter> feeCentersSK = feeCentersList.stream().filter(e -> "SFK".equals(e.getFeeCode())).collect(Collectors.toList());
+		String type = "";
+		if (!feeCentersWK.isEmpty()) {
+			type = "WK";
+		}
+		if (!feeCentersSK.isEmpty()) {
+			type = "SFK";
+		}
+		List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.in(FeeCenter::getPid, pids)
+			.apply("find_in_set(fee_code,'SXF,YDF,YFK," + type + "')")
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0));
+		List<FeeCenter> feeCenterListD = feeCenters.stream().filter(e -> "D".equals(e.getDc())).collect(Collectors.toList());
+		if (feeCenterListD.isEmpty()) {
+			throw new RuntimeException("未找到应收费用明细");
+		}
+		String billNo = feeCenters.stream().map(FeeCenter::getBillNo).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
+		List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
+			.eq(Agent::getTenantId, AuthUtil.getTenantId())
+			.eq(Agent::getIsDeleted, 0)
+			.eq(Agent::getBusinessType, "MYDL")
+			.apply("find_in_set(contract_no,'" + billNo + "')"));
+		if (agentList.isEmpty()) {
+			throw new RuntimeException("未查到贸易代理单据信息");
+		}
+		List<Long> agentIdList = agentList.stream().map(Agent::getId).distinct().collect(Collectors.toList());
+		BigDecimal amountD = feeCenterListD.stream().map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal amount = feeCenterListD.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> "C".equals(e.getDc()) && 0 == e.getStlStatus()).collect(Collectors.toList());
+		if (feeCenterList.isEmpty()) {
+			throw new RuntimeException("未找到应付费用明细");
+		}
+		BigDecimal amountC = feeCenterList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		if (new BigDecimal("0").compareTo(amountD) != 0 && amount.compareTo(amountD) == 0) {
+			BigDecimal amountSub = amountC.subtract(amountD);
+			if (amountSub.compareTo(new BigDecimal("0")) > 0) {
+				AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
+					.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
+					.eq(AdvanceCharge::getIsDeleted, 0)
+					.eq(AdvanceCharge::getCorpId, agentList.get(0).getDomesticConsigneeId()));
+				if (advanceCharge != null) {
+					advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().subtract(amountSub));
+					advanceCharge.setInOverpayment(advanceCharge.getInOverpayment().subtract(amountSub));
+				} else {
+					throw new RuntimeException("未找到国内收货人:" + agentList.get(0).getDomesticConsigneeCname() + "预付款信息");
+				}
+				advanceChargeService.saveOrUpdate(advanceCharge);
+				AdvanceChargeItem advanceChargeItem = new AdvanceChargeItem();
+				advanceChargeItem.setCreateUser(AuthUtil.getUserId());
+				advanceChargeItem.setCreateUserName(AuthUtil.getUserName());
+				advanceChargeItem.setCreateTime(new Date());
+				advanceChargeItem.setPid(advanceCharge.getId());
+				advanceChargeItem.setSrcId(agent.getId());
+				advanceChargeItem.setSrcPid(agent.getId());
+				advanceChargeItem.setOrderNo(agent.getBusinessNo());
+				advanceChargeItem.setOverpayment(amountSub);
+				advanceChargeItem.setOverpaymentType(1);
+				advanceChargeItem.setSrcOrderNo(agent.getBusinessNo());
+				advanceChargeItem.setBillNo(agent.getBusinessNo());
+				advanceChargeItem.setIdentifier(0);
+				advanceChargeItemService.save(advanceChargeItem);
+			} else if (amountSub.compareTo(new BigDecimal("0")) < 0) {
+				FeeCenter feeCenter = feeCenterService.getOne(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, "D")
+					.eq(FeeCenter::getPid, agentList.get(0).getId())
+					.eq(FeeCenter::getFeeCode, "DSK"));
+				if (feeCenter != null) {
+					if (1 == feeCenter.getAccStatus()) {
+						throw new RuntimeException("【代收款】费用明细已生成账单,请先撤销账单");
+					} else {
+						feeCenterService.removeById(feeCenter.getId());
+					}
+				} else {
+					throw new RuntimeException("未找到贸易代理应收【代收款】费用明细");
+				}
+			} else {
+				System.out.println("无差额");
+			}
+		}
+		BigDecimal firstActualPayment = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal finalPaymentInFull = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
+		for (Agent item : agentList) {
+			if (new BigDecimal("0").compareTo(firstActualPayment) != 0) {
+				BigDecimal amountSfk = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode()) && item.getContractNo().equals(e.getBillNo()))
+					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (new BigDecimal("0").compareTo(amountSfk) != 0) {
+					item.setFirstActualPayment(new BigDecimal("0.00"));
+					item.setFirstActualPaymentDate(null);
+					item.setOrderStatus("未付汇");
+					item.setWhetherReceivedBalancePayment("未付汇");
+				}
+			}
+			if (new BigDecimal("0").compareTo(finalPaymentInFull) != 0) {
+				BigDecimal amountWk = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && item.getContractNo().equals(e.getBillNo()))
+					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				item.setFinalPaymentInFull(item.getFinalPaymentInFull().subtract(amountWk));
+				item.setFinalPaymentInFullDate(null);
+				if (item.getFinalPaymentInFull().add(amountWk).compareTo(item.getFinalPaymentPayable()) == 0) {
+					item.setOrderStatus("未付汇");
+					item.setWhetherReceivedBalancePayment("未付汇");
+				}
+			}
+		}
+		List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+			.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+			.eq(AgentItems::getIsDeleted, 0)
+			.in(AgentItems::getPid, agentIdList));
+		if (!agentItemsList.isEmpty()) {
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			Date now = new Date();
+			String formattedDate = sdf.format(now);
+			for (AgentItems items : agentItemsList) {
+				if (ObjectUtils.isNotNull(items.getPaymentRecord())) {
+					String[] arr = items.getPaymentRecord().split(",");
+					String[] newArr = new String[arr.length];
+					for (int i = 0; i <= arr.length; i++) {
+						if (new BigDecimal("0").compareTo(firstActualPayment) != 0) {
+							if (arr[i].contains("应付首付款")) {
+								arr[i] = "【应付首付款】";
+							}
+						} else if (new BigDecimal("0").compareTo(finalPaymentInFull) != 0) {
+							if (arr[i].contains("应付尾款")) {
+								arr[i] = "【应付尾款】";
+							}
+						}
+						newArr[i] = arr[i];
+					}
+					items.setPaymentRecord(String.join(",", newArr));
+					items.setPaymentRecord("【应收首付款】,【应收尾款】,【应付首付款】,【应付尾款】");
+				}
+			}
+			agentItemsService.updateBatchById(agentItemsList);
+		}
+		List<FeeCenter> feeCenters1 = new ArrayList<>();
+		for (FeeCenter item : feeCenterList) {
+			if (0 == item.getStlStatus()) {
+				throw new RuntimeException("费用:" + item.getFeeCnName() + "已撤销");
+			}
+			//费用明细
+			item.setAccBillId(0L);
+			item.setAccBillNo("");
+			item.setAccDate(null);
+			item.setAccAmount(item.getAmount());
+			item.setAccStatus(1);
+			item.setAccById(0L);
+			item.setAccByName("");
+			item.setStlOrgAmount(new BigDecimal("0.00"));
+			item.setStlCurCode("");
+			item.setStlAmount(new BigDecimal("0.00"));
+			item.setStlAmountLoc(new BigDecimal("0.00"));
+			item.setStlStatus(0);
+			item.setStlDate(null);
+			item.setStlById(0L);
+			item.setStlByName("");
+			item.setUnsettledAmount(item.getAmount());
+			item.setStlTtlAmount(new BigDecimal("0.00"));
+			item.setStlBillId(0L);
+			item.setStlBillNo("");
+			feeCenters1.add(item);
+		}
+		feeCenterService.saveOrUpdateBatch(feeCenters1);
+		List<Long> accBillId = feeCenters1.stream().map(FeeCenter::getAccBillId).collect(Collectors.toList());
+		if (!accBillId.isEmpty()) {
+			List<FinStlBillsItems> stlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.in(FinStlBillsItems::getAccBillId, accBillId));
+			if (!stlBillsItemsList.isEmpty()) {
+				List<Long> stlPid = stlBillsItemsList.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
+				finStlBillsService.removeByIds(stlPid);
+				finStlBillsItemsService.removeByIds(stlBillsItemsList.stream().map(FinStlBillsItems::getId).collect(Collectors.toList()));
+			}
+			finAccBillsService.removeByIds(accBillId);
+		}
+		this.updateBatchById(agentList);
+		agent.setOrderStatus("审核通过");
+		updateById(agent);
+		return agent;
+	}
+
 	private FeeCenter assemblyDataSK(String businessType, Agent detail, String type, long lineNo, int sort, long deptId, String deptName, List<BFees> feesList) {
 		FeeCenter feeCenter = new FeeCenter();
 		feeCenter.setFeeType("1");

+ 60 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.java

@@ -184,4 +184,64 @@ public class DispatchVehiclesServiceImpl extends ServiceImpl<DispatchVehiclesMap
 		return R.data(dispatchVehicles);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R revokeDispatchVehicles(DispatchVehicles dispatchVehicles) {
+		if ("1".equals(dispatchVehicles.getWhetherWarehouseEntry())) {
+			throw new RuntimeException("已生成入库信息,撤销失败");
+		}
+		Bills bills = billsMapper.selectById(dispatchVehicles.getPid());
+		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+			List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+				.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0));
+			for (AgentItems items : agentItemsList) {
+				items.setUpdateTime(new Date());
+				items.setUpdateUser(AuthUtil.getUserId());
+				items.setUpdateUserName(AuthUtil.getUserName());
+				items.setWhetherDispatchCar("未派车");
+				items.setDispatchDate(new Date());
+				agentItemsMapper.updateById(items);
+			}
+		}
+		dispatchVehicles.setWhetherDispatchVehicles("0");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		dispatchVehicles.setDispatchVehiclesDate(new Date());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R revokeWarehouseEntry(DispatchVehicles dispatchVehicles) {
+		if (0 == dispatchVehicles.getWhetherWarehousing()) {
+			throw new RuntimeException("次派车信息不予入库");
+		}
+		InOutStorage inOutStorage = inOutStorageService.getOne(new LambdaQueryWrapper<InOutStorage>()
+			.eq(InOutStorage::getDispatchVehiclesId, dispatchVehicles.getId())
+			.eq(InOutStorage::getPid, dispatchVehicles.getPid()));
+		if (inOutStorage != null) {
+			if ("1".equals(inOutStorage.getWhetherInOutStorage())) {
+				throw new RuntimeException("已生成出库,撤销失败");
+			}
+			if ("1".equals(inOutStorage.getConfirmDispatchVehicles())) {
+				throw new RuntimeException("已确认入库,撤销失败");
+			}
+			inOutStorageService.removeById(inOutStorage.getId());
+		} else {
+			throw new RuntimeException("未找到入库信息");
+		}
+		dispatchVehicles.setWhetherWarehouseEntry("0");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
 }

+ 95 - 2
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

@@ -140,7 +140,7 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 					.in(FeeCenter::getPid, ids)
 					.eq(FeeCenter::getDc, "C")
 					.apply("find_in_set(fee_code,'SXF,YDF') and (mblno IS NULL or mblno = '')"));
-				if (!feeCenterTradeList1.isEmpty()){
+				if (!feeCenterTradeList1.isEmpty()) {
 					feeCenterTradeList.addAll(feeCenterTradeList1);
 				}
 				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
@@ -472,7 +472,7 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 					.in(FeeCenter::getPid, ids)
 					.eq(FeeCenter::getDc, "C")
 					.apply("find_in_set(fee_code,'SXF,YDF') and (mblno IS NULL or mblno = '')"));
-				if (!feeCenterTradeList1.isEmpty()){
+				if (!feeCenterTradeList1.isEmpty()) {
 					feeCenterTradeList.addAll(feeCenterTradeList1);
 				}
 				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
@@ -570,4 +570,97 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 		}
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R revokeWarehouseEntry(InOutStorage inOutStorage) {
+		inOutStorage.setConfirmDispatchVehicles("0");
+		inOutStorage.setUpdateTime(new Date());
+		inOutStorage.setUpdateUser(AuthUtil.getUserId());
+		inOutStorage.setUpdateUserName(AuthUtil.getUserName());
+		if ("RK".equals(inOutStorage.getBillType())) {
+			if ("1".equals(inOutStorage.getWhetherInOutStorage())) {
+				throw new RuntimeException("已生成出库信息,撤销失败");
+			}
+			Bills bills = billsMapper.selectById(inOutStorage.getPid());
+			if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+				List<FeeCenter> feeCenterTradeList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getDc, "C")
+					.apply("find_in_set('" + bills.getMblno() + "',mblno)"));
+				if (feeCenterTradeList.isEmpty()) {
+					throw new RuntimeException("未查到提单号:" + bills.getMblno() + "对应贸易代理费用信息");
+				}
+				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+					.eq(AgentItems::getPid, feeCenterTradeList.get(0).getPid())
+					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+					.eq(AgentItems::getIsDeleted, 0));
+				if (agentItemsList.isEmpty()) {
+					throw new RuntimeException("未查到提单号:" + bills.getMblno() + "对应贸易代理明细信息");
+				}
+				List<AgentItems> agentItems = agentItemsList.stream().filter(e -> bills.getMconsigneeCntyName().contains(e.getId() + ""))
+					.collect(Collectors.toList());
+				if (!agentItems.isEmpty()) {
+					for (AgentItems items : agentItems) {
+						items.setUpdateTime(new Date());
+						items.setUpdateUser(AuthUtil.getUserId());
+						items.setUpdateUserName(AuthUtil.getUserName());
+						items.setWhetherComplete("未入库");
+						agentItemsMapper.updateById(items);
+					}
+				}
+			}
+		} else {
+			inOutStorage.setOutStorageDate(null);
+			InOutStorage inStorage = baseMapper.selectById(inOutStorage.getSrcId());
+			BigDecimal quantity = inStorage.getSurplusQuantity();
+			BigDecimal grossWeight = inStorage.getSurplusWeight();
+			inStorage.setSurplusQuantity(quantity.add(inOutStorage.getOutQuantity()));
+			inStorage.setSurplusWeight(grossWeight.add(inOutStorage.getOutWeight()));
+			inStorage.setSurplusGoodsAmount(inStorage.getSurplusWeight().multiply(inOutStorage.getPrice()));
+			inStorage.setUpdateTime(new Date());
+			inStorage.setUpdateUser(AuthUtil.getUserId());
+			inStorage.setUpdateUserName(AuthUtil.getUserName());
+			baseMapper.updateById(inStorage);
+			FeeCenter feeCenter = feeCenterMapper.selectOne(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getDc, "D")
+				.eq(FeeCenter::getFeeCode, "CCF")
+				.eq(FeeCenter::getPid, inOutStorage.getPid())
+				.eq(FeeCenter::getSrcItemId, inOutStorage.getId()));
+			if (feeCenter != null) {
+				if (1 == feeCenter.getAccStatus()) {
+					throw new RuntimeException("仓储费已生成账单,撤销失败");
+				}
+				feeCenterMapper.deleteById(feeCenter.getId());
+			}
+			inOutStorage.setStorageDays(0);
+			inOutStorage.setStorageFeesAmount(new BigDecimal("0.00"));
+		}
+		baseMapper.updateById(inOutStorage);
+		return R.data(inOutStorage);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R revokeOutbound(InOutStorage inOutStorage) {
+		InOutStorage outStorage = baseMapper.selectOne(new LambdaQueryWrapper<InOutStorage>()
+			.eq(InOutStorage::getSrcId, inOutStorage.getId())
+			.eq(InOutStorage::getPid, inOutStorage.getPid()));
+		if (outStorage != null) {
+			if ("1".equals(inOutStorage.getConfirmDispatchVehicles())) {
+				throw new RuntimeException("已确认出库,撤销失败");
+			}
+			baseMapper.deleteById(outStorage.getId());
+		} else {
+			throw new RuntimeException("未找到出库信息");
+		}
+		inOutStorage.setWhetherInOutStorage("0");
+		baseMapper.updateById(inOutStorage);
+		return R.data(inOutStorage);
+	}
+
 }

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/StorageFeeServiceImpl.java

@@ -151,7 +151,7 @@ public class StorageFeeServiceImpl extends ServiceImpl<StorageFeeMapper, Storage
 		List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
 			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FilesCenter::getIsDeleted, 0)
-			.eq(FilesCenter::getBusinessType, "MYDL")
+			.eq(FilesCenter::getBusinessType, "CCF")
 			.eq(FilesCenter::getPid, detail.getId()));
 		detail.setFilesCenterList(!filesCenterList.isEmpty() ? filesCenterList : new ArrayList<>());
 		return detail;

+ 8 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -2540,6 +2540,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockOne.setStoreInventory(stockOne.getBalanceQuantity());
 					stockOne.setInventoryAmount(stockOne.getInventoryAmount().subtract(item.getSendNum().multiply(stockOne.getInventoryCostPrice())));
 					stockOne.setVersion(stockOne.getVersion());
+					if (stockOne.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
+						stockOne.setInventoryCostPrice(stockOne.getInventoryAmount().divide(stockOne.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+					}
 					/*R res = iStockDescService.updateByIdNew(stockOne);
 					if (!res.isSuccess()) {
 						throw new RuntimeException(res.getMsg());
@@ -2727,6 +2730,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockOne.setStoreInventory(stockOne.getBalanceQuantity());
 					stockOne.setInventoryAmount(stockOne.getInventoryAmount().add(item.getSendNum().multiply(stockOne.getInventoryCostPrice())));
 					stockOne.setVersion(stockOne.getVersion());
+					if (stockOne.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
+						stockOne.setInventoryCostPrice(stockOne.getInventoryAmount().divide(stockOne.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+					}
 					pjStockDescArrayList.add(stockOne);
 					/*R res = iStockDescService.updateByIdNew(stockOne);
 					if (!res.isSuccess()) {
@@ -3151,11 +3157,11 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockDesc.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNum()));
 					stockDesc.setStoreInventory(stockDesc.getBalanceQuantity());
 					stockDesc.setInventoryAmount(stockDesc.getInventoryAmount() == null ? new BigDecimal("0.00") : stockDesc.getInventoryAmount().add(item.getCostprie()));
-					if (stockDesc.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
+					/*if (stockDesc.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
 //						BigDecimal amount = ObjectUtils.isNotNull(orderItems.getCostprie()) ? orderItems.getCostprie() : stockDesc.getInventoryAmount();
 						stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 //						stockDesc.setInventoryCostPrice(amount.divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
-					}
+					}*/
 					stockDesc.setVersion(stockOne.getVersion());
 					pjStockDescArrayListUpdate.add(stockDesc);
 				}