|
|
|
@ -22,8 +22,7 @@ import cc.hiver.mall.debt.entity.Debt; |
|
|
|
import cc.hiver.mall.debt.service.DebtService; |
|
|
|
import cc.hiver.mall.deductlog.service.DeductLogService; |
|
|
|
import cc.hiver.mall.entity.*; |
|
|
|
import cc.hiver.mall.pojo.dto.SaleDetailDTO; |
|
|
|
import cc.hiver.mall.pojo.dto.SaleDetailQueryDTO; |
|
|
|
import cc.hiver.mall.pojo.dto.*; |
|
|
|
import cc.hiver.mall.pojo.query.SalePageQuery; |
|
|
|
import cc.hiver.mall.pojo.query.SalesRankingQueryCriteria; |
|
|
|
import cc.hiver.mall.pojo.vo.*; |
|
|
|
@ -31,7 +30,9 @@ import cc.hiver.mall.saleaimsg.constant.SaleAiMsgConstant; |
|
|
|
import cc.hiver.mall.saleaimsg.entity.SaleAiMsg; |
|
|
|
import cc.hiver.mall.saleaimsg.service.SaleAiMsgService; |
|
|
|
import cc.hiver.mall.service.OrderService; |
|
|
|
import cc.hiver.mall.service.SalesAndDetailsService; |
|
|
|
import cc.hiver.mall.service.SendMessageService; |
|
|
|
import cc.hiver.mall.service.ShopService; |
|
|
|
import cc.hiver.mall.service.mybatis.*; |
|
|
|
import cc.hiver.mall.utils.AliOcrUtil; |
|
|
|
import cc.hiver.mall.utils.DateUtil; |
|
|
|
@ -111,6 +112,15 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
@Autowired |
|
|
|
private SendMessageService sendMessageService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ShopService shopService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private SalesAndDetailsService salesAndDetailsService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ReturnDetailService returnDetailService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void editPayPrice(String id, BigDecimal price, String dealingsWay) { |
|
|
|
// 修改采购单、实付、未付金额
|
|
|
|
@ -351,7 +361,7 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<SalesRankingVo> getSalesRankingByShopId(SalesRankingQueryCriteria salesRankingQueryCriteria) { |
|
|
|
if(StringUtils.isNotEmpty(salesRankingQueryCriteria.getEndTime())){ |
|
|
|
if (StringUtils.isNotEmpty(salesRankingQueryCriteria.getEndTime())) { |
|
|
|
salesRankingQueryCriteria.setEndTime(DateUtil.addDay(salesRankingQueryCriteria.getEndTime(), 1)); |
|
|
|
} |
|
|
|
return saleMapper.getSalesRankingByShopId(salesRankingQueryCriteria); |
|
|
|
@ -391,7 +401,7 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
} |
|
|
|
if (!productIds.isEmpty()) { |
|
|
|
// 获取商品各规格售卖的数量
|
|
|
|
final List<CustomerBuyProductDetailLogVo> customerBuyProductDetailLogVos = saleMapper.getCustomerBuyProductLogDetailLog(userId, salePageQuery.getShopId(), productIds,salePageQuery.getStartDate(),salePageQuery.getEndDate()); |
|
|
|
final List<CustomerBuyProductDetailLogVo> customerBuyProductDetailLogVos = saleMapper.getCustomerBuyProductLogDetailLog(userId, salePageQuery.getShopId(), productIds, salePageQuery.getStartDate(), salePageQuery.getEndDate()); |
|
|
|
|
|
|
|
// 进行数据封装Map<商品id,Map<销售单id,商品明细>>
|
|
|
|
final Map<String, Map<String, List<CustomerBuyProductDetailLogVo>>> allMap = new HashMap<>(); |
|
|
|
@ -924,7 +934,7 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
// 4. 订单款项记录作废
|
|
|
|
// 根据订单获取交易记录
|
|
|
|
final String userId = sale.getUserId(); |
|
|
|
final Debt oldDebt = debtService.selectByUserId(sale.getShopId(),userId); |
|
|
|
final Debt oldDebt = debtService.selectByUserId(sale.getShopId(), userId); |
|
|
|
if (oldDebt != null) { |
|
|
|
final BigDecimal newDebtAmount; |
|
|
|
final BigDecimal lastDebtAmount = oldDebt.getAmountOwed(); |
|
|
|
@ -965,7 +975,7 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
dealingsRecordService.cancelRecord(id); |
|
|
|
// 如果有配送单,那么就取消配送,并给快递员发送消息
|
|
|
|
final OrderXd orderXd = orderService.findByOrderId(id); |
|
|
|
if(orderXd != null && (orderXd.getOrderStatus().equals(OrderConstant.ORDER_STATUS[0]) || orderXd.getOrderStatus().equals(OrderConstant.ORDER_STATUS[1]))){ |
|
|
|
if (orderXd != null && (orderXd.getOrderStatus().equals(OrderConstant.ORDER_STATUS[0]) || orderXd.getOrderStatus().equals(OrderConstant.ORDER_STATUS[1]))) { |
|
|
|
if (StringUtils.isNotEmpty(orderXd.getOrderByWorker())) { |
|
|
|
// 如果订单被抢单了,那么需要给配送员发送消息
|
|
|
|
sendMessageService.handleSendAppMessageOfQuxiao(orderXd.getOrderByWorker()); |
|
|
|
@ -1006,10 +1016,11 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
|
|
|
|
/** |
|
|
|
* 实收金额明细 |
|
|
|
* @author 王富康 |
|
|
|
* @date 2024/6/29 |
|
|
|
* |
|
|
|
* @param salePageQuery |
|
|
|
* @return List<TotalAlreadyEarnDetailDayVo> |
|
|
|
* @author 王富康 |
|
|
|
* @date 2024/6/29 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Page<TotalAlreadyEarnDetailDayVo> totalAlreadyEarnDetail(SalePageQuery salePageQuery) { |
|
|
|
@ -1027,10 +1038,11 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
|
|
|
|
/** |
|
|
|
* 客户拿货统计 |
|
|
|
* @author 王富康 |
|
|
|
* @date 2024/6/29 |
|
|
|
* |
|
|
|
* @param salePageQuery |
|
|
|
* @return Page<CustomerSaleDetailVo> |
|
|
|
* @author 王富康 |
|
|
|
* @date 2024/6/29 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Page<CustomerSaleDetailVo> customerSaleDetail(SalePageQuery salePageQuery) { |
|
|
|
@ -1046,6 +1058,98 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa |
|
|
|
return saleMapper.customerSaleDetail(page, salePageQuery); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 开单暂存为挂单 |
|
|
|
* |
|
|
|
* @param saleQueryDTO |
|
|
|
* @author 王富康 |
|
|
|
* @date 2024/7/26 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void temporarySaveSale(SaleQueryDTO saleQueryDTO) { |
|
|
|
|
|
|
|
try { |
|
|
|
// 设置店铺id为缓存中的内容
|
|
|
|
// shopId从缓存中设置
|
|
|
|
final String shopId = securityUtil.getShopId(); |
|
|
|
final Shop shop = shopService.get(shopId); |
|
|
|
saleQueryDTO.getSale().setShopId(shopId); |
|
|
|
saleQueryDTO.getSale().setShopName(shop.getShopName()); |
|
|
|
// 20240616 开单可能值包含退货单
|
|
|
|
Sale sale = saleQueryDTO.getSale(); |
|
|
|
// 处理销售商品信息
|
|
|
|
if (saleQueryDTO.getSaleDetailList() != null && !saleQueryDTO.getSaleDetailList().isEmpty()) { |
|
|
|
// 1. 处理商品信息,新商品进行新商品的新增,分类及规格的新增,分类库的新增,子图的新增
|
|
|
|
saleQueryDTO = productService.handleProduct(saleQueryDTO); |
|
|
|
// 2.处理订单表模块
|
|
|
|
sale = salesAndDetailsService.handleSalesDetails(saleQueryDTO); |
|
|
|
// 更新sale
|
|
|
|
saleQueryDTO.setSale(sale); |
|
|
|
} else { |
|
|
|
// 销售单只有退货信息,补充一些基本信息,保存销售单
|
|
|
|
// 获取销售员的手机号
|
|
|
|
final User currUser = securityUtil.getCurrUser(); |
|
|
|
sale.setCreateBy(currUser.getId()); |
|
|
|
sale.setCreateByName(currUser.getNickname()); |
|
|
|
sale.setCreateByPhone(currUser.getMobile()); |
|
|
|
sale.setCreateTime(new Date()); |
|
|
|
sale.setDelFlag(CommonConstant.DEL_FLAG_FALSE); |
|
|
|
sale.setStatus(SaleConstant.SALE_STATUS[12]); |
|
|
|
saleService.save(sale); |
|
|
|
// 只有退货,单独处理下客户欠款
|
|
|
|
} |
|
|
|
|
|
|
|
// 如果退货信息不为空,那么则代表需要退货,处理退货信息
|
|
|
|
// 处理退货信息
|
|
|
|
if (saleQueryDTO.getSaleReturnDTO() != null) { |
|
|
|
//处理退货信息
|
|
|
|
final SaleReturnDTO saleReturnDTO = saleQueryDTO.getSaleReturnDTO(); |
|
|
|
// 回填销售单id
|
|
|
|
saleReturnDTO.getReturnSale().setSaleId(sale.getId()); |
|
|
|
// 申请退货
|
|
|
|
final ReturnSale returnSale = salesAndDetailsService.handleBackSalesDetails(saleReturnDTO); |
|
|
|
// 如确认退货
|
|
|
|
//扣减库存
|
|
|
|
final List<String> returnSaleId = new ArrayList<>(); |
|
|
|
returnSaleId.add(returnSale.getId()); |
|
|
|
final List<ReturnDetail> returnDetails = returnDetailService.getReturnDetailsByReturnId(returnSaleId); |
|
|
|
final List<ReturnSaleDetailDTO> returnSaleDetailDTOList = new ArrayList<>(); |
|
|
|
for (ReturnDetail returnDetail : returnDetails) { |
|
|
|
final ReturnSaleDetailDTO returnSaleDetailDTO = new ReturnSaleDetailDTO(); |
|
|
|
returnSaleDetailDTO.setSaleId(returnDetail.getSaleId()); |
|
|
|
returnSaleDetailDTO.setReturnSaleId(returnDetail.getReturnSaleId()); |
|
|
|
returnSaleDetailDTO.setProductId(returnDetail.getProductId()); |
|
|
|
returnSaleDetailDTO.setProductName(returnDetail.getProductName()); |
|
|
|
returnSaleDetailDTO.setUnit(returnDetail.getUnit()); |
|
|
|
returnSaleDetailDTO.setShopId(returnDetail.getShopId()); |
|
|
|
returnSaleDetailDTO.setCategoryId(returnDetail.getCategoryId()); |
|
|
|
returnSaleDetailDTO.setAttributeList(returnDetail.getAttributeList()); |
|
|
|
returnSaleDetailDTO.setPrice(returnDetail.getPrice()); |
|
|
|
returnSaleDetailDTO.setPurchasePrice(returnDetail.getPurchasePrice()); |
|
|
|
returnSaleDetailDTO.setWholesalePrice(returnDetail.getWholesalePrice()); |
|
|
|
returnSaleDetailDTO.setProductCount(returnDetail.getProductCount()); |
|
|
|
returnSaleDetailDTO.setDiscount(returnDetail.getDiscount()); |
|
|
|
returnSaleDetailDTO.setDiscountAmount(returnDetail.getDiscountAmount()); |
|
|
|
returnSaleDetailDTO.setRealPrice(returnDetail.getRealPrice()); |
|
|
|
returnSaleDetailDTO.setDetailId(returnDetail.getId()); |
|
|
|
final List<SaleDetailQueryDTO> saleDetailQueryDTOS = new ArrayList<>(); |
|
|
|
final SaleDetailQueryDTO saleDetailQueryDTO = new SaleDetailQueryDTO(); |
|
|
|
saleDetailQueryDTO.setAttributeList(returnDetail.getAttributeList()); |
|
|
|
saleDetailQueryDTO.setProductCount(returnDetail.getProductCount()); |
|
|
|
saleDetailQueryDTOS.add(saleDetailQueryDTO); |
|
|
|
returnSaleDetailDTO.setStockLogList1(saleDetailQueryDTOS); |
|
|
|
returnSaleDetailDTOList.add(returnSaleDetailDTO); |
|
|
|
} |
|
|
|
// 更新退货单机销售单的状态为已完成
|
|
|
|
returnSale.setUpdateTime(new Date()); |
|
|
|
returnSale.setStatus(SaleConstant.SALE_STATUS[12]); |
|
|
|
returnSaleService.saveOrUpdate(returnSale); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
log.error(e.getMessage(), e); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 使用正则表达式替换输入字符串中连续的“叉”字符为相应数量的“X”字符。 |
|
|
|
* |
|
|
|
|