wangzhuo 2 лет назад
Родитель
Сommit
f063ae652d
12 измененных файлов с 279 добавлено и 100 удалено
  1. 5 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderStatisticsVo.java
  2. 38 47
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/DeclareCustomsServiceImpl.java
  3. 1 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  4. 10 0
      blade-service/blade-land/src/main/java/org/springblade/land/insurance/controller/InsuranceController.java
  5. 10 0
      blade-service/blade-land/src/main/java/org/springblade/land/insurance/service/IInsuranceService.java
  6. 64 3
      blade-service/blade-land/src/main/java/org/springblade/land/insurance/service/impl/InsuranceServiceImpl.java
  7. 83 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/CustomerProfitItemExcel.java
  8. 2 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java
  9. 1 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java
  10. 18 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  11. 37 36
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  12. 10 9
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

+ 5 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderStatisticsVo.java

@@ -184,4 +184,9 @@ public class OrderStatisticsVo implements Serializable {
 	 */
 	private BigDecimal orderQuantity;
 
+	/**
+	 * 扣项合计
+	 */
+	private BigDecimal feesAmount;
+
 }

+ 38 - 47
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/DeclareCustomsServiceImpl.java

@@ -171,6 +171,7 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			declareCustoms.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 			declareCustoms.setStatus(0);
 			declareCustoms.setAuditStatus("录入");
+			declareCustoms.setDeclareStatus("暂存");
 			baseMapper.insert(declareCustoms);
 		} else {
 			declareCustoms.setUpdateTime(new Date());
@@ -853,12 +854,30 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 		//加载PDF测试文档
 		PdfDocument pdf = new PdfDocument(file.getInputStream());
 
+		//线上地址
+		//创建文件夹
+		File packageFile = new File("/home/minio/file/"+AuthUtil.getTenantId()+"-bladex/upload");
+		//文件夹是否创建成功
+		if (!packageFile.getParentFile().exists()) {
+			boolean a = packageFile.mkdirs();
+			if (a) {
+				System.out.println("文件夹创建成功");
+			} else {
+				System.out.println("文件夹创建失败");
+			}
+		}
 		//保存为Excel文档
-		pdf.saveToFile("D:\\excel\\"+declareCustoms.getSysNo()+".xlsx", FileFormat.XLSX);
+		pdf.saveToFile("/home/minio/file/"+AuthUtil.getTenantId()+"-bladex/upload/"+declareCustoms.getSysNo()+".xlsx", FileFormat.XLSX);
 		pdf.dispose();
+		//根据excel坐标获得数据
+		File f = new File("/home/minio/file/"+AuthUtil.getTenantId()+"-bladex/upload/"+declareCustoms.getSysNo()+".xlsx");
 
+		//本地测试地址
+		/*pdf.saveToFile("D:\\excel\\"+declareCustoms.getSysNo()+".xlsx", FileFormat.XLSX);
+		pdf.dispose();
 		//根据excel坐标获得数据
-		File f = new File("D:\\excel\\"+declareCustoms.getSysNo()+".xlsx");
+		File f = new File("D:\\excel\\"+declareCustoms.getSysNo()+".xlsx");*/
+
 		Workbook wb = readExcel(new FileInputStream(f),f.getName());
 		Row row = null;
 		String[] strings = null;
@@ -873,14 +892,13 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			String preEntryNo = row.getCell(2).toString();//预录入编号
 			strings = preEntryNo.split(":");
 			if (strings.length >= 2){
-				System.out.println("预录入编号======>"+strings[1]);
 				declareCustoms.setPreEntryNo(strings[1]);
 			}
 			String customsNo = row.getCell(3).toString();//海关编号
 			strings = customsNo.split(":");
 			if (strings.length >= 2){
-				System.out.println("海关编号======>"+strings[1]);
 				declareCustoms.setCustomsNo(strings[1]);
+				declareCustoms.setUnifiedNumbering(strings[1]);//统一编号
 			}
 
 			//获取第五行
@@ -891,7 +909,6 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 				Integer lastIndexOf = domesticCustomsNo.lastIndexOf(")");
 				//截取,从'('开始-到')'为下标结束,不包含')'
 				domesticCustomsNo = domesticCustomsNo.substring(6, lastIndexOf);
-				System.out.println("境内收货人海关号======>"+domesticCustomsNo);
 				declareCustoms.setDomesticCustomsNo(domesticCustomsNo);
 			}
 
