Browse Source

2024年12月23日17:32:39

纪新园 1 year ago
parent
commit
4efb882903
24 changed files with 719 additions and 17 deletions
  1. 15 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/ContainersCommodity.java
  2. 4 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
  3. 5 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
  4. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsAttnController.java
  5. 2 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/accountManagement/controller/AccountManagementController.java
  6. 2 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/controller/BrandDescController.java
  7. 2 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsDescController.java
  8. 2 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/controller/GoodsDescController.java
  9. 12 8
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  10. 3 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  11. 176 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/controller/LargeScreenYcpApiController.java
  12. 18 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/dto/MonthlySalesTrend.java
  13. 44 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/service/ApiService.java
  14. 397 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/service/impl/ApiServiceImpl.java
  15. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.java
  16. 6 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.xml
  17. 2 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/IStockDescService.java
  18. 5 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/impl/StockDescServiceImpl.java
  19. 1 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/storage/controller/StorageDescController.java
  20. 5 0
      blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
  21. 3 0
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamServiceMapper.java
  22. 3 0
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamServiceMapper.xml
  23. 2 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/IParamServiceService.java
  24. 5 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceServiceImpl.java

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

@@ -338,6 +338,21 @@ public class ContainersCommodity implements Serializable {
 	 */
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
+	/**
+	 * CUSCODE
+	 */
+	@ApiModelProperty(value = "CUSCODE")
+	private String cusCode;
+	/**
+	 * ncm
+	 */
+	@ApiModelProperty(value = "ncm")
+	private String ncm;
+	/**
+	 * 包装等级
+	 */
+	@ApiModelProperty(value = "包装等级")
+	private String packingLevel;
 
 
 }

+ 4 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java

