Browse Source

20230525 08:35

wangzhuo 2 years ago
parent
commit
c92daf3170

+ 2 - 2
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/enums/OrderTypeEnum.java

@@ -94,12 +94,12 @@ public enum OrderTypeEnum {
 	PASS("审批通过"),
 
 	/**
-	 * 小程序
+	 * 外部销售
 	 */
 	XCX("外部销售"),
 
 	/**
-	 * 网页端
+	 * 内部销售
 	 */
 	WEB("内部销售"),
 

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

@@ -120,7 +120,8 @@ public class GoodsDescController extends BladeController {
 			.like(StringUtils.isNotBlank(goods.getCname()), PjGoodsDesc::getCname, goods.getCname())//商品名称
 			.eq(ObjectUtils.isNotEmpty(goods.getBrandId()), PjGoodsDesc::getBrandId, goods.getBrandId())//品牌
 			.like(ObjectUtils.isNotEmpty(goods.getBrandName()), PjGoodsDesc::getBrandName, goods.getBrandName())
-			.eq(ObjectUtils.isNotEmpty(goods.getSalesCompanyId()), PjGoodsDesc::getSalesCompanyId, goods.getSalesCompanyId())//所属公司
+			.like(ObjectUtils.isNotEmpty(goods.getCode()), PjGoodsDesc::getCode, goods.getCode())//编码
+			.like(ObjectUtils.isNotEmpty(goods.getCnameInt()), PjGoodsDesc::getCnameInt, goods.getCnameInt())//快捷拼命查询
 			.eq(ObjectUtils.isNotEmpty(goods.getWhether()), PjGoodsDesc::getWhether, goods.getWhether())//是否管理到批次号
 			.eq(ObjectUtils.isNotEmpty(goods.getExplosionProof()), PjGoodsDesc::getExplosionProof, goods.getExplosionProof());//是否防爆
 		IPage<PjGoodsDesc> pages = goodsService.page(Condition.getPage(query),lambdaQueryWrapper);

+ 65 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java

@@ -25,6 +25,7 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -40,6 +41,7 @@ import org.springblade.salesPart.goods.mapper.GoodsTypeDescMapper;
 import org.springblade.salesPart.goods.mapper.GoodsTypeMapper;
 import org.springblade.salesPart.goods.service.IGoodsDescService;
 import org.springblade.salesPart.goods.service.IGoodsFilesService;
+import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
 import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.salesPart.vo.GoodsDescVO;
 import org.springblade.system.entity.Dept;
@@ -47,6 +49,7 @@ import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
@@ -71,6 +74,7 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 	private final IGoodsFilesService goodsFilesService;
 	private final BrandDescMapper brandDescMapper;
 	private final IStockDescService stockDescService;
+	private final IProductLaunchService productLaunchService;
 
 	private final ISysClient iSysClient;
 
@@ -91,7 +95,12 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 		//获得库存
 		List<PjStockDesc> stockDescList = stockDescService.list(new QueryWrapper<PjStockDesc>().eq("goods_id", goodsDesc.getId()).eq("is_deleted", 0));
 		if (ObjectUtils.isNotNull(stockDescList)){
-			desc.setModifiable(0);
+			BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			if (balanceQuantity.compareTo(BigDecimal.ZERO) == 0){
+				desc.setModifiable(0);
+			}else {
+				desc.setModifiable(1);
+			}
 		}else {
 			desc.setModifiable(1);
 		}
@@ -112,7 +121,24 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public PjGoodsDesc saveMessage(PjGoodsDesc goodsDesc) {
+
+		//获得品牌
+		if (ObjectUtils.isNotNull(goodsDesc.getBrandId())){
+			PjBrandDesc brandDesc = brandDescMapper.selectOne(new LambdaQueryWrapper<PjBrandDesc>()
+				.eq(PjBrandDesc::getIsDeleted, 0)
+				.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjBrandDesc::getId, goodsDesc.getBrandId()));
+
+			if (ObjectUtils.isNotNull(brandDesc)){
+				goodsDesc.setBrandId(brandDesc.getId());
+				goodsDesc.setBrandName(brandDesc.getCname());
+			}else {
+				throw new RuntimeException("品牌名称错误或品牌不存在");
+			}
+		}
+
 		if (goodsDesc.getId() == null) {
 			goodsDesc.setCreateUser(AuthUtil.getUserId());
 			goodsDesc.setCreateTime(new Date());
@@ -146,6 +172,44 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 			});
 		}
 
