Browse Source

2022年11月5日19:15:44

纪新园 3 years ago
parent
commit
6788c615f9
19 changed files with 376 additions and 31 deletions
  1. 3 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/GoodsDescDto.java
  2. 6 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  3. 8 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderDescClient.java
  4. 48 15
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java
  5. 31 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescPartsController.java
  6. 5 1
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsTypeController.java
  7. 75 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/excel/GoodsInfoPartsExcel.java
  8. 3 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/service/IGoodsDescService.java
  9. 53 1
      blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java
  10. 32 0
      blade-service/blade-client/src/main/java/org/springblade/client/serial/controller/StorageDescController.java
  11. 3 0
      blade-service/blade-client/src/main/java/org/springblade/client/serial/service/IStorageDescService.java
  12. 54 0
      blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/StorageDescServiceImpl.java
  13. 8 6
      blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/StorageTypeServiceImpl.java
  14. 7 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java
  15. 2 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.java
  16. 17 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  17. 2 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  18. 17 8
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  19. 2 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

+ 3 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/GoodsDescDto.java

@@ -149,5 +149,8 @@ public class GoodsDescDto implements Serializable {
 	 */
 	private String label;
 
+	@TableField(exist = false)
+	private String goodsTypeName;
+
 
 }

+ 6 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -1073,5 +1073,11 @@ public class Order implements Serializable {
 	@ApiModelProperty(value = "成本金额")
 	private BigDecimal costAmount;
 
+	/**
+	 * 核心客户与流失类别
+	 */
+	@TableField(exist = false)
+	private String corpType;
+
 
 }

+ 8 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderDescClient.java

@@ -29,6 +29,7 @@ public interface IOrderDescClient {
 	String RELEASE_STOCK = API_PREFIX + "/releaseStock";
 	String GET_BY_BILLNO = API_PREFIX + "/getByBillNo";
 	String GET_BY_ORDER_FILES=API_PREFIX+"/getByOrderFiles";
+	String CORP_ANALYSIS=API_PREFIX+"/corpAnalysis";
 
 	/**
 	 * 修改采购订单状态
@@ -74,4 +75,11 @@ public interface IOrderDescClient {
 	 */
 	@GetMapping(GET_BY_ORDER_FILES)
 	List<OrderFiles> getOrderFiles(@RequestParam("srcBillId")Long srcBillId);
+
+	/**
+	 * 通过
+	 * @return
+	 */
+	@PostMapping(CORP_ANALYSIS)
+	int corpAnalysis(@RequestBody Order order);
 }

+ 48 - 15
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java