@@ -903,28 +920,23 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			if (corpsDesc.isSuccess() && corpsDesc.getData() != null){
 				declareCustoms.setDomesticNo(corpsDesc.getData().getId().toString());
 			}
-			System.out.println("境内收货人名称======>"+domesticName);
 			declareCustoms.setDomesticName(domesticName);
 
 			String exitCustoms = row.getCell(3).toString();//进境关别
-			System.out.println("进境关别======>"+exitCustoms);
 			declareCustoms.setExitCustoms(exitCustoms);
+			declareCustoms.setCustomsDeclarationPlace(exitCustoms);//申报地海关
 
 			String importExportDate = row.getCell(5).toString();//进口日期
 			if (ObjectUtil.isNotEmpty(importExportDate) && importExportDate.length() == 8){
 				Date importExport = getDate(importExportDate);
 				declareCustoms.setImportExportDate(importExport);
-				System.out.println("进口日期======>"+importExport);
 			}
 			String declareDate = row.getCell(7).toString();//申报日期
 			if (ObjectUtil.isNotEmpty(declareDate) && declareDate.length() == 8){
 				Date declare = getDate(declareDate);
 				declareCustoms.setDeclareDate(declare);
-				System.out.println("申报日期======>"+declare);
-
 			}
 			String filingNo = row.getCell(10).toString();//备案号
-			System.out.println("备案号======>"+filingNo);
 			declareCustoms.setFilingNo(filingNo);
 
 			//获取第7行
@@ -935,7 +947,6 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 				Integer lastIndexOf = abroadConsigneeShipper.lastIndexOf(")");
 				//截取,从'('开始-到')'为下标结束,不包含')'
 				abroadConsigneeShipper = abroadConsigneeShipper.substring(6, lastIndexOf);
-				System.out.println("境外发货人海关号======>"+abroadConsigneeShipper);
 				declareCustoms.setAbroadCustomsNo(abroadConsigneeShipper);
 			}
 
@@ -947,25 +958,27 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			if (corpsDesc.isSuccess() && corpsDesc.getData() != null){
 				declareCustoms.setAbroadNo(corpsDesc.getData().getId().toString());
 			}
-			System.out.println("境外发货人名称======>"+abroadName);
 			declareCustoms.setAbroadName(abroadName);
 
 			String transportType = row.getCell(3).toString();//运输方式
-			System.out.println("运输方式======>"+transportType);
+
 			declareCustoms.setTransportType(transportType);
 
 			String conveyanceName = row.getCell(5).toString();//运输工具名称及航次号
-			System.out.println("运输工具名称及航次号======>"+conveyanceName);
-			declareCustoms.setConveyanceName(conveyanceName);
+			strings = conveyanceName.split("/");
+			if (strings.length >= 2){
+				declareCustoms.setConveyanceName(strings[0]);
+				declareCustoms.setVoyageNo(strings[1]);
+			}
 
 			String deliveryNumbers = row.getCell(7).toString();//提运单号
-			System.out.println("提运单号======>"+deliveryNumbers);
 			declareCustoms.setDeliveryNumbers(deliveryNumbers);
 
 			if (declareCustoms.getImportExportSigns().equals("BGJK")){
-				String storagePlaceGoods = row.getCell(10).toString();//货物存放地点
-				System.out.println("货物存放地点======>"+storagePlaceGoods);
-				declareCustoms.setStoragePlaceGoods(storagePlaceGoods);
+				if (ObjectUtil.isNotEmpty(row.getCell(10))){
+					String storagePlaceGoods = row.getCell(10).toString();//货物存放地点
+					declareCustoms.setStoragePlaceGoods(storagePlaceGoods);
+				}
 			}
 
 			//获取第9行
