纪新园 1 рік тому
батько
коміт
f60a58f7a7

+ 6 - 5
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetail.java

@@ -2,13 +2,8 @@ package org.springblade.salesPart.dto;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 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.math.BigDecimal;
-
 /**
  * @author :jixinyuan
  * @date : 2024/3/12
@@ -63,5 +58,11 @@ public class SaleDetail {
 	@ExcelIgnore
 	private String isContain;
 
+	/**
+	 * 所属公司id
+	 */
+	@ExcelIgnore
+	private String salesCompanyId;
+
 
 }

+ 14 - 2
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java

@@ -717,7 +717,12 @@ public class PaymentServiceImpl implements IPaymentService {
 							}
 						}
 						ipjOrderClient.updateOrder(re.getData());
-						ipjCorpClient.updateIntegral(re.getData());
+						/*R res = ipjCorpClient.updateIntegral(re.getData());
+						if (ObjectUtils.isNotNull(res) && res.isSuccess()) {
+							System.out.println("积分修改成功:" + res.getMsg());
+						} else {
+							System.out.println("积分修改失败调取接口异常");
+						}*/
 						SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
 						String date1 = format.format(new Date());
 
@@ -806,6 +811,7 @@ public class PaymentServiceImpl implements IPaymentService {
 			TreeMap<String, String> params = NotifyServlet.getParams(request);
 			String appKey;
 
+			System.out.println("交易返回数据:" + params);
 			WechatMark wechatMark = new WechatMark();
 
 			Parameters parameters = new Parameters();
@@ -829,6 +835,7 @@ public class PaymentServiceImpl implements IPaymentService {
 			wechatMark.setCreateTime(new Date());
 			wechatMark.setType("支付");
 			if (isSign) {
+				System.out.println("签名验证成功");
 				String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
 				if (Objects.equals(trxstatus, "0000")) {
 					wechatMark.setSrcBillNo(AnalysisMapUtils.getString("cusorderid", params));
@@ -915,7 +922,12 @@ public class PaymentServiceImpl implements IPaymentService {
 
 						}
 						ipjOrderClient.updateOrder(re.getData());
-						ipjCorpClient.updateIntegral(re.getData());
+						R res = ipjCorpClient.updateIntegral(re.getData());
+						if (ObjectUtils.isNotNull(res) && res.isSuccess()) {
+							System.out.println("积分修改成功:" + res.getMsg());
+						} else {
+							System.out.println("积分修改失败调取接口异常");
+						}
 						wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付成功");
 						wechatMark.setStatus(1);
 					} else {

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

@@ -17,7 +17,6 @@
 package org.springblade.salesPart.corps.controller;
 
 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.ObjectUtils;
@@ -27,9 +26,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
-import org.springblade.client.entity.CorpsAddr;
-import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.StorageDesc;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -37,8 +33,10 @@ import org.springblade.core.mp.support.Query;
 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.utils.*;
-import org.springblade.purchase.sales.entity.Order;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.salesPart.corps.service.*;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.excel.CorpsDescExportExcel;
@@ -229,6 +227,18 @@ public class CorpsDescController extends BladeController {
 				.in(PjOrder::getCustomerId, list)) > 0) {
 				throw new RuntimeException("客户已创建业务数据,删除失败");
 			}
+			List<PjCorpsAttn> corpsAttnList = corpsAttnService.list(new LambdaQueryWrapper<PjCorpsAttn>()
+				.in(PjCorpsAttn::getPid, list));
+			if (!corpsAttnList.isEmpty()) {
+				List<Long> attnIds = corpsAttnList.stream().map(PjCorpsAttn::getId).collect(Collectors.toList());
+				corpsAttnService.removeByIds(attnIds);
+			}
+			List<PjCorpsAddr> corpsAddrList = corpsAddrService.list(new LambdaQueryWrapper<PjCorpsAddr>()
+				.in(PjCorpsAddr::getPid, list));
+			if (!corpsAddrList.isEmpty()) {
+				List<Long> addrIds = corpsAddrList.stream().map(PjCorpsAddr::getId).collect(Collectors.toList());
+				corpsAddrService.removeByIds(addrIds);
+			}
 		}
 		return R.status(corpsDescService.removeByIds(list));
 	}

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/fegin/PJCorprClient.java

@@ -169,6 +169,8 @@ public class PJCorprClient implements IPJCorpClient {
 					}
 				}
 			}