@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.util.*;
 
 /**
@@ -65,7 +66,11 @@ public class CorpsDescPartsController extends BladeController {
 		for (CorpsDescDto corpsDescDto1 : pages.getRecords()) {
 			Order order = new Order();
 			order.setCorpId(corpsDescDto1.getId());
-			order.setBillType("XS");
+			if (corpsDescDto1.getCorpType().equals("KH")) {
+				order.setBillType("XS");
+			} else {
+				order.setBillType("XS");
+			}
 			order.setTradeType("YPJ");
 			order.setStartTime(corpsDescDto.getStartTime());
 			order.setEndTime(corpsDescDto.getEndTime());
@@ -115,8 +120,11 @@ public class CorpsDescPartsController extends BladeController {
 		for (CorpsDescDto corpsDescDto1 : corpsDescDtoList) {
 			Order order = new Order();
 			order.setCorpId(corpsDescDto1.getId());
-			order.setBillType("XS");
-			order.setTradeType("JXS");
+			if (corpsDescDto1.getCorpType().equals("KH")) {
+				order.setBillType("XS");
+			} else {
+				order.setBillType("XS");
+			}
 			order.setStartTime(corpsDescDto.getStartTime());
 			order.setEndTime(corpsDescDto.getEndTime());
 			List<Order> orderList = orderDescClient.getByBillNo(order);
@@ -129,15 +137,6 @@ public class CorpsDescPartsController extends BladeController {
 				settlmentAmount = settlmentAmount.add(orderList.stream().map(Order::getSettlmentAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				//预(收)付款
 				advancePayment = advancePayment.add(orderList.stream().map(Order::getAdvancePayment).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-			} else {
-				//未收账款
-				corpsDescDto1.setBalanceAmount(new BigDecimal(0));
-				//应收账款
-				corpsDescDto1.setDebitAmount(new BigDecimal(0));
-				//已收账款
-				corpsDescDto1.setSettlmentAmount(new BigDecimal(0));
-				//预(收)付款
-				corpsDescDto1.setAdvancePayment(new BigDecimal(0));
 			}
 		}
 		//未收账款
@@ -198,17 +197,51 @@ public class CorpsDescPartsController extends BladeController {
 	public R<Map<String, Object>> corpAnalysis() {
 		Map<String, Object> map = new HashMap<>();
 		//核心客户
-		BigDecimal coreCorp = new BigDecimal("0");
+		int coreCorp = 0;
+		//半年内没有销售记录客户
+		int unsales = 0;
 		//流失率
 		BigDecimal lossRate = new BigDecimal("0.00");
 		//平均客单产值
 		BigDecimal averageAmount = new BigDecimal("0.00");
+		//应收账款
+		BigDecimal debitAmount = new BigDecimal("0.00");
+
 		LambdaQueryWrapper<CorpsDesc> corpsDescQueryWrapper = new LambdaQueryWrapper<>();
 		corpsDescQueryWrapper.eq(CorpsDesc::getIsDeleted, 0).eq(CorpsDesc::getTenantId, AuthUtil.getTenantId()).eq(CorpsDesc::getCorpType, "KH");
 		//客户总数量
-		int sumNumber = corpsDescService.count(corpsDescQueryWrapper);
+		List<CorpsDesc> corpsDescList = corpsDescService.list(corpsDescQueryWrapper);
+		for (CorpsDesc corpsDesc : corpsDescList) {
+			Order order = new Order();
+			order.setCorpId(corpsDesc.getId());
+			order.setBillType("XS");
+			order.setTradeType("JXS");
+			order.setCorpType("1");
+			int count = orderDescClient.corpAnalysis(order);
+			if (count == 0 ){
+				unsales ++;
+			}
+			order.setCorpType("2");
+			int count1 = orderDescClient.corpAnalysis(order);
+			if (count1 > 0 ){
+				coreCorp ++;
+			}
+		}
+		if (unsales > 0){
+			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()),MathContext.DECIMAL32));
+		}
+		Order order = new Order();
+		order.setBillType("XS");
+		order.setTradeType("JXS");
+		List<Order> orderList = orderDescClient.getByBillNo(order);
+		if (ObjectUtils.isNotNull(orderList)) {
+			//应收账款
+			debitAmount = debitAmount.add(orderList.stream().map(Order::getDebitAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		}
+		//平均客单产值
+		averageAmount = averageAmount.add(debitAmount.divide(new BigDecimal(corpsDescList.size()), MathContext.DECIMAL32));
 
-		map.put("sumNumber", sumNumber);
+		map.put("sumNumber", corpsDescList.size());
 		map.put("coreCorp", coreCorp);
 		map.put("lossRate", lossRate);
 		map.put("averageAmount", averageAmount);

+ 31 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescPartsController.java

@@ -29,10 +29,13 @@ import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.entity.GoodsFiles;
 import org.springblade.client.entity.GoodsType;
 import org.springblade.client.feign.IRedisClient;
+import org.springblade.client.goods.excel.GoodsInfoExcel;
+import org.springblade.client.goods.excel.GoodsInfoPartsExcel;
 import org.springblade.client.goods.service.IGoodsDescService;
 import org.springblade.client.goods.service.IGoodsFilesService;
 import org.springblade.client.goods.service.IGoodsTypeService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
@@ -42,7 +45,9 @@ import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.feign.IStockGoodsClient;
 import org.springblade.stock.vo.StockGoodsVO;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -192,4 +197,30 @@ public class GoodsDescPartsController extends BladeController {
 		boolean status = goodsDescService.updateById(goodsDesc);
 		return R.status(status);
 	}
+
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-descParts-info")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出模板")
+	public void exportGoodsInfo(HttpServletResponse response) {
+		List<GoodsInfoPartsExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-产品信息", "导出数据表", list, GoodsInfoPartsExcel.class);
+	}
+
+	/**
+	 * 导入产品信息
+	 */
+	@PostMapping("/import-descParts-info")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "导入商品资料", notes = "传入excel")
+	public R importDescPartsInfo(MultipartFile file) {
+		List<GoodsInfoPartsExcel> excelList = ExcelUtil.read(file, GoodsInfoPartsExcel.class);
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return goodsDescService.importDescPartsInfo(excelList, false);
+	}
+
 }