+		//修改本地上架信息
+		PjProductLaunch productLaunch = productLaunchService.getOne(new QueryWrapper<PjProductLaunch>().eq("tenant_id", AuthUtil.getTenantId())
+		.eq("is_deleted", 0).eq("sales_company_id", goodsDesc.getSalesCompanyId()).eq("goods_id", goodsDesc.getId()));
+
+		if (ObjectUtil.isNotEmpty(productLaunch)){
+			productLaunch.setCname(goodsDesc.getCname());
+			productLaunch.setSpecificationAndModel(goodsDesc.getSpecificationAndModel());
+			productLaunch.setBrandId(goodsDesc.getBrandId());
+			productLaunch.setBrandName(goodsDesc.getBrandName());
+			productLaunch.setBrandItem(goodsDesc.getBrandItem());
+			productLaunch.setPlaceProduction(goodsDesc.getPlaceProduction());
+			productLaunch.setCnameInt(goodsDesc.getCnameInt());
+			productLaunch.setExplosionProof(goodsDesc.getExplosionProof());
+			productLaunch.setOriginalFactory(goodsDesc.getOriginalFactory());
+			productLaunch.setSelfRecovery(goodsDesc.getSelfRecovery());
+			productLaunchService.updateById(productLaunch);
+		}
+
+		//修改共享上架信息
+		List<PjProductLaunch> list = productLaunchService.list(new QueryWrapper<PjProductLaunch>().eq("tenant_id", AuthUtil.getTenantId())
+			.eq("is_deleted", 0).eq("source_company_id", goodsDesc.getSalesCompanyId()).eq("goods_id", goodsDesc.getId()));
+
+		if (ObjectUtil.isNotEmpty(list)){
+			list.forEach(e -> {
+				e.setCname(goodsDesc.getCname());
+				e.setSpecificationAndModel(goodsDesc.getSpecificationAndModel());
+				e.setBrandId(goodsDesc.getBrandId());
+				e.setBrandName(goodsDesc.getBrandName());
+				e.setBrandItem(goodsDesc.getBrandItem());
+				e.setPlaceProduction(goodsDesc.getPlaceProduction());
+				e.setCnameInt(goodsDesc.getCnameInt());
+				e.setExplosionProof(goodsDesc.getExplosionProof());
+				e.setOriginalFactory(goodsDesc.getOriginalFactory());
+				e.setSelfRecovery(goodsDesc.getSelfRecovery());
+			});
+			productLaunchService.updateBatchById(list);
+		}
+
 		return goodsDesc;
 	}
 

+ 11 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -325,4 +325,15 @@ public class OrderController extends BladeController {
 		return orderService.underReview(id);
 	}
 
+	/**
+	 * 审核不通过
+	 */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 16)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	public R passCancel(@ApiParam(value = "财务主表id", required = true) @RequestParam Long id) {
+		orderService.passCancel(id);
+		return R.success("操作成功");
+	}
+
 }

+ 6 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java

@@ -99,4 +99,10 @@ public interface IOrderService extends IService<PjOrder> {
 	 */
 	R underReview(Long id);
 
+	/**
+	 * 审核不通过
+	 * @param id
+	 */
+	R passCancel(Long id);
+
 }

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

@@ -44,6 +44,8 @@ import org.springblade.salesPart.ship.mapper.ShipMapper;
 import org.springblade.salesPart.stock.mapper.StockDescMapper;
 import org.springblade.salesPart.storage.mapper.StorageDescMapper;
 import org.springblade.salesPart.vo.OrderVO;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
@@ -78,6 +80,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	private final StockDescMapper stockDescMapper;
 	private final ProductLaunchMapper productLaunchMapper;
 	private final GoodsDescMapper goodsDescMapper;