@@ -976,7 +989,6 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 				Integer lastIndexOf = consumptionUnitCustomsNo.lastIndexOf(")");
 				//截取,从'('开始-到')'为下标结束,不包含')'
 				consumptionUnitCustomsNo = consumptionUnitCustomsNo.substring(7, lastIndexOf);
-				System.out.println("消费使用单位海关号======>"+consumptionUnitCustomsNo);
 				declareCustoms.setConsumptionUnitCustomsNo(consumptionUnitCustomsNo);
 			}
 
@@ -988,42 +1000,35 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			if (corpsDesc.isSuccess() && corpsDesc.getData() != null){
 				declareCustoms.setConsumptionUnitNo(corpsDesc.getData().getId().toString());
 			}
-			System.out.println("消费使用单位名称======>"+consumptionUnitName);
 			declareCustoms.setConsumptionUnitName(consumptionUnitName);
 
 			String superviseMode = row.getCell(3).toString();//监管方式
-			System.out.println("监管方式======>"+superviseMode);
 			declareCustoms.setSuperviseMode(superviseMode);
 
 			String expropriationExemptionNature = row.getCell(5).toString();//征免性质
-			System.out.println("征免性质======>"+expropriationExemptionNature);
 			declareCustoms.setExpropriationExemptionNature(expropriationExemptionNature);
 
 			String licenseKey = row.getCell(7).toString();//许可证号
-			System.out.println("许可证号======>"+licenseKey);
 			declareCustoms.setLicenseKey(licenseKey);
 
 			if (declareCustoms.getImportExportSigns().equals("BGJK")){
-				String portDepartureName = row.getCell(10).toString();//启运港名称
-				declareCustoms.setPortDepartureId(getPortId(portDepartureName));//启运港id
-				System.out.println("启运港名称======>"+portDepartureName);
-				declareCustoms.setPortDepartureName(portDepartureName);
+				if (ObjectUtil.isNotEmpty(row.getCell(10))){
+					String portDepartureName = row.getCell(10).toString();//启运港名称
+					declareCustoms.setPortDepartureId(getPortId(portDepartureName));//启运港id
+					declareCustoms.setPortDepartureName(portDepartureName);
+				}
 			}
 
 			//获取第12行
 			row = sheet.getRow(11);
 			String contractAgreementNo = row.getCell(2).toString();//合同协议号
-			System.out.println("合同协议号======>"+contractAgreementNo);
 			declareCustoms.setContractAgreementNo(contractAgreementNo);
 
 			String tradeCountryName = row.getCell(3).toString();//贸易国名称
 			declareCustoms.setTradeCountryId(getPortId(tradeCountryName));//贸易国id
-			System.out.println("贸易国名称======>"+tradeCountryName);
 			declareCustoms.setTradeCountryName(tradeCountryName);
 
 			String countryOriginName = row.getCell(5).toString();//启运国或运抵国名称
-			System.out.println("启运国或运抵国名称======>"+countryOriginName);
-			System.out.println("启运国或运抵国id======>"+getPortId(countryOriginName));
 			if (declareCustoms.getImportExportSigns().equals("BGJK")){
 				declareCustoms.setCountryOriginId(getPortId(countryOriginName));//启运国或运抵国id
 				declareCustoms.setCountryOriginName(countryOriginName);
@@ -1032,10 +1037,7 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 				declareCustoms.setOuntryArrivalName(countryOriginName);
 			}
 
-
-
 			String stopOverHarborName = row.getCell(7).toString();//经停港或指运港名称
-			System.out.println("经停港名称======>"+stopOverHarborName);
 			if (declareCustoms.getImportExportSigns().equals("BGJK")){
 				declareCustoms.setStopOverHarborId(getPortId(stopOverHarborName));//经停港或指运港id
 				declareCustoms.setStopOverHarborName(stopOverHarborName);
@@ -1044,62 +1046,51 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 				declareCustoms.setPortDestinationName(stopOverHarborName);
 			}
 
