package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IAdminMallOrderService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; @Slf4j @Service @RequiredArgsConstructor @Transactional public class AdminMallOrderService extends ServiceImpl implements IAdminMallOrderService { private final MallOrderInfoMapper mallOrderInfoMapper; private final MallExpressInfoMapper mallExpressInfoMapper; private final MallOrderItemMapper mallOrderItemMapper; private final MallOrderRefundMapper mallOrderRefundMapper; private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper; private final MallOrderRefundAddressMapper mallOrderRefundAddressMapper; private final MallGoodsCommentMapper mallGoodsCommentMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final IApiMallMemberWalletService iApiMallMemberWalletService; private final MallMemberPaymentMapper mallMemberPaymentMapper; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final IMallMoneyFlowService mallMoneyFlowService; private final MallRefundMapper mallRefundMapper; @Override public IPage findOrderListInPage(MallOrderInfo mallOrderInfo, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); return this.baseMapper.selectInPage(mallOrderInfo, page); } @Override public IPage getOrderListInPage(MallOrderInfoDto mallOrderInfo, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMallOrderInfoVos = this.baseMapper.selectOrderListInPage(page, mallOrderInfo); if(CollUtil.isNotEmpty(adminMallOrderInfoVos.getRecords())){ for(AdminMallOrderInfoVo adminMallOrderInfoVo : adminMallOrderInfoVos.getRecords()){ Long orderId = adminMallOrderInfoVo.getId(); List mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderId); if(CollUtil.isNotEmpty(mallOrderItemList)){ StringBuffer stringBuffer = new StringBuffer(); for(MallOrderItem mallOrderItem : mallOrderItemList){ stringBuffer.append(mallOrderItem.getGoodsName()).append("*").append(mallOrderItem.getCnt()).append(";"); } adminMallOrderInfoVo.setGoodsName(stringBuffer.toString()); } } } return adminMallOrderInfoVos; } @Override public AdminMallOrderVo getMallOrderInfoById(long id) { return this.baseMapper.getMallOrderInfoById(id); } @Override public FebsResponse deliverGoods(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(deliverGoodsDto.getId()); if(ObjectUtil.isEmpty(mallOrderInfo)){ return new FebsResponse().fail().message("订单不存在,刷新后重试"); } Integer status = mallOrderInfo.getStatus(); if(2 != status){ return new FebsResponse().fail().message("订单不是待发货状态"); } Integer deliveryType = mallOrderInfo.getDeliveryType(); if(2 != deliveryType){ return new FebsResponse().fail().message("订单的配送方式不是快递"); } String expressNo = deliverGoodsDto.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return new FebsResponse().fail().message("请输入物流单号"); } String expressCom = deliverGoodsDto.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return new FebsResponse().fail().message("请输入物流公司"); } MallExpressInfo mallExpressInfo = new MallExpressInfo(); mallExpressInfo.setMemberId(mallOrderInfo.getMemberId()); mallExpressInfo.setOrderId(mallOrderInfo.getId()); mallExpressInfo.setExpressNo(expressNo); mallExpressInfo.setExpressCom(expressCom); mallExpressInfoMapper.insert(mallExpressInfo); mallOrderInfo.setStatus(3); mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_ING.getValue()); mallOrderInfoMapper.updateById(mallOrderInfo); return new FebsResponse().success(); } @Override public AdminOrderDetailVo getMallOrderDetailById(long id) { AdminOrderDetailVo adminOrderDetailVo = mallOrderInfoMapper.getMallOrderDetailById(id); MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id); if(ObjectUtil.isNotEmpty(mallExpressInfo)){ adminOrderDetailVo.setExpressNo(mallExpressInfo.getExpressNo()); adminOrderDetailVo.setExpressCom(mallExpressInfo.getExpressCom()); } List mallOrderItems = mallOrderInfoMapper.getMallOrderItemByOrderId(id); if(CollUtil.isNotEmpty(mallOrderItems)){ StringBuffer orderItems = new StringBuffer(); for (MallOrderItem item : mallOrderItems){ StringBuffer orderItem = new StringBuffer(); orderItems.append(item.getGoodsName()+"-"+item.getCnt()+"*"+item.getPrice()+"-合计"+item.getAmount()+"; \n "); orderItems.append(orderItem); } adminOrderDetailVo.setOrderItems(orderItems.toString()); } return adminOrderDetailVo; } @Override public IPage getRefundListInPage(MallOrderRefundDto mallOrderRefundDto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMallOrderRefundVos = mallOrderRefundMapper.selectRefundListInPage(page, mallOrderRefundDto); return adminMallOrderRefundVos; } @Override public IPage seeRefund(QueryRequest request, MallOrderRefund mallOrderRefund) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMallOrderRefundOperationVos = mallOrderRefundOperationMapper.selectRefundOperationInPage(page, mallOrderRefund); return adminMallOrderRefundOperationVos; } @Override public FebsResponse agreeRefund(Long id) { MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); if(ObjectUtil.isEmpty(mallOrderRefund)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } Integer status = mallOrderRefund.getStatus(); if(status != 1){ return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面"); } mallOrderRefund.setStatus(5); mallOrderRefundMapper.updateById(mallOrderRefund); MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId()); mallOrderInfo.setStatus(6); mallOrderInfoMapper.updateById(mallOrderInfo); if(!"微信支付".equals(mallOrderInfo.getPayMethod()) && !"支付宝支付".equals(mallOrderInfo.getPayMethod())){ BigDecimal amount = mallOrderRefund.getAmount(); //用户钱包增加对应的余额 iApiMallMemberWalletService.addBalance(amount, mallOrderInfo.getMemberId()); mallMoneyFlowService.addMoneyFlow(mallOrderRefund.getMemberId(), amount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); } MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); mallOrderRefundOperation.setContent("已同意退款不退货申请"); mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); return new FebsResponse().success(); } @Override public FebsResponse disagreeRefund(Long id) { MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); if(ObjectUtil.isEmpty(mallOrderRefund)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } Integer status = mallOrderRefund.getStatus(); if(status != 1){ return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面"); } mallOrderRefund.setStatus(3); mallOrderRefundMapper.updateById(mallOrderRefund); MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); mallOrderRefundOperation.setContent("不同意退款申请"); mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); //恢复订单状态 MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId()); mallOrderInfo.setStatus(mallOrderRefund.getBeforeStatus()); mallOrderInfoMapper.updateById(mallOrderInfo); return new FebsResponse().success(); } @Override public FebsResponse refundConfirm(Long id) { MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); if(ObjectUtil.isEmpty(mallOrderRefund)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } Integer status = mallOrderRefund.getStatus(); if(status != 4){ return new FebsResponse().fail().message("申请记录不是已提交物流信息状态,请刷新页面"); } mallOrderRefund.setStatus(5); mallOrderRefundMapper.updateById(mallOrderRefund); MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); mallOrderRefundOperation.setContent("已退款到用户账户"); mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId()); if(ObjectUtil.isEmpty(mallOrderInfo)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } mallOrderInfo.setStatus(6); mallOrderInfoMapper.updateById(mallOrderInfo); BigDecimal refundAmount = mallOrderRefund.getAmount(); //用户钱包增加对应的余额 iApiMallMemberWalletService.addBalance(refundAmount, mallOrderInfo.getMemberId()); //新增一条资金流水 mallMoneyFlowService.addMoneyFlow(mallOrderRefund.getMemberId(), refundAmount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); return new FebsResponse().success(); } @Override public IPage getMallOrderRefundAddressInPage(MallOrderRefundAddressDto mallOrderRefundAddressDto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMallOrderRefundAddressVos = mallOrderRefundAddressMapper.getMallOrderRefundAddressInPage(page, mallOrderRefundAddressDto); return adminMallOrderRefundAddressVos; } @Override public AdminMallOrderRefundAddressVo getMallOrderRefundAddressInfoById(long id) { AdminMallOrderRefundAddressVo AdminMallOrderRefundAddressVo = mallOrderRefundAddressMapper.getMallOrderRefundAddressInfoById(id); return AdminMallOrderRefundAddressVo; } @Override public FebsResponse addressUpdate(AddressUpdateDto addressUpdateDto) { Long id = addressUpdateDto.getId(); MallOrderRefundAddress mallOrderRefundAddress = mallOrderRefundAddressMapper.selectById(id); mallOrderRefundAddress.setName(addressUpdateDto.getName()); mallOrderRefundAddress.setPhone(addressUpdateDto.getPhone()); mallOrderRefundAddress.setAddress(addressUpdateDto.getAddress()); mallOrderRefundAddressMapper.updateById(mallOrderRefundAddress); return new FebsResponse().success(); } @Override public FebsResponse deleteAddress(Long id) { mallOrderRefundAddressMapper.deleteById(id); return new FebsResponse().success(); } @Override public FebsResponse addAddress(AddAddressDto addAddressDto) { MallOrderRefundAddress mallOrderRefundAddress = new MallOrderRefundAddress(); mallOrderRefundAddress.setName(addAddressDto.getName()); mallOrderRefundAddress.setPhone(addAddressDto.getPhone()); mallOrderRefundAddress.setAddress(addAddressDto.getAddress()); mallOrderRefundAddressMapper.insert(mallOrderRefundAddress); return new FebsResponse().success(); } @Override public List getRefundAddress() { List list = mallOrderRefundAddressMapper.getRefundAddress(); return list; } @Override public FebsResponse withAddressUpdate(WithAddressUpdateDto withAddressUpdateDto) { Long addressId = withAddressUpdateDto.getAddressId(); MallOrderRefundAddress mallOrderRefundAddress = mallOrderRefundAddressMapper.selectById(addressId); MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(withAddressUpdateDto.getId()); if(ObjectUtil.isEmpty(mallOrderRefund)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } Integer status = mallOrderRefund.getStatus(); if(status != 1){ return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面"); } mallOrderRefund.setStatus(2); mallOrderRefund.setName(mallOrderRefundAddress.getName()); mallOrderRefund.setPhone(mallOrderRefundAddress.getPhone()); mallOrderRefund.setAddress(mallOrderRefundAddress.getAddress()); mallOrderRefundMapper.updateById(mallOrderRefund); MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation(); mallOrderRefundOperation.setRefundId(mallOrderRefund.getId()); mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId()); mallOrderRefundOperation.setContent("已同意退款退货申请"); mallOrderRefundOperationMapper.insert(mallOrderRefundOperation); return new FebsResponse().success(); } @Override public AdminMallOrderRefundVo getMallOrderRefundInfoById(long id) { return mallOrderRefundMapper.getMallOrderRefundInfoById(id); } @Override public IPage getPayMethodListInPage(PayMethodDto payMethodDto, QueryRequest request) { payMethodDto.setType("PAYMENT_METHOD"); Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminPayMethodVos = dataDictionaryCustomMapper.getPayMethodListInPage(page, payMethodDto); return adminPayMethodVos; } @Override public AdminMallPayMethodEditVo getMallPayMethodEditInfoById(long id) { AdminMallPayMethodEditVo adminMallPayMethodEditVo = dataDictionaryCustomMapper.getMallPayMethodEditInfoById(id); return adminMallPayMethodEditVo; } @Override public FebsResponse payMethodEdit(PayMethodEditDto payMethodEditDto) { DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(payMethodEditDto.getId()); if(ObjectUtil.isEmpty(dataDictionaryCustom)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } dataDictionaryCustom.setValue(payMethodEditDto.getValue()); dataDictionaryCustomMapper.updateById(dataDictionaryCustom); return new FebsResponse().success(); } @Override public FebsResponse cancelOrder(Long id) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(id); if(ObjectUtil.isEmpty(mallOrderInfo)){ return new FebsResponse().fail().message("系统繁忙,请刷新重试"); } Integer status = mallOrderInfo.getStatus(); if(status != 2){ return new FebsResponse().fail().message("订单不是代发货状态"); } mallOrderInfo.setStatus(7); mallOrderInfoMapper.updateById(mallOrderInfo); return new FebsResponse().success(); } @Override public AdminMallMemberPaymentVo getMallMemberRefundPayInfoByFlowId(long id) { AdminMallMemberPaymentVo adminMallMemberPaymentVo = new AdminMallMemberPaymentVo(); MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id); AdminMallMemberPaymentVo adminMallMemberPaymentVoa = mallMemberPaymentMapper.getMallMemberPaymentInfoByMemberId(mallOrderRefund.getMemberId()); if(ObjectUtil.isNotEmpty(adminMallMemberPaymentVoa)){ adminMallMemberPaymentVo = adminMallMemberPaymentVoa; } return adminMallMemberPaymentVo; } @Override public IPage getCommentListInPage(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMallGoodsCommentVos = mallGoodsCommentMapper.getCommentListInPage(page, adminMallGoodsCommentDto); return adminMallGoodsCommentVos; } @Override public FebsResponse showStateSwitchOn(Long id) { MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id); if (ObjectUtil.isEmpty(mallGoodsComment)) { return new FebsResponse().fail().message("评论不存在,请刷新当前页面"); } mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE); mallGoodsCommentMapper.updateById(mallGoodsComment); return new FebsResponse().success(); } @Override public FebsResponse showStateSwitchOff(Long id) { MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id); if (ObjectUtil.isEmpty(mallGoodsComment)) { return new FebsResponse().fail().message("评论不存在,请刷新当前页面"); } mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_DISABLED); mallGoodsCommentMapper.updateById(mallGoodsComment); return new FebsResponse().success(); } @Override public void updateOrderStateAndDeliveryState(Long id, int value, int value1) { mallOrderInfoMapper.updateOrderStateAndDeliveryState(id,value,value1); } @Override public IPage getOrderRefundListInPage(MallRefundEntity mallRefundEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage mallRefundEntityIPage = mallRefundMapper.getOrderRefundListInPage(page, mallRefundEntity); List records = mallRefundEntityIPage.getRecords(); if(CollUtil.isNotEmpty(records)){ for(MallRefundEntity mallRefundEntityPic : records){ String refundPic = mallRefundEntityPic.getRefundPic(); if(StrUtil.isNotEmpty(refundPic)){ String[] split = StrUtil.split(refundPic, ","); mallRefundEntityPic.setRefundPicList(split); } } } return mallRefundEntityIPage; } @Override public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo()); if (mallOrderInfo == null) { return; } MallExpressInfo mallExpressInfo = new MallExpressInfo(); mallExpressInfo.setMemberId(mallOrderInfo.getMemberId()); mallExpressInfo.setOrderId(mallOrderInfo.getId()); mallExpressInfo.setExpressNo(deliverGoodsDto.getExpressNo()); mallExpressInfo.setExpressCom(deliverGoodsDto.getExpressCom()); mallExpressInfo.setExpressCode(deliverGoodsDto.getExpressCode()); mallExpressInfoMapper.insert(mallExpressInfo); mallOrderInfo.setStatus(3); mallOrderInfoMapper.updateById(mallOrderInfo); } }