+		} else {
+			System.out.println("=========订单数据为空==========");
 		}
 		if (!corpsDescs.isEmpty()) {
 			corpsDescService.updateBatchById(corpsDescs);

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsAttnServiceImpl.java

@@ -133,6 +133,7 @@ public class CorpsAttnServiceImpl extends ServiceImpl<CorpsAttnMapper, PjCorpsAt
 		PjCorpsAttn corpsAttn = baseMapper.selectOne(new LambdaQueryWrapper<PjCorpsAttn>()
 			.eq(PjCorpsAttn::getUserId, userId)
 			.eq(PjCorpsAttn::getIsDeleted, 0)
+			.eq(PjCorpsAttn::getSalesCompanyId, AuthUtil.getDeptId())
 			.eq(PjCorpsAttn::getTenantId, AuthUtil.getTenantId())
 		);
 		return corpsAttn;

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

@@ -86,6 +86,9 @@
         AND po.bs_type = 'XS'
         AND poi.tenant_id = #{saleDetailDto.tenantId}
         AND po.tenant_id = #{saleDetailDto.tenantId}
+        <if test="saleDetailDto.salesCompanyId !=null and saleDetailDto.salesCompanyId != ''">
+            and find_in_set(shared_company_id,#{saleDetailDto.salesCompanyId})
+        </if>
         <if test="saleDetailDto.customerName !=null and saleDetailDto.customerName != ''">
             and po.customer_name like concat('%', #{saleDetailDto.customerName}, '%')
         </if>
@@ -160,6 +163,9 @@
         AND po.bs_type = 'XS'
         AND poi.tenant_id = #{tenantId}
         AND po.tenant_id = #{tenantId}
+        <if test="salesCompanyId !=null and salesCompanyId != ''">
+            and find_in_set(shared_company_id,#{salesCompanyId})
+        </if>
         <if test="customerName !=null and customerName != ''">
             and po.customer_name like concat('%', #{customerName}, '%')
         </if>

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/controller/ShoppingCartController.java

@@ -178,5 +178,15 @@ public class ShoppingCartController extends BladeController {
 		return shoppingCartService.generateOrder(pjShoppingCart.getAddress(), pjShoppingCart.getList(), pjShoppingCart.getPayType());
 	}
 
+	/**
+	 * 活动生成销售单
+	 */
+	@PostMapping("/activityGenerateOrder")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "购物车生成销售单", notes = "传入shoppingCart")
+	public R activityGenerateOrder(@RequestBody PjShoppingCart pjShoppingCart) {
+		return shoppingCartService.activityGenerateOrder(pjShoppingCart.getAddress(), pjShoppingCart.getList(), pjShoppingCart.getPayType());
+	}
+
 
 }

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/IShoppingCartService.java

@@ -61,4 +61,5 @@ public interface IShoppingCartService extends IService<PjShoppingCart> {
 	 */
 	R generateOrder(String address, List<Map<String, Object>> list,String payType);
 
+	R activityGenerateOrder(String address, List<Map<String, Object>> list, String payType);
 }

+ 186 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java

@@ -317,4 +317,190 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 		}
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R activityGenerateOrder(String address, List<Map<String, Object>> list, String payType) {
+		StringBuilder ids = new StringBuilder();
+		StringBuilder goodsName = new StringBuilder();
+		StringBuilder shortcutJoin = new StringBuilder();
+		BigDecimal amount = new BigDecimal("0.00");
+
+		//从集合中取出商品生成销售单
+		if (ObjectUtil.isNotEmpty(list)) {
+
+			PjCorpsDesc corpsDesc = null;
+			//根据当前登录人获得客户
+			PjCorpsAttn corpsAttn = corpsAttnService.getAttn(AuthUtil.getUserId());
+			if (ObjectUtil.isNotEmpty(corpsAttn)) {
+				corpsDesc = corpsDescService.getCorpsDesc(corpsAttn.getPid());
+				if (ObjectUtil.isEmpty(corpsDesc)) {
+					throw new RuntimeException("未查到用户信息");
+				}
+			} else {
+				throw new RuntimeException("未查到用户信息");
+			}
+
+			PjCorpsDesc finalCorpsDesc = corpsDesc;
+
+			// 获取系统编号
+			R billNo = serialClient.getBillNo("WB", "WB", "WB");
+			if (billNo.getCode() != 200) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new RuntimeException("生成系统编号失败");
+			}
+
+			Integer i = 1;
+			// 获取系统编号
+			R SrcOrdNo = serialClient.getBillNo("XS", "XS", "XS");
+			if (SrcOrdNo.getCode() != 200) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new RuntimeException("生成系统编号失败");
+			}
+			List<PjOrder> pjOrderList = new ArrayList<>();
+			for (Map<String, Object> map : list) {
+				String k = (String) map.get("name");
+				if (StringUtil.isNotBlank(k)) {
+
+					String jsonStr = JSON.toJSONString(map.get("list"));
+					JSONArray objects = JSONArray.parseArray(jsonStr);
+					List<PjShoppingCart> shoppingCartList = objects.toJavaList(PjShoppingCart.class);
+
+					//保存销售主表信息
+					PjOrder order = new PjOrder();
+					if (list.size() == 1) {//如果只有一个公司,订单编号和主编号一致
+						order.setOrdNo((String) SrcOrdNo.getData());
+					} else {
+						order.setOrdNo(SrcOrdNo.getData() + "-" + i);
+					}
+					order.setBusinesDate(new Date());
+					order.setSrcOrdNo((String) billNo.getData());
+					order.setCreateUser(AuthUtil.getUserId());
+
+					//处理部门
+					int index = AuthUtil.getDeptId().indexOf(",");
+					Long deptId = null;
+					if (index > -1) {
+						deptId = Long.valueOf(AuthUtil.getDeptId().substring(0, index));
+					} else {
+						deptId = (Long.valueOf(AuthUtil.getDeptId()));
+					}
+
+					//根据客户账期计算应结日期
+					if (ObjectUtil.isNotEmpty(corpsDesc.getAccountPeriod())) {
+						Date now = new Date(); // 获取当前时间
+						long sevenDays = corpsDesc.getAccountPeriod() * 24 * 60 * 60 * 1000L;
+						Date afterSevenDays = new Date(now.getTime() + sevenDays);
+						order.setDueDate(afterSevenDays);
+					} else {
+						order.setDueDate(new Date());
+					}
+
+					order.setCreateTime(new Date());
+					order.setCreateDept(deptId);
+					order.setTenantId(AuthUtil.getTenantId());
+					/*order.setStatus(OrderTypeEnum.XSLR.getType());
+					order.setXcxStatus(OrderTypeEnum.XSLR.getType());*/
+					order.setCustomerId(finalCorpsDesc.getId());
+					order.setCustomerName(finalCorpsDesc.getCname());
+					if (ObjectUtils.isNotNull(finalCorpsDesc.getSalesmanId())) {
+						order.setSalerId(finalCorpsDesc.getSalesmanId());
+						order.setSalerName(finalCorpsDesc.getSalesmanName());
+					} else {
+						R<List<User>> res = userSearchClient.getWarehouseKeeper("业务员", AuthUtil.getDeptId());
+						if (res.isSuccess() && ObjectUtils.isNotNull(res.getData()) && !res.getData().isEmpty()) {
+							order.setSalerId(res.getData().get(0).getId());
+							order.setSalerName(res.getData().get(0).getAccount());
+						}
+					}
+					order.setSalesCompanyId(deptId);
+					order.setSalesCompanyName(sysClient.getDeptName(deptId).getData());
+					order.setRecAddress(address);
+					order.setContacts(corpsAttn.getCname());
+					order.setPhone(corpsAttn.getTel());
+					order.setBsType(OrderTypeEnum.SALES.getType());
+					order.setBusinessSource(OrderTypeEnum.XCX.getType());
+					order.setReceivableType("网络支付");
+					orderService.save(order);
+					ids.append(order.getId()).append(",");
+					//保存销售明细信息
+					if (ObjectUtil.isNotEmpty(shoppingCartList)) {
+						List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
+						shoppingCartList.forEach(e -> {
+							PjOrderItems orderItems = new PjOrderItems();
+							BeanUtils.copyProperties(e, orderItems);
+							if (e.getInventory().compareTo(orderItems.getGoodsNum()) < 0) {
+								throw new RuntimeException("库存不足");
+							}
+							orderItems.setId(null);
+							orderItems.setSendNum(new BigDecimal("0.00"));
+							orderItems.setCreateUser(AuthUtil.getUserId());
+							orderItems.setCreateDept(order.getCreateDept());
+							orderItems.setCreateTime(new Date());
+							orderItems.setPid(order.getId());
+							orderItems.setTenantId(AuthUtil.getTenantId());
+							orderItems.setBillNo(order.getOrdNo());
+							orderItems.setBizType(order.getBsType());
+							orderItems.setInventory(e.getInventory());
+							orderItems.setTotalAmount(orderItems.getGoodsNum().multiply(orderItems.getPrice()));
+							orderItems.setUrl(ObjectUtils.isNotNull(e.getFilesList()) && !e.getFilesList().isEmpty() ? e.getFilesList().get(0).getUrl() : "");
+							orderItems.setGoodsName(e.getGoodsName());
+							orderItemsMapper.insert(orderItems);
+							PjGoodsDesc goodsDesc = goodsDescMapper.selectById(orderItems.getGoodsId());
+							if (ObjectUtils.isNotNull(goodsDesc)) {
+								shortcutJoin.append(goodsDesc.getCnameInt()).append(",");
+							}
+							goodsName.append(orderItems.getGoodsName()).append(",");
+						});
+						order.setBillType(0);
+						BigDecimal totalMoney = BigDecimal.ZERO;
+						//行数
+						order.setNumberRows(shoppingCartList.size());
+						//明细总数量
+						order.setGoodsTotalNum(shoppingCartList.stream().map(PjShoppingCart::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						//明细总金额
+						totalMoney = shoppingCartList.stream().reduce(BigDecimal.ZERO, (x, y) -> {
+							return x.add(y.getGoodsNum().multiply(y.getPrice()));
+						}, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+
+						order.setSalesAmount(totalMoney);
+						order.setTotalMoney(totalMoney);
+
+						if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {
+							//只有一条明细加5元运费
+							totalMoney = totalMoney.add(new BigDecimal(5));
+							order.setTotalMoney(totalMoney);
+							order.setFreight(new BigDecimal(5));
+						}
+						amount = amount.add(totalMoney);
+						order.setSharedCompanyId(shoppingCartList.get(0).getSharedCompanyId());
+						order.setSharedCompanyName(shoppingCartList.get(0).getSharedCompanyName());
+					}
+					if (goodsName.length() > 0) {
+						order.setGoodsNameJoin(goodsName.substring(0, goodsName.length() - 1));
+					}
+					if (shortcutJoin.length() > 0) {
+						order.setShortcutJoin(shortcutJoin.substring(0, shortcutJoin.length() - 1));
+					}
+					order.setPayType(payType);
+					pjOrderList.add(order);
+				}
+				i++;
+			}
+			R<Map<Object, Object>> r = payService.payPrepay(ids.substring(0, ids.length() - 1), amount, billNo.getData().toString(), 0, goodsName.substring(0, goodsName.length() - 1), payType);
+			if ("W01".equals(payType) ||
+				"A01".equals(payType) ||
+				"U01".equals(payType) ||
+				"S01".equals(payType)) {
+				for (PjOrder item : pjOrderList) {
+					item.setPayUrl(r.getData().get("url").toString());
+				}
+			}
+			orderService.updateBatchById(pjOrderList);
+			return r;
+		} else {
+			throw new RuntimeException("请选择需要结算的商品");
+		}
+	}
+
 }

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

@@ -472,12 +472,14 @@ public class StatisticsServiceImpl implements IStatisticsService {
 	@Override
 	public R<IPage<SaleDetailDto>> saleDetail(SaleDetail saleDetailDto, IPage<SaleDetailDto> page) {
 		saleDetailDto.setTenantId(AuthUtil.getTenantId());
+		saleDetailDto.setSalesCompanyId(AuthUtil.getDeptId());
 		return R.data(orderItemsService.saleDetail(saleDetailDto, page));
 	}
 
 	@Override
 	public R saleDetailSum(SaleDetail saleDetailDto) {
 		saleDetailDto.setTenantId(AuthUtil.getTenantId());
+		saleDetailDto.setSalesCompanyId(AuthUtil.getDeptId());
 		Map<String, Object> map = new HashMap<>();
 		List<SaleDetailDto> saleDetailDtoList = orderItemsService.saleDetailList(saleDetailDto);
 		if (!saleDetailDtoList.isEmpty()) {
@@ -521,6 +523,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
 	@Override
 	public List<SaleDetailDto> saleDetailExport(SaleDetail saleDetailDto) {
 		saleDetailDto.setTenantId(AuthUtil.getTenantId());
+		saleDetailDto.setSalesCompanyId(AuthUtil.getDeptId());
 		return orderItemsService.saleDetailList(saleDetailDto);
 	}
 }