+ 5 - 1
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsTypeController.java

@@ -36,6 +36,7 @@ import org.springblade.client.goods.service.IGoodsTypeDescService;
 import org.springblade.client.goods.service.IGoodsTypeService;
 import org.springblade.client.vo.GoodsTypeVO;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
@@ -114,6 +115,7 @@ public class GoodsTypeController extends BladeController {
 	public R<List<GoodsType>> listAll(GoodsTypeVO goodsType) {
 		goodsType.setTenantId(AuthUtil.getTenantId());
 		goodsType.setType(GoodsTypeEnum.GOODS.getType());
+		goodsType.setIsDeleted(0);
 		List<GoodsType> list = goodsTypeService.list(Condition.getQueryWrapper(goodsType));
 		return R.data(list);
 	}
@@ -167,8 +169,10 @@ public class GoodsTypeController extends BladeController {
 			goodsType.setTenantId(AuthUtil.getTenantId());
 		}
 		if (StringUtils.isBlank(goodsType.getCname())) {
-			return R.fail(500, "名称不能为空");
+			throw new ServiceException("名称不能为空!");
+//			return R.fail(500, "名称不能为空");
 		}
+
 		//goodsTypeService.selectGoodsTypeCname(goodsType);
 		goodsType.setType(GoodsTypeEnum.GOODS.getType());
 		return R.data(goodsTypeService.saveMessage(goodsType));

+ 75 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/excel/GoodsInfoPartsExcel.java

@@ -0,0 +1,75 @@
+package org.springblade.client.goods.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;
+
+/**
+ * 商品信息
+ * */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class GoodsInfoPartsExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ExcelProperty("产品名称必填)")
+	private String cname;
+
+	@ExcelProperty("产品分类(必填)")
+	private String type;
+
+	@ExcelProperty("单位(必填)")
+	private String unit;
+
+	/**
+	 * 标准售价
+	 */
+	@ExcelProperty("标准售价(必填)")
+	private BigDecimal standardPrice;
+
+	/**
+	 * 批发售价
+	 */
+	@ExcelProperty("批发售价")
+	private BigDecimal wholesalePrice;
+
+	/**
+	 * 汽修厂售价
+	 */
+	@ExcelProperty("汽修厂售价")
+	private BigDecimal repairDepotPrice;
+
+	/**
+	 * 门店售价
+	 */
+	@ExcelProperty("门店售价")
+	private BigDecimal storePrice;
+	/**
+	 * 采购价
+	 */
+	@ExcelProperty("采购价(必填)")
+	private BigDecimal purchasePrice;
+
+	//其他售价
+	@ExcelProperty("其他售价(必填)")
+	private BigDecimal price;
+
+	//是否批次号管理
+	@ExcelProperty("是否批次号管理")
+	private String whether;
+
+
+
+
+
+
+
+
+}

+ 3 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/IGoodsDescService.java

@@ -23,6 +23,7 @@ import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.goods.excel.GoodsExcel;
 import org.springblade.client.goods.excel.GoodsExcels;
 import org.springblade.client.goods.excel.GoodsInfoExcel;
+import org.springblade.client.goods.excel.GoodsInfoPartsExcel;
 import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.client.vo.ProductVO;
 import org.springblade.core.tool.api.R;
@@ -146,4 +147,6 @@ public interface IGoodsDescService extends IService<GoodsDesc> {
 	GoodsDesc findById(Long id);
 
 	void modifyParts(GoodsDescDto goodsDesc);
+
+	R importDescPartsInfo(List<GoodsInfoPartsExcel> excelList, boolean b);
 }

+ 53 - 1
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java

@@ -31,6 +31,7 @@ import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.goods.excel.GoodsExcel;
 import org.springblade.client.goods.excel.GoodsExcels;
 import org.springblade.client.goods.excel.GoodsInfoExcel;
+import org.springblade.client.goods.excel.GoodsInfoPartsExcel;
 import org.springblade.client.goods.mapper.*;
 import org.springblade.client.goods.service.IGoodsDescService;
 import org.springblade.client.goods.service.IGoodsFilesService;
@@ -661,6 +662,7 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 	}
 
 	@Override
