|
|
@@ -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("请选择需要结算的商品");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|