@@ -76,6 +76,7 @@ public interface ISysClient {
 	String UPDATE_BY_DEPT = API_PREFIX + "/updateByDept";
 	String GET_DEPT_LIST = API_PREFIX + "/getDeptList";
 	String GET_TENANT_IDS = API_PREFIX + "/getTenantIds";
+	String GET_PARAM_SERVICE_SHIPPING_FEE = API_PREFIX + "/getParamServiceShippingFee";
 
 
 	/**
@@ -386,4 +387,7 @@ public interface ISysClient {
 
 	@GetMapping(GET_TENANT_IDS)
 	String getTenantIds(@RequestParam("paramKey") String paramKey);
+
+	@GetMapping(GET_PARAM_SERVICE_SHIPPING_FEE)
+	String getParamServiceShippingFee(@RequestParam("tenantId") String tenantId,@RequestParam("paramKey") String paramKey);
 }

+ 5 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java

@@ -210,4 +210,9 @@ public class ISysClientFallback implements ISysClient {
 		return "";
 	}
 
+	@Override
+	public String getParamServiceShippingFee(String tenantId, String paramKey) {
+		return "";
+	}
+
 }

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

@@ -72,6 +72,7 @@ public class BCorpsAttnController extends BladeController {
 		LambdaQueryWrapper<BCorpsAttn> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(BCorpsAttn::getTenantId, AuthUtil.getTenantId())
 			.eq(BCorpsAttn::getIsDeleted,0)
+			.eq(ObjectUtils.isNotNull(bCorpsAttn.getPid()) ,BCorpsAttn::getPid,bCorpsAttn.getPid())
 			.like(ObjectUtils.isNotNull(bCorpsAttn.getCname()) , BCorpsAttn::getCname,bCorpsAttn.getCname())
 			.like(ObjectUtils.isNotNull(bCorpsAttn.getCode()) , BCorpsAttn::getCode,bCorpsAttn.getCode())
 			.like(ObjectUtils.isNotNull(bCorpsAttn.getEmail()) , BCorpsAttn::getEmail,bCorpsAttn.getEmail())

+ 2 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/accountManagement/controller/AccountManagementController.java

@@ -119,7 +119,7 @@ public class AccountManagementController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入accountManagement")
 	public R update(@Valid @RequestBody PjAccountManagement accountManagement) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,删除失败");
 		}
 		if (accountManagement.getId() == null) {
@@ -152,7 +152,7 @@ public class AccountManagementController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,删除失败");
 		}
 		List<Long> list = Func.toLongList(ids);

+ 2 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/controller/BrandDescController.java

@@ -167,7 +167,7 @@ public class BrandDescController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入brandDesc")
 	public R update(@Valid @RequestBody PjBrandDesc brandDesc) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,请联系管理员");
 		}
 		if (brandDesc.getId() == null) {
@@ -202,7 +202,7 @@ public class BrandDescController extends BladeController {
 	@ApiOperation(value = "删除", notes = "传入ids")
 	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,请联系管理员");
 		}
 		List<Long> list = Func.toLongList(ids);

+ 2 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsDescController.java

@@ -187,7 +187,7 @@ public class CorpsDescController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入corpsDesc")
 	@Transactional(rollbackFor = Exception.class)
 	public R update(@Valid @RequestBody PjCorpsDesc corpsDesc) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,删除失败");
 		}
 		if (corpsDesc.getId() == null) {
@@ -254,7 +254,7 @@ public class CorpsDescController extends BladeController {
 	@Transactional(rollbackFor = Exception.class)
 	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,删除失败");
 		}
 		List<Long> list = Func.toLongList(ids);

+ 2 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/controller/GoodsDescController.java

@@ -185,7 +185,7 @@ public class GoodsDescController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入goods")
 	public R update(@Valid @RequestBody PjGoodsDesc goodsDesc) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,请联系管理员");
 		}
 		if (goodsDesc.getId() == null) {
@@ -238,7 +238,7 @@ public class GoodsDescController extends BladeController {
 	@ApiOperation(value = "删除", notes = "传入ids")
 	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,请联系管理员");
 		}
 		List<Long> list = Func.toLongList(ids);

+ 12 - 8
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -3190,7 +3190,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					if (stockOne.getBalanceQuantityFinancing().compareTo(redeemNum) < 0) {
 						throw new RuntimeException("商品:" + goodsDesc.getCname() + "剩余融资库存小于融资单剩余融资数量");
 					}
-					stockOne.setBalanceQuantityHave(stockOne.getBalanceQuantityHave().subtract(redeemNum));
+					stockOne.setBalanceQuantityHave(stockOne.getBalanceQuantityHave().add(redeemNum));
 					stockOne.setBalanceQuantityFinancing(stockOne.getBalanceQuantityFinancing().subtract(redeemNum));
 					stockOne.setVersion(stockOne.getVersion());
 					pjStockDescArrayList.add(stockOne);
@@ -3846,24 +3846,25 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	}
 
 	@Override
-	public List<PjOrder> getTotalYear(String tenantId,String year) {
-		return baseMapper.getTotalYear(tenantId,year);
+	public List<PjOrder> getTotalYear(String tenantId, String year) {
+		return baseMapper.getTotalYear(tenantId, year);
 	}
 
 	@Override
 	public List<PjOrder> getTotalMonth(String tenantId, String year, String month) {
-		return baseMapper.getTotalMonth(tenantId,year,month);
+		return baseMapper.getTotalMonth(tenantId, year, month);
 	}
 
 	/**
 	 * 按租户号获取销售数据
+	 *
 	 * @param tenantId 租户号
-	 * @param type 空 全部 1本日 2本月 3本年 4三个月
+	 * @param type     空 全部 1本日 2本月 3本年 4三个月
 	 * @return
 	 */
 	@Override
 	public List<PjOrder> selectPjOrderList(String tenantId, String type) {
-		return baseMapper.selectPjOrderList(tenantId,type);
+		return baseMapper.selectPjOrderList(tenantId, type);
 	}
 
 	/**
@@ -4273,6 +4274,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setTotalMoney(new BigDecimal("0.00"));
 			}
 		} else if (order.getBsType().equals(OrderTypeEnum.FINANCING.getType())) {
+			if (ObjectUtils.isNull(statu) || "0".equals(statu) || "0".equals(order.getWhetherFinancing())) {
+				throw new RuntimeException("该单据未融资单据,请查看配置是否正确");
+			}
 			//仓库名称
 			/*if (ObjectUtils.isNotNull(order.getStorageId())) {
 				PjStorageDesc storageDesc = storageDescMapper.selectById(order.getStorageId());
@@ -4410,8 +4414,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setSalesAmount(new BigDecimal("0.00"));
 				order.setTotalMoney(new BigDecimal("0.00"));
 			}
-			if (ObjectUtils.isNotNull(statu) && "1".equals(statu) && "1".equals(order.getWhetherFinancing()) &&
-				"录入".equals(order.getStatus())) {
+			if (ObjectUtils.isNotNull(statu) && "1".equals(statu) && "1".equals(order.getWhetherFinancing())) {
 				String proportion = sysClient.getParamService("first.month.proportion");
 				String[] arr = proportion.split(":");
 				BigDecimal a = new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32);
@@ -4424,6 +4427,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					throw new RuntimeException("使用预付款金额:" + order.getUseAdvanceChargeAmount() + "不能大于订单融资金额:" + fundingAmount);
 				}
 				order.setBondAmount(bondAmount);
+				order.setPrimaryBondAmount(bondAmount);
 				order.setFundingAmount(fundingAmount);
 				order.setPrimaryFundingAmount(fundingAmount);
 			}

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

@@ -849,6 +849,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 								stockOne.setBalanceQuantityFinancing(stockOne.getBalanceQuantityFinancing().subtract(sendNum));
 							}
 						}else{
+							if (stockOne.getBalanceQuantityHave().compareTo(item.getSendNum()) < 0) {
+								throw new RuntimeException("商品:" + goodsDesc.getCname() + "库存不足,出库失败");
+							}
 							stockOne.setBalanceQuantityHave(stockOne.getBalanceQuantityHave().subtract(item.getSendNum()));
 							item.setSendNumHave(item.getSendNum());
 						}

+ 176 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/controller/LargeScreenYcpApiController.java

@@ -67,4 +67,180 @@ public class LargeScreenYcpApiController extends BladeController {
 		return apiService.turnoverCorpMonth(tenantId);
 	}
 
+	/**
+	 * 月平均单条轮胎利润
+	 */
+	@GetMapping("/monthAverageSingleTireProfit")
+	public List<Map<String, Object>> monthAverageSingleTireProfit(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.monthAverageSingleTireProfit(tenantId);
+	}
+
+	/**
+	 * 平均每条轮胎运费
+	 */
+	@GetMapping("/averageSingleTireShippingFee")
+	public List<Map<String, Object>> averageSingleTireShippingFee(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.averageSingleTireShippingFee(tenantId);
+	}
+
+	/**
+	 * 库存轮胎数量
+	 */
+	@GetMapping("/inventoryTireQuantity")
+	public List<Map<String, Object>> inventoryTireQuantity(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.inventoryTireQuantity(tenantId);
+	}
+
+	/**
+	 * 利润最高一单
+	 */
+	@GetMapping("/highestProfit")
+	public List<Map<String, Object>> highestProfit(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.highestProfit(tenantId);
+	}
+
+	/**
+	 * 利润最低一单
+	 */
+	@GetMapping("/lowestProfitMargin")
+	public List<Map<String, Object>> lowestProfitMargin(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.lowestProfitMargin(tenantId);
+	}
+
+	/**
+	 * 分仓经营利润
+	 */
+	@GetMapping("/operatingProfit")
+	public List<Map<String, Object>> operatingProfit(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.operatingProfit(tenantId);
+	}
+
+	/**
+	 * 库存轮胎成本
+	 */
+	@GetMapping("/inventoryTireCost")
+	public List<Map<String, Object>> inventoryTireCost(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.inventoryTireCost(tenantId);
+	}
+
+	/**
+	 * 库存周转率
+	 */
+	@GetMapping("/inventoryTurnoverRate")
+	public List<Map<String, Object>> inventoryTurnoverRate(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.inventoryTurnoverRate(tenantId);
+	}
+
+	/**
+	 * 销售任务
+	 */
+	@GetMapping("/salesTask")
+	public List<Map<String, Object>> salesTask(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.salesTask(tenantId);
+	}
+
+	/**
+	 * 销售业绩
+	 */
+	@GetMapping("/salesPerformance")
+	public List<Map<String, Object>> salesPerformance(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.salesPerformance(tenantId);
+	}
+
+	/**
+	 * 销售业绩比例
+	 */
+	@GetMapping("/salesPerformanceProportion")
+	public List<Map<String, Object>> salesPerformanceProportion(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.salesPerformanceProportion(tenantId);
+	}
+
+	/**
+	 * 轮胎数量任务
+	 */
+	@GetMapping("/tyreQuantityTask")
+	public List<Map<String, Object>> tyreQuantityTask(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.tyreQuantityTask(tenantId);
+	}
+
+	/**
+	 * 轮胎数量
+	 */
+	@GetMapping("/tyreQuantityPerformance")
+	public List<Map<String, Object>> tyreQuantityPerformance(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.tyreQuantityPerformance(tenantId);
+	}
+
+	/**
+	 * 轮胎数量比例
+	 */
+	@GetMapping("/tyreQuantityProportion")
+	public List<Map<String, Object>> tyreQuantityProportion(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.tyreQuantityProportion(tenantId);
+	}
+
+	/**
+	 * 店面成交任务
+	 */
+	@GetMapping("/storeTransactionTask")
+	public List<Map<String, Object>> storeTransactionTask(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.storeTransactionTask(tenantId);
+	}
+
+	/**
+	 * 店面成交数量
+	 */
+	@GetMapping("/storeTransactionQuantity")
+	public List<Map<String, Object>> storeTransactionQuantity(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.storeTransactionQuantity(tenantId);
+	}
+
+	/**
+	 * 店面成交比例
+	 */
+	@GetMapping("/storeTransactionProportion")
+	public List<Map<String, Object>> storeTransactionProportion(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.storeTransactionProportion(tenantId);
+	}
+
+	/**
+	 * 单日销量最大
+	 */
+	@GetMapping("/singleDaySalesMaximum")
+	public List<Map<String, Object>> singleDaySalesMaximum(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.singleDaySalesMaximum(tenantId);
+	}
+
+	/**
+	 * 单日销量最小
+	 */
+	@GetMapping("/singleDaySalesMinimum")
+	public List<Map<String, Object>> singleDaySalesMinimum(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.singleDaySalesMinimum(tenantId);
+	}
+
+	/**
+	 * 平均日销量
+	 */
+	@GetMapping("/averageDailySalesVolume")
+	public List<Map<String, Object>> averageDailySalesVolume(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.averageDailySalesVolume(tenantId);
+	}
+
+	/**
+	 * 月销售去趋势
+	 */
+	@GetMapping("/monthlySalesTrend")
+	public List<Map<String, Object>> monthlySalesTrend(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.monthlySalesTrend(tenantId);
+	}
+
+	/**
+	 * 客户top
+	 */
+	@GetMapping("/corpTop")
+	public List<Map<String, Object>> corpTop(@RequestParam(value = "tenantId") String tenantId) {
+		return apiService.corpTop(tenantId);
+	}
+
 }

