|
|
@@ -16,18 +16,35 @@
|
|
|
*/
|
|
|
package org.springblade.salesPart.shoppingCart.service.impl;
|
|
|
|
|
|
+import com.alibaba.csp.sentinel.util.StringUtil;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.client.feign.ISerialClient;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
-import org.springblade.salesPart.entity.PjShoppingCart;
|
|
|
+import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
+import org.springblade.salesPart.corps.service.ICorpsAttnService;
|
|
|
+import org.springblade.salesPart.corps.service.ICorpsDescService;
|
|
|
+import org.springblade.salesPart.entity.*;
|
|
|
+import org.springblade.salesPart.enums.OrderTypeEnum;
|
|
|
+import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
|
|
|
+import org.springblade.salesPart.order.mapper.OrderItemsMapper;
|
|
|
+import org.springblade.salesPart.order.mapper.OrderMapper;
|
|
|
import org.springblade.salesPart.shoppingCart.mapper.ShoppingCartMapper;
|
|
|
import org.springblade.salesPart.shoppingCart.service.IShoppingCartService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.springblade.salesPart.storage.mapper.StorageDescMapper;
|
|
|
import org.springblade.salesPart.vo.ShoppingCartVO;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
* 配件批发购物车服务实现类
|
|
|
@@ -39,14 +56,60 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
@AllArgsConstructor
|
|
|
public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjShoppingCart> implements IShoppingCartService {
|
|
|
|
|
|
- private ISerialClient serialClient;//生成系统编号
|
|
|
+ private final ISerialClient serialClient;//生成系统编号
|
|
|
+ private final StorageDescMapper storageDescMapper;//仓库
|
|
|
+ private final GoodsDescMapper goodsDescMapper;//商品
|
|
|
+ private final ICorpsAttnService corpsAttnService;//客户联系人
|
|
|
+ private final ICorpsDescService corpsDescService;//客户
|
|
|
+ private final OrderMapper orderMapper;
|
|
|
+ private final OrderItemsMapper orderItemsMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存修改购物车信息
|
|
|
+ *
|
|
|
+ * @param shoppingCart
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R saveShoppingCart(PjShoppingCart shoppingCart) {
|
|
|
+ //仓库名称
|
|
|
+ shoppingCart.setStorageName(storageDescMapper.selectById(shoppingCart.getStorageId()).getCname());
|
|
|
+ //商品名称
|
|
|
+ shoppingCart.setGoodsName(goodsDescMapper.selectById(shoppingCart.getGoodsId()).getCname());
|
|
|
+ if (shoppingCart.getId() == null){
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo("GWC", "GWC", "GWC");
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ shoppingCart.setBillNo((String) billNo.getData());
|
|
|
+ shoppingCart.setCreateUser(AuthUtil.getUserId());
|
|
|
+ shoppingCart.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ shoppingCart.setCreateTime(new Date());
|
|
|
+ baseMapper.insert(shoppingCart);
|
|
|
+ }else {
|
|
|
+ shoppingCart.setUpdateTime(new Date());
|
|
|
+ shoppingCart.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ baseMapper.updateById(shoppingCart);
|
|
|
+ }
|
|
|
+ return R.data(shoppingCart);
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public IPage<ShoppingCartVO> selectShoppingCartPage(IPage<ShoppingCartVO> page, ShoppingCartVO shoppingCart) {
|
|
|
return page.setRecords(baseMapper.selectShoppingCartPage(page, shoppingCart));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 加入购物车
|
|
|
+ *
|
|
|
+ * @param shoppingCart
|
|
|
+ * @return
|
|
|
+ */
|
|
|
@Override
|
|
|
+ @Transactional
|
|
|
public R addToCart(PjShoppingCart shoppingCart) {
|
|
|
// 获取系统编号
|
|
|
R billNo = serialClient.getBillNo("GWC", "GWC", "GWC");
|
|
|
@@ -55,7 +118,115 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
|
|
|
return R.fail(500, "生成系统编号失败");
|
|
|
}
|
|
|
shoppingCart.setBillNo((String) billNo.getData());
|
|
|
- return null;
|
|
|
+ shoppingCart.setCreateUser(AuthUtil.getUserId());
|
|
|
+ shoppingCart.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ shoppingCart.setCreateTime(new Date());
|
|
|
+
|
|
|
+ //仓库名称
|
|
|
+ shoppingCart.setStorageName(storageDescMapper.selectById(shoppingCart.getStorageId()).getCname());
|
|
|
+ //商品名称
|
|
|
+ shoppingCart.setGoodsName(goodsDescMapper.selectById(shoppingCart.getGoodsId()).getCname());
|
|
|
+
|
|
|
+ baseMapper.insert(shoppingCart);
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 购物车生成销售单
|
|
|
+ *
|
|
|
+ * @param address 地址
|
|
|
+ * @param map 按仓库分类的商品集合
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public R generateOrder(String address, Map<String, List<PjShoppingCart>> map) {
|
|
|
+
|
|
|
+ //从集合中取出商品生成销售单
|
|
|
+ if (ObjectUtil.isNotEmpty(map)){
|
|
|
+
|
|
|
+ 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("当前用户客户不存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ PjCorpsDesc finalCorpsDesc = corpsDesc;
|
|
|
+ map.forEach((k, v) -> {
|
|
|
+ if (StringUtil.isNotBlank(k)) {
|
|
|
+
|
|
|
+ List<PjShoppingCart> list = v;
|
|
|
+
|
|
|
+ //保存销售主表信息
|
|
|
+ PjOrder order = new PjOrder();
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(OrderTypeEnum.SALES.getType(), OrderTypeEnum.SALES.getType(), OrderTypeEnum.SALES.getType());
|
|
|
+ if (billNo.getCode() != 200){
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ throw new RuntimeException("生成系统编号失败");
|
|
|
+ }
|
|
|
+ order.setOrdNo((String) billNo.getData());
|
|
|
+ order.setCreateUser(AuthUtil.getUserId());
|
|
|
+ order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ order.setCreateTime(new Date());
|
|
|
+ order.setTenantId(AuthUtil.getTenantId());
|
|
|
+ order.setStatus(OrderTypeEnum.XSDQR.getType());
|
|
|
+ order.setXcxStatus(OrderTypeEnum.XSDFH.getType());
|
|
|
+ order.setCustomerId(finalCorpsDesc.getId());
|
|
|
+ order.setCustomerName(finalCorpsDesc.getCname());
|
|
|
+ order.setStorageId(list.get(0).getStorageId());
|
|
|
+ order.setStorageName(k);
|
|
|
+ order.setRecAddress(address);
|
|
|
+ order.setContacts(corpsAttn.getCname());
|
|
|
+ order.setPhone(corpsAttn.getTel());
|
|
|
+ order.setBsType(OrderTypeEnum.SALES.getType());
|
|
|
+ order.setBusinessSource(OrderTypeEnum.XCX.getType());
|
|
|
+ orderMapper.insert(order);
|
|
|
+
|
|
|
+ //保存销售明细信息
|
|
|
+ if (ObjectUtil.isNotEmpty(list)){
|
|
|
+ list.forEach(e -> {
|
|
|
+ PjOrderItems orderItems = new PjOrderItems();
|
|
|
+ BeanUtils.copyProperties(e, orderItems);
|
|
|
+
|
|
|
+ orderItems.setId(null);
|
|
|
+ orderItems.setCreateUser(AuthUtil.getUserId());
|
|
|
+ orderItems.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ orderItems.setCreateTime(new Date());
|
|
|
+ orderItems.setPid(order.getId());
|
|
|
+ orderItems.setTenantId(AuthUtil.getTenantId());
|
|
|
+ orderItems.setBillNo(order.getOrdNo());
|
|
|
+ orderItems.setBizType(order.getBsType());
|
|
|
+ orderItemsMapper.insert(orderItems);
|
|
|
+
|
|
|
+ });
|
|
|
+ BigDecimal totalMoney = BigDecimal.ZERO;
|
|
|
+ order.setNumberRows(list.size());//行数
|
|
|
+ //明细总数量
|
|
|
+ order.setGoodsTotalNum(list.stream().filter(e ->e.getGoodsNum() != null).map(PjShoppingCart::getGoodsNum).reduce(BigDecimal.ZERO,BigDecimal::add));
|
|
|
+
|
|
|
+ //明细总金额
|
|
|
+ totalMoney = list.stream().reduce(BigDecimal.ZERO, (x, y) -> {
|
|
|
+ return x.add(y.getGoodsNum().multiply(y.getPrice()));
|
|
|
+ },BigDecimal::add).setScale(2,BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ if (list.size() == 1){
|
|
|
+ totalMoney.add(new BigDecimal(5));
|
|
|
+ }
|
|
|
+ order.setTotalMoney(totalMoney);
|
|
|
+ }
|
|
|
+
|
|
|
+ orderMapper.updateById(order);
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }else {
|
|
|
+ throw new RuntimeException("请选择需要结算的商品");
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
}
|
|
|
|
|
|
}
|