-
 			String portEntryName = row.getCell(10).toString();//入境口岸名称
 			declareCustoms.setPortEntryId(getPortId(portEntryName));//入境口岸id
-			System.out.println("入境口岸名称======>"+portEntryName);
 			declareCustoms.setPortDepartureName(portEntryName);
 
 			//获取第14行
 			row = sheet.getRow(13);
 			String packing = row.getCell(2).toString();//包装种类
-			System.out.println("包装种类======>"+packing);
 			declareCustoms.setPacking(packing);
 
 			String number = row.getCell(3).toString();//件数
 			if (ObjectUtil.isNotEmpty(number)){
-				System.out.println("件数======>"+number);
 				declareCustoms.setNumber(new BigDecimal(number));
 			}
 
 			String grossWeight = row.getCell(4).toString();//毛重
 			if (ObjectUtil.isNotEmpty(grossWeight)){
-				System.out.println("毛重======>"+grossWeight);
 				declareCustoms.setGrossWeight(new BigDecimal(grossWeight));
 			}
 
 			String netWeight = row.getCell(5).toString();//净重
 			if (ObjectUtil.isNotEmpty(netWeight)){
-				System.out.println("净重======>"+netWeight);
 				declareCustoms.setNetWeight(new BigDecimal(netWeight));
 			}
 
 			String transactionMode = row.getCell(6).toString();//成交方式
-			System.out.println("成交方式======>"+transactionMode);
 			declareCustoms.setTransactionMode(transactionMode);
 
 			String freight = row.getCell(7).toString();//运费
 			if (ObjectUtil.isNotEmpty(freight)){
-				System.out.println("运费======>"+freight);
 				declareCustoms.setFreight(new BigDecimal(freight));
 			}
 
 			String insurance = row.getCell(9).toString();//保费
 			if (ObjectUtil.isNotEmpty(insurance)){
-				System.out.println("保费======>"+insurance);
 				declareCustoms.setInsurance(new BigDecimal(insurance));
 			}
 
 			String sundryFees = row.getCell(11).toString();//杂费
 			if (ObjectUtil.isNotEmpty(sundryFees)){
-				System.out.println("件数======>"+sundryFees);
 				declareCustoms.setNumber(new BigDecimal(sundryFees));
 			}
 
 			//获取第18行
 			row = sheet.getRow(17);
 			String remark = row.getCell(2).toString();//备注
-			System.out.println("备注======>"+remark);
 			declareCustoms.setRemark(remark);
 
 		}

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

@@ -330,8 +330,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	}
 
 	@Override
-	@GlobalTransactional(timeoutMills = 120000000)
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R submit(Delivery delivery) {
 
 		Long deliveryId = delivery.getId();

+ 10 - 0
blade-service/blade-land/src/main/java/org/springblade/land/insurance/controller/InsuranceController.java

@@ -131,4 +131,14 @@ public class InsuranceController extends BladeController {
 		return R.data(detail);
 	}
 
+	/**
+	 * 保险 统计
+	 **/
+	@GetMapping("/InsuranceCount")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "保险统计", notes = "传入insurance")
+	public R InsuranceCount(Insurance insurance){
+		return R.data(insuranceService.InsuranceCount(insurance));
+	}
+
 }

+ 10 - 0
blade-service/blade-land/src/main/java/org/springblade/land/insurance/service/IInsuranceService.java

@@ -23,6 +23,8 @@ import org.springblade.land.insurance.vo.InsuranceVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.Map;
+
 
 /**
  * 陆运保险主表 服务类
@@ -74,4 +76,12 @@ public interface IInsuranceService extends IService<Insurance> {
 	 */
 	Insurance passCheck(Insurance insurance);
 
+	/**
+	 * 保险 统计
+	 *
+	 * @param insurance
+	 * @return
+	 **/
+	Map<String,Object> InsuranceCount(Insurance insurance);
+
 }

+ 64 - 3
blade-service/blade-land/src/main/java/org/springblade/land/insurance/service/impl/InsuranceServiceImpl.java