+ 18 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/dto/MonthlySalesTrend.java

@@ -0,0 +1,18 @@
+package org.springblade.salesPart.smartLargeScreenApi.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :jixinyuan
+ * @date : 2024/12/23
+ */
+@Data
+public class MonthlySalesTrend {
+
+	private Integer date;
+
+	private BigDecimal amount;
+
+}

+ 44 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/service/ApiService.java

@@ -28,4 +28,48 @@ public interface ApiService {
 	List<Map<String, Object>> coreCustomers(String tenantId);
 
 	List<Map<String, Object>> turnoverCorpMonth(String tenantId);
+
+	List<Map<String, Object>> monthAverageSingleTireProfit(String tenantId);
+
+	List<Map<String, Object>> averageSingleTireShippingFee(String tenantId);
+
+	List<Map<String, Object>> inventoryTireQuantity(String tenantId);
+
+	List<Map<String, Object>> highestProfit(String tenantId);
+
+	List<Map<String, Object>> lowestProfitMargin(String tenantId);
+
+	List<Map<String, Object>> operatingProfit(String tenantId);
+
+	List<Map<String, Object>> inventoryTireCost(String tenantId);
+
+	List<Map<String, Object>> inventoryTurnoverRate(String tenantId);
+
+	List<Map<String, Object>> salesTask(String tenantId);
+
+	List<Map<String, Object>> salesPerformance(String tenantId);
+
+	List<Map<String, Object>> salesPerformanceProportion(String tenantId);
+
+	List<Map<String, Object>> tyreQuantityTask(String tenantId);
+
+	List<Map<String, Object>> tyreQuantityPerformance(String tenantId);
+
+	List<Map<String, Object>> tyreQuantityProportion(String tenantId);
+
+	List<Map<String, Object>> storeTransactionTask(String tenantId);
+
+	List<Map<String, Object>> storeTransactionQuantity(String tenantId);
+
+	List<Map<String, Object>> storeTransactionProportion(String tenantId);
+
+	List<Map<String, Object>> singleDaySalesMaximum(String tenantId);
+
+	List<Map<String, Object>> singleDaySalesMinimum(String tenantId);
+
+	List<Map<String, Object>> averageDailySalesVolume(String tenantId);
+
+	List<Map<String, Object>> monthlySalesTrend(String tenantId);
+
+	List<Map<String, Object>> corpTop(String tenantId);
 }