+	@Transactional
 	public void modifyParts(GoodsDescDto goodsDescDto) {
 		LambdaQueryWrapper<GoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(GoodsDesc::getType, 0);
@@ -671,7 +673,7 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 		GoodsDesc selectOne = baseMapper.selectOne(lambdaQueryWrapper);
 
 		if (selectOne != null && goodsDescDto.getId() == null) {
-			throw new ServiceException("存在重复数据,请修改后添加");
+			throw new ServiceException("存在重复数据,请修改后添加!");
 		} else if (selectOne != null && goodsDescDto.getId().longValue() != selectOne.getId().longValue()) {
 			throw new ServiceException("存在重复数据,请修改后添加");
 		}
@@ -769,6 +771,56 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 		goodsDescDto.setId(goodsDesc.getId());
 	}
 
+	@Override
+	public R importDescPartsInfo(List<GoodsInfoPartsExcel> excelList, boolean b) {
+		if (ObjectUtils.isNull(excelList)) {
+			throw new SecurityException("导入数据不能为空");
+		}
+		excelList.forEach(e -> {
+			String type = e.getType();
+			GoodsType goodsType = goodsTypeMapper.selectGoodsTypeCname(type, AuthUtil.getTenantId());
+			if (goodsType != null) {
+				GoodsDesc goodsDesc = new GoodsDesc();
+				BeanUtils.copyProperties(e, goodsDesc);
+
+				if (StringUtil.isBlank(goodsDesc.getCnameInt())) {
+					goodsDesc.setCnameInt(getCnameInt(goodsDesc.getCname()));
+				}
+				goodsDesc.setType(0L);
+				goodsDesc.setCode(goodsDesc.getCname());
+				goodsDesc.setGoodsTypeId(String.valueOf(goodsType.getId()));
+				// 如果名称相等 就认为重复
+				LambdaQueryWrapper<GoodsDesc> queryWrapper = new LambdaQueryWrapper<>();
+				queryWrapper.eq(GoodsDesc::getTenantId, AuthUtil.getTenantId());
+				queryWrapper.eq(GoodsDesc::getCode, goodsDesc.getCode());
+				queryWrapper.eq(GoodsDesc::getIsDeleted, 0);
+				GoodsDesc one = goodsDescMapper.selectOne(queryWrapper);
+				if (one == null) {
+					goodsDesc.setCreateTime(new Date());
+					goodsDesc.setCreateUser(AuthUtil.getUserId());
+					goodsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					goodsDescMapper.insert(goodsDesc);
+
+					GoodsTypeDesc goodsTypeDes = new GoodsTypeDesc();
+					goodsTypeDes.setGoodsId(goodsDesc.getId());
+					goodsTypeDes.setGoodsTypeId(goodsType.getId());
+					goodsTypeDes.setCreateTime(new Date());
+					goodsTypeDes.setCreateUser(AuthUtil.getUserId());
+					goodsTypeDes.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					goodsTypeDescMapper.insert(goodsTypeDes);
+				} else {
+					goodsDesc.setId(one.getId());
+					goodsDesc.setUpdateTime(new Date());
+					goodsDesc.setUpdateUser(AuthUtil.getUserId());
+					goodsDescMapper.updateById(goodsDesc);
+				}
+			}else{
+				throw new SecurityException("未添加分类或者分类不存在");
+			}
+		});
+		return R.success("ok");
+	}
+
 	private String getCnameInt(String cname) {
 		String regex = "[^0-9]";
 		Pattern p = Pattern.compile(regex);

+ 32 - 0
blade-service/blade-client/src/main/java/org/springblade/client/serial/controller/StorageDescController.java

@@ -27,10 +27,12 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.StorageDesc;
+import org.springblade.client.entity.StorageType;
 import org.springblade.client.entity.StorageTypeDesc;
 import org.springblade.client.feign.IRedisClient;
 import org.springblade.client.serial.service.IStorageDescService;
 import org.springblade.client.serial.service.IStorageTypeDescService;
+import org.springblade.client.serial.service.IStorageTypeService;
 import org.springblade.client.vo.StorageDescVO;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
@@ -64,6 +66,8 @@ public class StorageDescController extends BladeController {
 
 	private final IRedisClient redisClient;//redis缓存处理
 
+	private final IStorageTypeService storageTypeService;
+
 	/**
 	 * 详情
 	 */
@@ -204,4 +208,32 @@ public class StorageDescController extends BladeController {
 	}
 
 
+	/**
+	 * 新增或修改 仓库
+	 */
+	@PostMapping("/submitType")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入storageType")
+	public R submitType(@Valid @RequestBody StorageType storageType) {
+		if (StringUtils.isBlank(storageType.getTenantId())){
+			storageType.setTenantId(SecureUtil.getTenantId());
+		}
+		if (StringUtils.isBlank(storageType.getCname())){
+			return R.fail(500,"仓库名称不能为空");
+		}
+		if (StringUtils.isBlank(storageType.getCode())){
+			return R.fail(500,"仓库编码不能为空");
+		}
+		if ("NotUNIQUE".equals(storageTypeService.selectStorageTypeCode(storageType))){
+			return R.fail(500,"仓库编码已存在");
+		}
+		if ("NotUNIQUE".equals(storageTypeService.selectStorageTypeCname(storageType))){
+			return R.fail(500,"仓库名称已存在");
+		}
+		StorageType storageType1 = storageDescService.submitType(storageType);
+		redisClient.basicData("storageType");
+		return R.data(storageType1);
+	}
+
+
 }

+ 3 - 0
blade-service/blade-client/src/main/java/org/springblade/client/serial/service/IStorageDescService.java

@@ -18,6 +18,7 @@ package org.springblade.client.serial.service;
 
 import org.apache.ibatis.annotations.Param;
 import org.springblade.client.entity.StorageDesc;
+import org.springblade.client.entity.StorageType;
 import org.springblade.client.vo.StorageDescVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -83,4 +84,6 @@ public interface IStorageDescService extends IService<StorageDesc> {
 	 * @return
 	 */
 	List<StorageDesc> selectStorageIds(String ids);
+
+	StorageType submitType(StorageType storageType);
 }

+ 54 - 0
blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/StorageDescServiceImpl.java

@@ -16,8 +16,10 @@
  */
 package org.springblade.client.serial.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.StorageDesc;
@@ -26,7 +28,12 @@ import org.springblade.client.entity.StorageTypeDesc;
 import org.springblade.client.serial.mapper.StorageDescMapper;
 import org.springblade.client.serial.service.IStorageDescService;
 import org.springblade.client.vo.StorageDescVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -134,4 +141,51 @@ public class StorageDescServiceImpl extends ServiceImpl<StorageDescMapper, Stora
 		return baseMapper.selectStorageIds(collect);
 	}
 