@@ -57,9 +57,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 陆运保险主表 服务实现类
@@ -154,9 +152,11 @@ public class InsuranceServiceImpl extends ServiceImpl<InsuranceMapper, Insurance
 					lambdaQueryWrapper.eq(Insurance::getFleetId, corpsDesc.getId());//车队
 				}else if (role.contains(LandConst.ROLE_BXGS)){//保险公司只能看自己公司
 					lambdaQueryWrapper.eq(Insurance::getInsuranceCompanyId, corpsDesc.getId());
+					lambdaQueryWrapper.and(i -> i.like(Insurance::getStatus, 4).or().like(Insurance::getStatus, 6));
 				}
 			}
 		}
+		lambdaQueryWrapper.orderByDesc(Insurance::getCreateTime);
 
 		IPage<Insurance> pages = baseMapper.selectPage(Condition.getPage(query), lambdaQueryWrapper);
 
@@ -311,6 +311,67 @@ public class InsuranceServiceImpl extends ServiceImpl<InsuranceMapper, Insurance
 	}
 
 	/**
+	 * 保险 统计
+	 *
+	 * @param insurance
+	 * @return
+	 **/
+	public Map<String,Object> InsuranceCount(Insurance insurance){
+		long all = 0;
+		long zero = 0;
+		long one = 0;
+		long two = 0;
+		long three = 0;
+		long four = 0;
+		long five = 0;
+		long six = 0;
+
+		LambdaQueryWrapper<Insurance> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.like(ObjectUtil.isNotEmpty(insurance.getCarNumberName()), Insurance::getCarNumberId, insurance.getCarNumberName())//车号
+			.eq(ObjectUtil.isNotEmpty(insurance.getStatus()), Insurance::getStatus, insurance.getStatus());//状态
+
+		//根据当前登录人获得客户联系人
+		CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+		if (ObjectUtil.isNotEmpty(corpsAttn)){
+			//根据客户联系人获得客户
+			CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+			if (ObjectUtil.isNotEmpty(corpsDesc)){
+				String role = AuthUtil.getUserRole();
+				if (role.contains(LandConst.ROLE_CD)){//车队只能看自己车队
+					lambdaQueryWrapper.eq(Insurance::getFleetId, corpsDesc.getId());//车队
+				}else if (role.contains(LandConst.ROLE_BXGS)){//保险公司只能看自己公司
+					lambdaQueryWrapper.eq(Insurance::getInsuranceCompanyId, corpsDesc.getId());
+					lambdaQueryWrapper.and(i -> i.like(Insurance::getStatus, 4).or().like(Insurance::getStatus, 6));
+				}
+			}
+		}
+
+		List<Insurance> list = baseMapper.selectList(lambdaQueryWrapper);
+
+		if (ObjectUtil.isNotEmpty(list)) {
+			all = list.size();//全部
+			zero = list.stream().filter(item -> item.getStatus() == 0).count();//未获取
+			one = list.stream().filter(item -> item.getStatus() == 1).count();//未确认
+			two = list.stream().filter(item -> item.getStatus() == 2).count();//已确认
+			three = list.stream().filter(item -> item.getStatus() == 3).count();//未受理
+			four = list.stream().filter(item -> item.getStatus() == 4).count();//已受理
+			five = list.stream().filter(item -> item.getStatus() == 5).count();//未签单
+			six = list.stream().filter(item -> item.getStatus() == 6).count();//已完成
+		}
+
+		Map<String, Object> data = new HashMap<>();
+		data.put("all", all);
+		data.put("zero", zero);
+		data.put("one", one);
+		data.put("two", two);
+		data.put("three", three);
+		data.put("four", four);
+		data.put("five", five);
+		data.put("six", six);
+		return data;
+	}
+
+	/**
 	 * 生成账单明细
 	 */
 	public void paymentApply(Insurance detail){

+ 83 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/CustomerProfitItemExcel.java

@@ -0,0 +1,83 @@
+package org.springblade.purchase.sales.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 统计分析 客户利润明细导出实体类
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class CustomerProfitItemExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 日期
+	 */
+	@ExcelProperty(value = "日期")
+	private Date createTime;
+
+	/**
+	 * 销售单号
+	 */
+	@ExcelProperty(value = "销售单号")
+	private String orderNo;
+
+	/**
+	 * 数量
+	 */
+	@ExcelProperty(value = "数量")
+	private Integer quantity;
+
+	/**
+	 * 金额
+	 */
+	@ExcelProperty(value = "金额")
+	private BigDecimal amount;
+
+	/**
+	 * 到货数量
+	 */
+	@ExcelProperty(value = "到货数量")
+	private BigDecimal actualQuantity;
+
+	/**
+	 * 到货金额
+	 */
+	@ExcelProperty(value = "到货金额")
+	private BigDecimal arrivalAmount;
+
+	/**
+	 * 扣项合计
+	 */
+	@ExcelProperty(value = "扣项合计")
+	private BigDecimal feesAmount;
+
+	/**
+	 * 返利
+	 */
+	@ExcelProperty(value = "返利")
+	private BigDecimal thisUsedProfit;
+
+	/**
+	 * 毛利额
+	 */
+	@ExcelProperty(value = "毛利额")
+	private BigDecimal netGrossProfit;
+
+	/**
+	 * 订单运费
+	 */
+	@ExcelProperty(value = "订单运费")
+	private BigDecimal predictOceanFreight;
+}

