lazhaoqian 4 年之前
父节点
当前提交
3827174333

+ 16 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -1,6 +1,8 @@
 package org.springblade.client.corps.controller;
 
+import com.alibaba.excel.event.Order;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -170,6 +172,20 @@ public class CorpsDescController extends BladeController {
 		List<CorpsExcel> list = new ArrayList<>();
 		ExcelUtil.export(response, "客户导入模板", "客户导入数据表", list, CorpsExcel.class);
 	}
+	/**
+	 * 客户信息
+	 */
+	@GetMapping("/corpsDescList")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "所有客户信息", notes = "corpType必填")
+	public R<List<CorpsDesc>> orderList(CorpsDescVO corpsDesc) {
+		if (StringUtils.isBlank(corpsDesc.getCorpType())){
+			throw new SecurityException("缺少必要的参数,客户类型");
+		}
+		corpsDesc.setIsDeleted(0);//默认查有效的
+		corpsDesc.setTenantId(SecureUtil.getTenantId());
+		return R.data(corpsDescService.list(new QueryWrapper<CorpsDesc>().setEntity(corpsDesc)));
+	}
 
 
 }

+ 7 - 3
blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java

@@ -90,6 +90,8 @@ public class GoodsDescClient implements IGoodsDescClient {
 								String specsOne,String specsTwo) {
 		List<Long> list = new ArrayList<>();
 		LambdaQueryWrapper<GoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(GoodsDesc::getTenantId,SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(GoodsDesc::getIsDeleted,0);
 		lambdaQueryWrapper.like(Func.isNotEmpty(code),GoodsDesc::getCode,code);
 		lambdaQueryWrapper.like(Func.isNotEmpty(cname),GoodsDesc::getCname,cname);
 		lambdaQueryWrapper.like(Func.isNotEmpty(brand),GoodsDesc::getBrand,brand);
@@ -97,9 +99,11 @@ public class GoodsDescClient implements IGoodsDescClient {
 		lambdaQueryWrapper.like(Func.isNotEmpty(placeProduction),GoodsDesc::getPlaceProduction,placeProduction);
 		lambdaQueryWrapper.like(Func.isNotEmpty(specsOne),GoodsDesc::getSpecsOne,specsOne);
 		lambdaQueryWrapper.like(Func.isNotEmpty(specsTwo),GoodsDesc::getSpecsTwo,specsTwo);
-		List<GoodsDesc> goodsDescList = goodsDescService.list(lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(goodsDescList)){
-			list = goodsDescList.stream().map(GoodsDesc::getId).collect(Collectors.toList());
+		if (lambdaQueryWrapper != null){
+			List<GoodsDesc> goodsDescList = goodsDescService.list(lambdaQueryWrapper);
+			if (CollectionUtils.isNotEmpty(goodsDescList)){
+				list = goodsDescList.stream().map(GoodsDesc::getId).collect(Collectors.toList());
+			}
 		}
 		return list;
 	}

+ 10 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderItemsController.java

@@ -31,6 +31,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.excel.OrderItemsExcel;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -157,6 +158,15 @@ public class OrderItemsController extends BladeController {
 		}
 		return orderItemsService.importUser(excelList,false);
 	}
+	/**
+	 * 下拉获取订单明细
+	 */
+	@GetMapping("/orderItemsList")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "下拉获取订单明细", notes = "传入order的id")
+	public R<List<OrderItems>> orderItemsList(Order order) {
+		return R.data(orderItemsService.getOrderItems(order));
+	}
 
 
 }

+ 8 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderItemsService.java

@@ -17,6 +17,7 @@
 package org.springblade.purchase.sales.service;
 
 import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.excel.OrderItemsExcel;
 import org.springblade.purchase.sales.vo.OrderItemsVO;
@@ -65,4 +66,11 @@ public interface IOrderItemsService extends IService<OrderItems> {
 	 */
 	R<List<OrderItems>> importUser(List<OrderItemsExcel> data, Boolean isCovered);
 
+	/**
+	 * 获取订单明细
+	 * @param order
+	 * @return
+	 */
+	List<OrderItems> getOrderItems(Order order);
+
 }

+ 18 - 3
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -161,18 +161,33 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("is_deleted", 0));
 			Order orderMessage = new Order();
 			orderMessage.setId(order.getId());