+	@Override
+	public StorageType submitType(StorageType storageType) {
+		if (storageType.getParentId() != null) {
+			StorageType storage = storageTypeService.getById(storageType.getParentId());
+			if (storage != null && storageType.getId() != null && Func.toLong(storageType.getParentId()) == Func.toLong(storageType.getId())) {
+				throw new ServiceException("父节点不可选择自身!");
+			}
+			if (storage != null) {
+				String ancestors = storage.getAncestors() + StringPool.COMMA + storageType.getParentId();
+				storageType.setAncestors(ancestors);
+			}
+		}
+		if (StringUtils.isBlank(storageType.getTenantId())) {
+			storageType.setTenantId(SecureUtil.getTenantId());
+		}
+		StorageDesc storageDesc = new StorageDesc();
+		BeanUtil.copy(storageType, storageDesc);
+		if (storageType.getId() == null) {
+			storageType.setCreateTime(new Date());
+			storageType.setCreateUser(SecureUtil.getUserId());
+			storageTypeService.save(storageType);
+
+			//保存库区信息
+			storageDesc.setId(null);
+			storageDesc.setStorageTypeId(storageType.getId());
+			storageDesc.setCreateTime(new Date());
+			storageDesc.setCreateUser(SecureUtil.getUserId());
+			storageDesc.setTenantId(SecureUtil.getTenantId());
+			baseMapper.insert(storageDesc);
+			//保存库区和仓库对应关系
+			boolean b = storageTypeDescService.saveMessage(storageDesc.getId(), storageDesc.getStorageTypeId(), SecureUtil.getTenantId());
+		} else {
+			storageType.setUpdateTime(new Date());
+			storageType.setUpdateUser(SecureUtil.getUserId());
+			storageTypeService.updateById(storageType);
+			List<StorageDesc> storageDescList = baseMapper.selectList(new LambdaQueryWrapper<StorageDesc>().eq(StorageDesc::getStorageTypeId, storageType.getId()).eq(StorageDesc::getIsDeleted, 0).eq(StorageDesc::getTenantId, AuthUtil.getTenantId()));
+			if (storageDescList.size() == 1) {
+				storageDesc.setId(storageDescList.get(0).getId());
+				storageDesc.setUpdateTime(new Date());
+				storageDesc.setUpdateUser(SecureUtil.getUserId());
+				storageDesc.setTenantId(SecureUtil.getTenantId());
+				baseMapper.updateById(storageDesc);
+			}
+		}
+		return storageType;
+	}
+
 }