+	private final ISysClient sysClient;
 
 	/**
 	 * 获取销售订单详情
@@ -157,17 +160,23 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setTenantId(AuthUtil.getTenantId());
 				order.setStatus(OrderTypeEnum.XSLR.getType());
 				order.setBusinessSource(OrderTypeEnum.WEB.getType());
+				//所属公司
+				R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+				if (ObjectUtil.isNotEmpty(dept)) {
+					order.setSalesCompanyId(dept.getData().getId());
+					order.setSalesCompanyName(dept.getData().getFullName());
+					order.setSharedCompanyId(dept.getData().getId());
+					order.setSharedCompanyName(dept.getData().getFullName());
+				} else {
+					throw new SecurityException("未维护所属公司");
+				}
+
 				//根据客户账期计算应结日期
 				if (ObjectUtil.isNotEmpty(corpsDesc.getAccountPeriod())){
-
 					Date now = new Date(); // 获取当前时间
-					System.out.println("当前时间: " + now);
-
 					long sevenDays = corpsDesc.getAccountPeriod() * 24 * 60 * 60 * 1000L;
 					Date afterSevenDays = new Date(now.getTime() + sevenDays);
-					System.out.println("加账期后的时间: " + afterSevenDays);
 					order.setDueDate(afterSevenDays);
-
 				}else {
 					order.setDueDate(new Date());
 				}
@@ -258,12 +267,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				},BigDecimal::add).setScale(2,BigDecimal.ROUND_HALF_UP);
 
 				order.setSalesAmount(totalMoney);
+				order.setTotalMoney(totalMoney);
 
-				if (order.getOrderItemsList().size() == 1){//只有一条明细加5元运费
-					totalMoney.add(new BigDecimal(5));
+				if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {//只有一条轮胎加5元运费
+					order.setTotalMoney(totalMoney.add(new BigDecimal(5)));
 					order.setFreight(new BigDecimal(5));
 				}
-				order.setTotalMoney(totalMoney);
 
 				//毛利
 				order.setGrossProfit(order.getOrderItemsList().stream().filter(e ->e.getGrossProfit() != null).map(PjOrderItems::getGrossProfit).reduce(BigDecimal.ZERO,BigDecimal::add));
@@ -278,6 +287,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 				order.setTenantId(AuthUtil.getTenantId());
 				order.setStatus(OrderTypeEnum.XSLR.getType());
+				//所属公司
+				R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+				if (ObjectUtil.isNotEmpty(dept)) {
+					order.setSalesCompanyId(dept.getData().getId());
+					order.setSalesCompanyName(dept.getData().getFullName());
+				} else {
+					throw new SecurityException("未维护所属公司");
+				}
 				baseMapper.insert(order);
 			}else {
 				order.setUpdateUser(AuthUtil.getUserId());
@@ -366,6 +383,31 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		pjOrder.setStatus(OrderTypeEnum.XSDFH.getType());
 		baseMapper.updateById(pjOrder);
 
+		//内部销售修改上架管理的库存
+		if (pjOrder.getBusinessSource().equals(OrderTypeEnum.WEB.getType())){
+			LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PjOrderItems::getIsDeleted, 0)
+				.eq(PjOrderItems::getPid, pjOrder.getId());
+			List<PjOrderItems> itemsList = orderItemsMapper.selectList(itemsLambdaQueryWrapper);
+			if (ObjectUtil.isNotEmpty(itemsList)){
+				itemsList.forEach(e -> {
+					LambdaQueryWrapper<PjProductLaunch> queryWrapper = new LambdaQueryWrapper<>();
+					queryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+						.eq(PjProductLaunch::getIsDeleted, 0)
+						.and(i -> i.eq(PjProductLaunch::getSalesCompanyId, pjOrder.getSalesCompanyId()).or().in(PjProductLaunch::getSourceCompanyId, pjOrder.getSalesCompanyId()))
+						.eq(PjProductLaunch::getGoodsId, e.getGoodsId());
+					List<PjProductLaunch> launchList = productLaunchMapper.selectList(queryWrapper);
+					if (ObjectUtil.isNotEmpty(launchList)){
+						launchList.forEach( productLaunch -> {
+							productLaunch.setInventory(productLaunch.getInventory().subtract(e.getGoodsNum()));
+							productLaunchMapper.updateById(productLaunch);
+						});
+					}
+				});
+			}
+		}
+
 		return R.success("操作成功");
 	}
 
@@ -488,6 +530,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		}
 
 		declare.setStatus("退款中");
+		order.setCheckStatus("审核请核");
 		baseMapper.updateById(declare);
 
 		return declare;
@@ -523,11 +566,27 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			throw new SecurityException("审批通过失败");
 		}
 
-		order.setStatus("退款中");
 		order.setCheckStatus("审批中");
 		baseMapper.updateById(order);
 
 		return R.success("操作成功");
 	}
 
+	/**
+	 * 审核不通过
+	 */
+	@Override
+	public R passCancel(Long id) {
+		PjOrder order = baseMapper.selectById(id);
+		if (order == null) {
+			throw new SecurityException("审批驳回失败");
+		}
+
+		order.setStatus("审批驳回");
+		order.setCheckStatus("审批驳回");
+		baseMapper.updateById(order);
+
+		return R.success("操作成功");
+	}
+
 }

+ 2 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java

@@ -100,10 +100,11 @@ public class ProductLaunchController extends BladeController {
 			.eq(PjProductLaunch::getSalesCompanyId, AuthUtil.getDeptId())//公司
 			.eq(ObjectUtil.isNotEmpty(productLaunch.getBrandId()), PjProductLaunch::getBrandId, productLaunch.getBrandId())
 			.like(ObjectUtils.isNotEmpty(productLaunch.getSpecificationAndModel()), PjProductLaunch::getSpecificationAndModel, productLaunch.getSpecificationAndModel())//规格型号
-			.like(ObjectUtils.isNotEmpty(productLaunch.getSalesCompanyName()), PjProductLaunch::getSalesCompanyName, productLaunch.getSalesCompanyName());
+			.in(ObjectUtil.isNotEmpty(productLaunch.getSourceCompanyId()), PjProductLaunch::getSourceCompanyId, productLaunch.getSourceCompanyId());//来源公司
 		if (ObjectUtil.isNotEmpty(productLaunch.getCname())){
 			lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, productLaunch.getCname()).or().like(PjProductLaunch::getCnameInt, productLaunch.getCname()));
 		}
+
 		if (productLaunch.getBillType() == 1){
 			lambdaQueryWrapper.eq(PjProductLaunch::getWhetherShare, 0);
 		}