-			if (CollectionUtils.isNotEmpty(list)){
+			if (CollectionUtils.isNotEmpty(list) && order.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
 				BigDecimal reduce = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
 					return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
 				},BigDecimal::add);//采购金额求和
 				BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//金额求和
-				BigDecimal grossProfit = amount.subtract(reduce);//毛利润
+				BigDecimal grossProfit = amount.subtract(reduce.add(order.getPredictOceanFreight()));//毛利润
 				BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
 				if (amount.compareTo(BigDecimal.ZERO) > 0){
-					grossProfit = (grossProfit.divide(amount,2)).multiply(new BigDecimal(100));
+					grossProfitRate = (grossProfit.divide(amount,2)).multiply(new BigDecimal(100));
 				}
 				orderMessage.setGrossProfit(grossProfit);//毛利额
 				orderMessage.setGrossProfitRate(grossProfitRate);//毛利率
+			}else if (CollectionUtils.isNotEmpty(list) && order.getTradeType().equals(OrderTypeEnum.EXPORT.getType())){
+				//出口的毛利额=销售价 * 汇率 - (采购价+配件价格)    毛利率 =毛利额/(采购单价+配件价格)
+				BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//金额求和
+				BigDecimal purchaseAmount = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+					return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
+				},BigDecimal::add);//采购金额求和
+				BigDecimal partsPrice = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+					return x.add(y.getPartsPrice().multiply(y.getOrderQuantity()));
+				},BigDecimal::add);//配件金额求和
+				orderMessage.setGrossProfit(amount.multiply(order.getExchangeRate()).subtract((purchaseAmount.add(partsPrice))));//毛利额
+				BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
+				if ((amount.compareTo(BigDecimal.ZERO)) > 0){
+					grossProfitRate = orderMessage.getGrossProfit().divide((purchaseAmount.add(partsPrice)),2).multiply(new BigDecimal(100));
+				}
+				orderMessage.setGrossProfitRate(grossProfitRate);//毛利率
 			}else {
 				orderMessage.setGrossProfit(new BigDecimal(BigInteger.ZERO));//毛利额
 				orderMessage.setGrossProfitRate(new BigDecimal(BigInteger.ZERO));//毛利率

+ 8 - 7
blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java

@@ -41,7 +41,6 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.stock.excel.StockGoodsExcel;
-import org.springblade.stock.excel.StockGoodsImport;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
@@ -54,7 +53,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 库存账 控制器
@@ -93,7 +91,9 @@ public class StockGoodsController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入stockGoods")
 	public R<IPage<StockGoods>> list(StockGoodsVO stockGoods, Query query) {
 		List<Long> list = new ArrayList<>();
-		if (stockGoods != null){
+		if (StringUtils.isNotBlank(stockGoods.getCode()) || StringUtils.isNotBlank(stockGoods.getCname()) || StringUtils.isNotBlank(stockGoods.getBrand())
+		|| StringUtils.isNotBlank(stockGoods.getBrandItem()) || StringUtils.isNotBlank(stockGoods.getPlaceProduction()) || StringUtils.isNotBlank(stockGoods.getTypeno())
+		|| StringUtils.isNotBlank(stockGoods.getTypenoOne())){
 			list = goodsDescClient.getGoodId(stockGoods.getCode(),stockGoods.getCname(),stockGoods.getBrand(),stockGoods.getBrandItem(),
 				stockGoods.getPlaceProduction(),stockGoods.getTypeno(),stockGoods.getTypenoOne());
 		}
@@ -230,10 +230,11 @@ public class StockGoodsController extends BladeController {
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "导入库存", notes = "传入excel")
 	public R importUser(MultipartFile file) {
-		Integer isCovered = 0;
-		StockGoodsImport stockGoodsImport = new StockGoodsImport(stockGoodsService, isCovered == 1);
-		ExcelUtil.save(file, stockGoodsImport, StockGoodsExcel.class);
-		return R.success("操作成功");
+		List<StockGoodsExcel> excelList = ExcelUtil.read(file, StockGoodsExcel.class);
+		if (CollectionUtils.isEmpty(excelList)){
+			throw new SecurityException("数据不能为空");
+		}
+		return stockGoodsService.importUser(excelList,false);
 	}
 
 

+ 0 - 24
blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsImport.java

@@ -1,24 +0,0 @@
-package org.springblade.stock.excel;
-
-import lombok.AllArgsConstructor;
-import lombok.RequiredArgsConstructor;
-import org.springblade.core.excel.support.ExcelImporter;
-import org.springblade.stock.service.IStockGoodsService;
-
-import java.util.List;
-
-/**
- * 库存数据导入类
- *
- * @author Chill
- */
-@RequiredArgsConstructor
-@AllArgsConstructor
-public class StockGoodsImport implements ExcelImporter<StockGoodsExcel> {
-	private IStockGoodsService stockGoodsService;//库存服务
-	private final Boolean isCovered;
-	@Override
-	public void save(List<StockGoodsExcel> data) {
-		stockGoodsService.importUser(data,isCovered);
-	}
-}

+ 1 - 1
blade-service/blade-stock/src/main/java/org/springblade/stock/service/IStockGoodsService.java

@@ -67,7 +67,7 @@ public interface IStockGoodsService extends IService<StockGoods> {
 	 * @param isCovered
 	 * @return
 	 */
-	void importUser(List<StockGoodsExcel> data, Boolean isCovered);
+	R importUser(List<StockGoodsExcel> data, Boolean isCovered);
 	/**
 	 * 查询库存信息
 	 * @return

+ 31 - 5
blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java

@@ -115,7 +115,10 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 
 	@Override
 	@Transactional
-	public void importUser(List<StockGoodsExcel> data, Boolean isCovered) {
+	public R importUser(List<StockGoodsExcel> data, Boolean isCovered) {
+		StringBuffer good = new StringBuffer();//未找到商品信息的商品
+		StringBuffer corp = new StringBuffer();//未找到供应商的商品
+		StringBuffer storage = new StringBuffer();//未找到仓库的商品
 		for (StockGoodsExcel datum : data) {
 			StockGoods stockGoods = new StockGoods();
 			stockGoods.setLockingQuantity(datum.getLockingQuantity());
@@ -145,14 +148,25 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 				stockGoods.setCname(goodsDesc.getData().getCname());
 				stockGoods.setCode(goodsDesc.getData().getCode());
 			}else {
+				good.append(datum.getCname());
 				continue;
 			}
 			//获取客户id
-			R<CorpsDesc> corpsDesc = corpsDescClient.getCorpByName(datum.getCorpName(), SecureUtil.getTenantId());
-			if (corpsDesc.isSuccess() && corpsDesc.getData() != null){
-				stockGoods.setCorpId(corpsDesc.getData().getId());
-				stockGoods.setCorpName(corpsDesc.getData().getCname());
+			if (StringUtils.isNotBlank(datum.getCorpName())){
+				R<CorpsDesc> corpsDesc = corpsDescClient.getCorpByName(datum.getCorpName(), SecureUtil.getTenantId());
+				if (corpsDesc.isSuccess() && corpsDesc.getData() != null){
+					stockGoods.setCorpId(corpsDesc.getData().getId());
+					stockGoods.setCorpName(corpsDesc.getData().getCname());
+				}
+			}else if (StringUtils.isBlank(datum.getCorpName()) && goodsDesc.getData().getCorpId() != null){
+				stockGoods.setCorpId(goodsDesc.getData().getCorpId());
+				stockGoods.setCorpName(goodsDesc.getData().getCorpName());
 			}else {
+				corp.append(datum.getCname());
+				continue;
+			}
+			if (stockGoods.getCorpId() == null){
+				corp.append(datum.getCname());
 				continue;
 			}
 			//获取仓库id
@@ -160,6 +174,7 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 			if (storageDesc != null){
 				stockGoods.setStorageId(storageDesc.getId());
 			}else {
+				storage.append(datum.getCname());
 				continue;
 			}
 			//查询库存账
@@ -177,6 +192,17 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 				baseMapper.updateById(stockGoods);
 			}
 		}
+		String message = new String("导入成功");
+		if (StringUtils.isNotBlank(good)){
+			message = message + "在基础资料中未查到商品信息的商品有:" +good.toString();
+		}
+		if (StringUtils.isNotBlank(corp)){
+			message = message + "在基础资料中未查到供应商的商品有:" +corp.toString();
+		}
+		if (StringUtils.isNotBlank(storage)){
+			message = message + "在基础资料中未查到仓库信息的商品有:" +storage.toString();
+		}
+		return R.data(message);
 	}
 
 	@Override