+ 8 - 6
blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/StorageTypeServiceImpl.java

@@ -4,29 +4,29 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.client.entity.CorpsType;
-import org.springblade.client.entity.FeesType;
-import org.springblade.client.entity.GoodsType;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.StorageDesc;
 import org.springblade.client.entity.StorageType;
 import org.springblade.client.serial.mapper.StorageTypeMapper;
+import org.springblade.client.serial.service.IStorageDescService;
+import org.springblade.client.serial.service.IStorageTypeDescService;
 import org.springblade.client.serial.service.IStorageTypeService;
 import org.springblade.client.vo.StorageTypeVO;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 仓库 服务实现类
@@ -82,6 +82,8 @@ public class StorageTypeServiceImpl extends ServiceImpl<StorageTypeMapper, Stora
 		if (StringUtils.isBlank(storageType.getTenantId())) {
 			storageType.setTenantId(SecureUtil.getTenantId());
 		}
+		StorageDesc storageDesc = new StorageDesc();
+		BeanUtil.copy(storageType, storageDesc);
 		if (storageType.getId() == null) {
 			storageType.setCreateTime(new Date());
 			storageType.setCreateUser(SecureUtil.getUserId());

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

@@ -176,5 +176,12 @@ public class OrderDescClient implements IOrderDescClient {
 		return iOrderFilesService.list(queryWrapper);
 	}
 
+	@Override
+	@GetMapping(CORP_ANALYSIS)
+	public int corpAnalysis(Order order) {
+		order.setTenantId(AuthUtil.getTenantId());
+		return iOrderService.corpAnalysis(order);
+	}
+
 
 }

+ 2 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.java

@@ -314,4 +314,6 @@ public interface OrderMapper extends BaseMapper<Order> {
 	List<Order> selectPageByCorp(IPage<Order> page, @Param("order") Order order);
 
 	Map<String, BigDecimal> turnoverAnalysis(@Param("tenantId") String tenantId,@Param("type") String type, @Param("statusDate") String statusDate, @Param("endDate") String endDate,@Param("billType")String billType);
+
+	int corpAnalysis(@Param("order")Order order);
 }

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