+ 2 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -1253,8 +1253,8 @@ public class ExportOrderController extends BladeController {
 			ExcelUtil.export(response, "发货业务员明细统计", "发货客户明细统计", excelList, OrderStatisticsTwoExcel.class);
 		} else if ("customerProfitItem".equals(statisticsVo.getIdentification())) {//客户利润明细导出
 			list = orderService.customerProfitItemExport(statisticsVo);
-			List<OrderStatisticsThreeExcel> excelList = BeanUtil.copy(list, OrderStatisticsThreeExcel.class);
-			ExcelUtil.export(response, "客户利润明细统计", "客户利润明细统计", excelList, OrderStatisticsThreeExcel.class);
+			List<CustomerProfitItemExcel> excelList = BeanUtil.copy(list, CustomerProfitItemExcel.class);
+			ExcelUtil.export(response, "客户利润明细统计", "客户利润明细统计", excelList, CustomerProfitItemExcel.class);
 		} else if ("salesmanProfitItem".equals(statisticsVo.getIdentification())) {//业务员利润明细导出
 			list = orderService.salesmanProfitItemExport(statisticsVo);
 			List<OrderStatisticsThreeExcel> excelList = BeanUtil.copy(list, OrderStatisticsThreeExcel.class);

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -104,7 +104,7 @@ public class OrderDescClient implements IOrderDescClient {
 	@PostMapping(GET_BY_ORDER_NO)
 	public Order getByOrder(Order order) {
 		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
-		if (ObjectUtils.isNotNull(order)){
+		if (ObjectUtils.isNotNull(order.getTenantId())){
 			orderLambdaQueryWrapper.eq(Order::getTenantId, order.getTenantId());
 		}else{
 			orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());

+ 18 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml

@@ -1627,12 +1627,15 @@ ORDER BY
                     '${item}'
                 </foreach>
             </if>
-            <if test="statisticsVo.chargeMember != null and statisticsVo.chargeMember != ''">
+            <if test='statisticsVo.chargeMember != null and statisticsVo.chargeMember != "" and statisticsVo.chargeMember != "0"'>
                 and BO.charge_member in
                 <foreach item="member" index="index" collection="chargeMember.split(',')" open="(" separator="," close=")">
                     '${member}'
                 </foreach>
             </if>
+            <if test='statisticsVo.chargeMember != null and statisticsVo.chargeMember != "" and statisticsVo.chargeMember == "0"'>
+                and BO.charge_member IS NULL
+            </if>
             <if test="statisticsVo.date != null and statisticsVo.date[0] !=null and statisticsVo.date[0] != ''">
                 and BO.receipt_time &gt;= #{statisticsVo.date[0]}
             </if>
@@ -1919,6 +1922,7 @@ ORDER BY
             BO.debit_amount AS amount,
             BOI.actualQuantity AS actualQuantity,
             Round(BOI.arrivalAmount,2) AS arrivalAmount,
+            IFNULL(BOF.feesAmount, 0) AS feesAmount,
             BO.this_used_profit AS thisUsedProfit,
             BO.gross_profit AS netGrossProfit,
             BO.predict_ocean_freight AS predictOceanFreight
@@ -1938,6 +1942,19 @@ ORDER BY
             GROUP BY
                 pid
         ) BOI ON BOI.pid = BO.id
+        LEFT JOIN (
+            SELECT
+                B.pid,
+                IFNULL( sum( B.amount ), 0 ) AS feesAmount
+            FROM
+                business_order_fees B
+            LEFT JOIN basic_fees_desc BFD ON BFD.id = B.item_id
+            WHERE
+                B.is_deleted = 0
+                AND BFD.id != '1513406322731696129'
+            GROUP BY
+                pid
+        ) BOF ON BOF.pid = BO.id
         LEFT JOIN basic_corps_desc BCD ON BCD.id = BO.corp_id
         LEFT JOIN basic_goods_desc BGD ON BGD.id = BOI.item_id
         <where>

+ 37 - 36
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1094,18 +1094,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					.eq(OrderItems::getPid, salesOrder.getId())
 					.eq(OrderItems::getIsDeleted, 0);
 				List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+
+				//从缓存中获得库存
+				redisClient.basicData("all");
+				List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+
 				if (CollectionUtils.isNotEmpty(orderItems)) {
 					orderItems.forEach(e -> {
-						StockGoods stockGoods = new StockGoods();
-						stockGoods.setCorpId(e.getCorpId());
-						stockGoods.setGoodsId(e.getItemId());
-						stockGoods.setTenantId(SecureUtil.getTenantId());
-						List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
-						if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
-							throw new SecurityException("锁定库存失败:未查询到库存 或者 存在多条库存记录");
-						}
 						// 开始锁定库存,减少可用
-						StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+						StockGoods oneStock = stockGoodsList.stream().filter(s ->
+							s.getGoodsId().equals(e.getItemId())
+								&& s.getCorpId().equals(e.getCorpId())
+								&& s.getTenantId().equals(SecureUtil.getTenantId())
+						).findFirst().orElse(null);
 						if (oneStock == null) {
 							throw new SecurityException("锁定库存失败:未查询到库存信息");
 						}
@@ -1533,18 +1534,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				.eq(OrderItems::getPid, order.getId())
 				.eq(OrderItems::getIsDeleted, 0);
 			List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+
+			//从缓存中获得库存
+			redisClient.basicData("all");
+			List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+
 			if (CollectionUtils.isNotEmpty(orderItems)) {
 				orderItems.forEach(e -> {
-					StockGoods stockGoods = new StockGoods();
-					stockGoods.setCorpId(e.getCorpId());
-					stockGoods.setGoodsId(e.getItemId());
-					stockGoods.setTenantId(SecureUtil.getTenantId());
-					List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
-					if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
-						throw new SecurityException("驳回失败:未查询到库存 或者 存在多条库存记录");
-					}
 					// 开始锁定库存,减少可用
-					StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+					StockGoods oneStock = stockGoodsList.stream().filter(s ->
+						s.getGoodsId().equals(e.getItemId())
+							&& s.getCorpId().equals(e.getCorpId())
+							&& s.getTenantId().equals(SecureUtil.getTenantId())
+					).findFirst().orElse(null);
 					if (oneStock == null) {
 						throw new SecurityException("驳回失败:未查询到库存信息");
 					}
@@ -1599,18 +1601,20 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				.eq(OrderItems::getPid, orderMessage.getId())
 				.eq(OrderItems::getIsDeleted, 0);
 			List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+
+			//从缓存中获得库存
+			redisClient.basicData("all");
+			List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+
 			if (CollectionUtils.isNotEmpty(orderItems)) {
 				orderItems.forEach(e -> {
-					StockGoods stockGoods = new StockGoods();
-					stockGoods.setCorpId(e.getCorpId());
-					stockGoods.setGoodsId(e.getItemId());
-					stockGoods.setTenantId(SecureUtil.getTenantId());
-					List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
-					if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
-						throw new SecurityException("撤销失败:未查询到库存 或者 存在多条库存记录");
-					}
 					// 开始锁定库存,减少可用
-					StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+					// 开始锁定库存,减少可用
+					StockGoods oneStock = stockGoodsList.stream().filter(s ->
+						s.getGoodsId().equals(e.getItemId())
+							&& s.getCorpId().equals(e.getCorpId())
+							&& s.getTenantId().equals(SecureUtil.getTenantId())
+					).findFirst().orElse(null);
 					if (oneStock == null) {
 						throw new SecurityException("撤销失败:未查询到库存信息");
 					}
@@ -1817,16 +1821,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 				if (CollectionUtils.isNotEmpty(orderItems)) {
 					orderItems.forEach(e -> {
-						StockGoods stockGoods = new StockGoods();
-						stockGoods.setCorpId(e.getCorpId());
-						stockGoods.setGoodsId(e.getItemId());
-						stockGoods.setTenantId(SecureUtil.getTenantId());
-						List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
-						if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
-							throw new SecurityException("撤销失败:未查询到库存 或者 存在多条库存记录");
-						}
 						// 开始锁定库存,减少可用
-						//StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
 						StockGoods oneStock = stockGoodsList.stream().filter(s ->
 							s.getGoodsId().equals(e.getItemId())
 							&& s.getCorpId().equals(e.getCorpId())
@@ -2165,6 +2160,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	 */
 	@Override
 	public IPage<OrderStatisticsVo> salesmanStatisticsItem(IPage<OrderStatisticsVo> page, OrderStatisticsVo statisticsVo) {
+		if (ObjectUtil.isEmpty(statisticsVo.getChargeMember())){
+			statisticsVo.setChargeMember("0");
+		}
 		return page.setRecords(baseMapper.salesmanStatisticsItem(page, statisticsVo, statisticsVo.getBrand(), statisticsVo.getChargeMember()));
 	}
 
@@ -2181,6 +2179,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	 */
 	@Override
 	public List<OrderStatisticsVo> salesmanStatisticsItemExport(OrderStatisticsVo statisticsVo) {
+		if (ObjectUtil.isEmpty(statisticsVo.getChargeMember())){
+			statisticsVo.setChargeMember("0");
+		}
 		return baseMapper.salesmanStatisticsItem(null, statisticsVo, statisticsVo.getBrand(), statisticsVo.getChargeMember());
 	}
 

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

@@ -937,18 +937,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				.eq(OrderItems::getPid, order.getId())
 				.eq(OrderItems::getIsDeleted, 0);
 			List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+
+			//从缓存中获得库存
+			redisClient.basicData("all");
+			List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+
 			if (CollectionUtils.isNotEmpty(orderItems)) {
 				orderItems.forEach(e -> {
-					StockGoods stockGoods = new StockGoods();
-					stockGoods.setCorpId(e.getCorpId());
-					stockGoods.setGoodsId(e.getItemId());
-					stockGoods.setTenantId(SecureUtil.getTenantId());
-					List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
-					if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
-						throw new SecurityException("撤销失败:未查询到库存 或者 存在多条库存记录");
-					}
 					// 开始锁定库存,减少可用
-					StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+					StockGoods oneStock = stockGoodsList.stream().filter(s ->
+						s.getGoodsId().equals(e.getItemId())
+							&& s.getCorpId().equals(e.getCorpId())
+							&& s.getTenantId().equals(SecureUtil.getTenantId())
+					).findFirst().orElse(null);
 					if (oneStock == null) {
 						throw new SecurityException("撤销失败:未查询到库存信息");
 					}