+ 397 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/smartLargeScreenApi/service/impl/ApiServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.salesPart.smartLargeScreenApi.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.salesPart.brand.service.IBrandDescService;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
@@ -7,8 +8,10 @@ import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.order.service.IOrderItemsService;
 import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.salesPart.smartLargeScreenApi.dto.BrandSort;
+import org.springblade.salesPart.smartLargeScreenApi.dto.MonthlySalesTrend;
 import org.springblade.salesPart.smartLargeScreenApi.dto.WarehouseSort;
 import org.springblade.salesPart.smartLargeScreenApi.service.ApiService;
+import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.salesPart.storage.service.IStorageDescService;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
@@ -38,6 +41,8 @@ public class ApiServiceImpl implements ApiService {
 
 	private final ICorpsDescService corpsDescService;
 
+	private final IStockDescService stockDescService;
+
 	@Override
 	public Map<String, Object> getTotalYear(String year) {
 		String tenantId = sysClient.getTenantIds("whether.financing");
@@ -253,4 +258,396 @@ public class ApiServiceImpl implements ApiService {
 		mapList.add(map);
 		return mapList;
 	}
+
+	@Override
+	public List<Map<String, Object>> monthAverageSingleTireProfit(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			BigDecimal amount = orderList.stream().map(PjOrder::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal goodsNum = orderList.stream().map(PjOrder::getGoodsTotalNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			map.put("name", "");
+			map.put("value", amount.divide(goodsNum, 2, RoundingMode.HALF_UP));
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> averageSingleTireShippingFee(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "large.screen.average.freight");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (ObjectUtils.isNotNull(data)) {
+			map.put("name", "");
+			map.put("value", data);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> inventoryTireQuantity(String tenantId) {
+		List<PjStockDesc> stockDescList = stockDescService.selectPjStockDescList(tenantId);
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!stockDescList.isEmpty()) {
+			BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			map.put("name", "");
+			map.put("value", balanceQuantity);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> highestProfit(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			List<PjOrder> orders = orderList.stream()
+				.sorted(Comparator.comparing(PjOrder::getGrossProfit).reversed())
+				.collect(Collectors.toList());
+			map.put("name", "");
+			map.put("value", orders.get(0).getGrossProfit());
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> lowestProfitMargin(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			List<PjOrder> orders = orderList.stream()
+				.sorted(Comparator.comparing(PjOrder::getGrossProfit))
+				.collect(Collectors.toList());
+			map.put("name", "");
+			map.put("value", orders.get(0).getGrossProfit());
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> operatingProfit(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			BigDecimal amount = orderList.stream().map(PjOrder::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			map.put("name", "");
+			map.put("value", amount);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> inventoryTireCost(String tenantId) {
+		List<PjStockDesc> stockDescList = stockDescService.selectPjStockDescList(tenantId);
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!stockDescList.isEmpty()) {
+			BigDecimal inventoryAmount = stockDescList.stream().map(PjStockDesc::getInventoryAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			map.put("name", "");
+			map.put("value", inventoryAmount);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> inventoryTurnoverRate(String tenantId) {
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		map.put("name", "");
+		map.put("value", "0");
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> salesTask(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "sales.task");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (ObjectUtils.isNotNull(data)) {
+			map.put("name", "");
+			map.put("value", data);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> salesPerformance(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			map.put("name", "");
+			map.put("value", orderList.size());
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> salesPerformanceProportion(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "sales.task");
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			if (ObjectUtils.isNotNull(data)) {
+				BigDecimal total = new BigDecimal(data);
+				BigDecimal complete = new BigDecimal(orderList.size());
+				map.put("name", "");
+				map.put("value", complete.divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+			} else {
+				map.put("name", "");
+				map.put("value", "100");
+			}
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> tyreQuantityTask(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "tyre.quantity.task");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (ObjectUtils.isNotNull(data)) {
+			map.put("name", "");
+			map.put("value", data);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> tyreQuantityPerformance(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			map.put("name", "");
+			map.put("value", orderList.stream().map(PjOrder::getGoodsTotalNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> tyreQuantityProportion(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "tyre.quantity.task");
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			if (ObjectUtils.isNotNull(data)) {
+				BigDecimal total = new BigDecimal(data);
+				BigDecimal complete = orderList.stream().map(PjOrder::getGoodsTotalNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				map.put("name", "");
+				map.put("value", complete.divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+			} else {
+				map.put("name", "");
+				map.put("value", "100");
+			}
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> storeTransactionTask(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "store.transaction.task");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (ObjectUtils.isNotNull(data)) {
+			map.put("name", "");
+			map.put("value", data);
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> storeTransactionQuantity(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			map.put("name", "");
+			map.put("value", orderList.stream().map(PjOrder::getCustomerId).distinct().count());
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> storeTransactionProportion(String tenantId) {
+		String data = sysClient.getParamServiceShippingFee(tenantId, "store.transaction.task");
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			if (ObjectUtils.isNotNull(data)) {
+				BigDecimal total = new BigDecimal(data);
+				BigDecimal complete = new BigDecimal(orderList.stream().map(PjOrder::getCustomerId).distinct().count());
+				map.put("name", "");
+				map.put("value", complete.divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+			} else {
+				map.put("name", "");
+				map.put("value", "100");
+			}
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> singleDaySalesMaximum(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			List<PjOrder> orders = orderList.stream()
+				.sorted(Comparator.comparing(PjOrder::getSalesAmount).reversed())
+				.collect(Collectors.toList());
+			map.put("name", "");
+			map.put("value", orders.get(0).getSalesAmount());
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> singleDaySalesMinimum(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			List<PjOrder> orders = orderList.stream()
+				.sorted(Comparator.comparing(PjOrder::getSalesAmount))
+				.collect(Collectors.toList());
+			map.put("name", "");
+			map.put("value", orders.get(0).getSalesAmount());
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> averageDailySalesVolume(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		Map<String, Object> map = new HashMap<>();
+		if (!orderList.isEmpty()) {
+			BigDecimal amount = orderList.stream().map(PjOrder::getSalesAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			map.put("name", "");
+			map.put("value", amount.divide(new BigDecimal(orderList.size()), 2, RoundingMode.HALF_UP));
+		} else {
+			map.put("name", "");
+			map.put("value", "0");
+		}
+		mapList.add(map);
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> monthlySalesTrend(String tenantId) {
+		List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		if (!orderList.isEmpty()){
+			List<MonthlySalesTrend> list = new ArrayList<>();
+			Calendar calendar = Calendar.getInstance();
+			for (PjOrder item : orderList) {
+				MonthlySalesTrend detail = new MonthlySalesTrend();
+				detail.setAmount(item.getSalesAmount());
+				calendar.setTime(item.getBusinesDate());
+				detail.setDate(calendar.get(Calendar.DAY_OF_MONTH));
+				list.add(detail);
+			}
+			List<MonthlySalesTrend> salesTrendList = list.stream()
+				.sorted(Comparator.comparing(MonthlySalesTrend::getDate))
+				.collect(Collectors.toList());
+			List<Integer> day = salesTrendList.stream().map(MonthlySalesTrend::getDate).distinct().collect(Collectors.toList());
+			for (Integer item : day) {
+				Map<String, Object> map = new HashMap<>();
+				map.put("x", item);
+				map.put("y", salesTrendList.stream().filter(e-> e.getDate().equals(item))
+					.map(MonthlySalesTrend::getAmount).max(BigDecimal::compareTo));
+				map.put("z", salesTrendList.stream().filter(e-> e.getDate().equals(item))
+					.map(MonthlySalesTrend::getAmount).min(BigDecimal::compareTo));
+				mapList.add(map);
+			}
+		}
+		return mapList;
+	}
+
+	@Override
+	public List<Map<String, Object>> corpTop(String tenantId) {
+		return null;
+	}
 }

+ 4 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.java

@@ -17,6 +17,7 @@
 package org.springblade.salesPart.stock.mapper;
 
 import org.apache.ibatis.annotations.Param;
+import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.salesPart.entity.PjStockDesc;
 import org.springblade.salesPart.vo.StockDescVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -49,4 +50,7 @@ public interface StockDescMapper extends BaseMapper<PjStockDesc> {
 	List<PjStockDesc> getStockList(PjStockDesc stockDesc);
 
 	List<PjStockDesc> selectStockDescPageZero(IPage<PjStockDesc> page, @Param("stockDesc")PjStockDesc stockDesc);
+
+	@TenantIgnore
+	List<PjStockDesc> selectPjStockDescList(@Param("tenantId")String tenantId);
 }

+ 6 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.xml

@@ -209,5 +209,11 @@
         order By
         goods.create_time
     </select>
+    <select id="selectPjStockDescList" resultType="org.springblade.salesPart.entity.PjStockDesc">
+        SELECT *
+        FROM pjpf_stock_desc
+        where tenant_id = #{tenantId}
+          and is_deleted = 0
+    </select>
 
 </mapper>

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/IStockDescService.java

@@ -57,4 +57,6 @@ public interface IStockDescService extends IService<PjStockDesc> {
 	R updateBatchByIdNew(List<PjStockDesc> pjStockDescArrayList);
 
 	IPage<PjStockDesc> selectStockDescPageZero(IPage<PjStockDesc> page, PjStockDesc stockDesc);
+
+    List<PjStockDesc> selectPjStockDescList(String tenantId);
 }

+ 5 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/impl/StockDescServiceImpl.java

@@ -129,4 +129,9 @@ public class StockDescServiceImpl extends ServiceImpl<StockDescMapper, PjStockDe
 		return page.setRecords(baseMapper.selectStockDescPageZero(page, stockDesc));
 	}
 
+	@Override
+	public List<PjStockDesc> selectPjStockDescList(String tenantId) {
+		return baseMapper.selectPjStockDescList(tenantId);
+	}
+
 }

+ 1 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/storage/controller/StorageDescController.java

@@ -159,7 +159,7 @@ public class StorageDescController extends BladeController {
 	@ApiOperation(value = "删除", notes = "传入ids")
 	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		if (!AuthUtil.getUserRole().contains("admin")) {
+		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("基础资料")) {
 			throw new RuntimeException("暂无权限,删除失败");
 		}
 		List<Long> list = Func.toLongList(ids);

+ 5 - 0
blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java

@@ -283,6 +283,11 @@ public class SysClient implements ISysClient {
 	}
 
 	@Override
+	public String getParamServiceShippingFee(String tenantId, String paramKey) {
+		return paramServiceService.getParamServiceShippingFee(tenantId,paramKey);
+	}
+
+	@Override
 	@GetMapping(TENANT_ID)
 	public R<Tenant> getTenant(String tenantId) {
 		return R.data(tenantService.getByTenantId(tenantId));

+ 3 - 0
blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamServiceMapper.java

@@ -47,4 +47,7 @@ public interface ParamServiceMapper extends BaseMapper<ParamService> {
 
 	@TenantIgnore
 	String getTenants(@Param("paramKey") String paramKey);
+
+	@TenantIgnore
+	String getParamServiceShippingFee(@Param("tenantId")String tenantId, @Param("paramKey") String paramKey);
 }

+ 3 - 0
blade-service/blade-system/src/main/java/org/springblade/system/mapper/ParamServiceMapper.xml

@@ -28,5 +28,8 @@
     <select id="getTenants" resultType="java.lang.String">
         select GROUP_CONCAT(tenant_id SEPARATOR  ', ') from blade_param_service where is_deleted = 0 and param_key = #{paramKey} and param_value = '1'
     </select>
+    <select id="getParamServiceShippingFee" resultType="java.lang.String">
+        select param_value from blade_param_service where is_deleted = 0 and param_key = #{paramKey} and tenant_id = #{tenantId}
+    </select>
 
 </mapper>

+ 2 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/IParamServiceService.java

@@ -48,4 +48,6 @@ public interface IParamServiceService extends IService<ParamService> {
     List<ParamService> selectParamService(String tenantId, String salesCompanyId);
 
     String getTenants(String paramKey);
+
+	String getParamServiceShippingFee(String tenantId, String paramKey);
 }

+ 5 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceServiceImpl.java

@@ -87,4 +87,9 @@ public class ParamServiceServiceImpl extends ServiceImpl<ParamServiceMapper, Par
 		return baseMapper.getTenants(paramKey);
 	}
 
+	@Override
+	public String getParamServiceShippingFee(String tenantId, String paramKey) {
+		return baseMapper.getParamServiceShippingFee(tenantId,paramKey);
+	}
+
 }