@@ -2645,6 +2645,23 @@ ORDER BY
             and DATE_FORMAT(busines_date,'%Y-%m-%d') &lt;= DATE_FORMAT(#{endDate},'%Y-%m-%d')
         </if>
     </select>
+    <select id="corpAnalysis" resultType="java.lang.Integer">
+        select count(id)
+        from
+            business_order
+        where
+            is_deleted = 0
+          AND trade_type = 'YPJ'
+        <if test="order.corpId != null">
+            AND corp_id = #{order.corpId}
+        </if>
+        <if test="order.corpType != null and order.corpType != '' and order.corpType == 1">
+            and busines_date between date_sub(now(),interval 6 month) and now();
+        </if>
+        <if test="order.corpType != null and order.corpType != '' and order.corpType == 2">
+            AND busines_date between date_sub(now(),interval 2 month) and now();
+        </if>
+    </select>
     <update id="updateStockGoods" parameterType="org.springblade.stock.entity.StockGoods">
         UPDATE business_stock_goods SET surplus_route_quantity = #{surplusRouteQuantity},locking_quantity = #{lockingQuantity} WHERE tenant_id = #{tenantId} AND id = #{id} AND is_deleted = 0
     </update>

+ 2 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -379,4 +379,6 @@ public interface IOrderService extends IService<Order> {
 	R quickBilling(Order order);
 
 	Map<String, BigDecimal> turnoverAnalysis(String billType,String type, String statusDate, String endDate);
+
+	int corpAnalysis(Order order);
 }

+ 17 - 8
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -2191,6 +2191,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	public R revoke(Order order) {
 		Order selectOrder = baseMapper.selectById(order.getId());
 		if (ObjectUtils.isNotNull(selectOrder)) {
+			List<Settlement> settlementList = financeClient.selectListBySrcId(selectOrder.getId());
+			if (ObjectUtils.isNotNull(settlementList) && settlementList.size()>0){
+				throw new RuntimeException("该账单已结算,无法撤回");
+			}
 			LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			orderItemsLambdaQueryWrapper.eq(OrderItems::getIsDeleted, 0)
 				.eq(OrderItems::getTenantId, AuthUtil.getTenantId())
@@ -2205,17 +2209,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				R<StockGoodsVO> r = stockGoodsClient.selectStock(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
 				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 					if ("XS".equals(order.getBillType())) {
-						surplusRouteQuantity = surplusRouteQuantity.subtract(r.getData().getSurplusRouteQuantity().add(orderItems.getStorageInQuantity()));
-						balanceQuantity = balanceQuantity.subtract(surplusRouteQuantity);
-						balanceAmount = balanceAmount.subtract(balanceQuantity.multiply(orderItems.getPrice(), MathContext.DECIMAL32));
-						stockPrice = stockPrice.subtract(balanceAmount.divide(balanceQuantity), MathContext.DECIMAL32);
+						surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().add(orderItems.getStorageInQuantity()));
+						balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+						balanceAmount = balanceAmount.add(r.getData().getBalanceAmount().add(balanceQuantity.multiply(orderItems.getPrice(), MathContext.DECIMAL32)));
+						stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity), MathContext.DECIMAL32);
 						r.getData().setOutQuantity(r.getData().getOutQuantity().subtract(orderItems.getStorageInQuantity()));
 						r.getData().setOutAmount(r.getData().getOutAmount().subtract(orderItems.getAmount()));
 					} else {
-						surplusRouteQuantity = surplusRouteQuantity.subtract(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
-						balanceQuantity = balanceQuantity.subtract(surplusRouteQuantity);
-						balanceAmount = balanceAmount.subtract(balanceQuantity.multiply(orderItems.getPrice(), MathContext.DECIMAL32));
-						stockPrice = stockPrice.subtract(balanceAmount.divide(balanceQuantity), MathContext.DECIMAL32);
+						surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
+						balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+						balanceAmount = balanceAmount.add(r.getData().getBalanceAmount().subtract(balanceQuantity.multiply(orderItems.getPrice(), MathContext.DECIMAL32)));
+						stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity), MathContext.DECIMAL32);
 						r.getData().setInQuantity(r.getData().getInQuantity().subtract(orderItems.getStorageInQuantity()));
 						r.getData().setInAmount(r.getData().getInAmount().subtract(orderItems.getAmount()));
 					}
@@ -2502,6 +2506,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
+	public int corpAnalysis(Order order) {
+		return baseMapper.corpAnalysis(order);
+	}
+
+	@Override
 	public MonthSales monthSales(OrderVO order) {
 		MonthSales monthSales = new MonthSales();
 		if (AuthUtil.getTenantId().equals("673511")) {

+ 2 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -175,7 +175,9 @@ public class SettlementController extends BladeController {
 		settlementLambdaQueryWrapper.between(StringUtils.isNotBlank(settlement.getSettlementStartDate()) && StringUtils.isNotBlank(settlement.getSettlementEndDate()), Settlement::getSettlementDate, settlement.getSettlementStartDate(), settlement.getSettlementEndDate());
 		settlementLambdaQueryWrapper.between(StringUtils.isNotBlank(settlement.getCreateStartDate()) && StringUtils.isNotBlank(settlement.getCreateEndDate()), Settlement::getCreateTime, settlement.getCreateStartDate(), settlement.getCreateEndDate());
 		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getSrcOrderno()), Settlement::getSrcOrderno, settlement.getSrcOrderno());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getSysNo()), Settlement::getSysNo, settlement.getSysNo());
 		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getBillNo()), Settlement::getBillNo, settlement.getBillNo());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getAccount()), Settlement::getAccount, settlement.getAccount());
 		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getRemark()), Settlement::getRemark, settlement.getRemark());
 		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getAccountName()), Settlement::getAccountName, settlement.getAccountName());
 		settlementLambdaQueryWrapper.like(settlement.getCorpId() != null, Settlement::getCorpId, settlement.getCorpId());