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.*; import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.SpringContextHolder; import cc.mrbird.febs.common.utils.excl.ExcelSheetPO; import cc.mrbird.febs.common.utils.excl.ExcelUtil; import cc.mrbird.febs.common.utils.excl.ExcelVersion; import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil; import cc.mrbird.febs.mall.dto.clothes.AdminClothesDeliverGoodsDto; import cc.mrbird.febs.mall.dto.clothes.AdminClothesOrderListDto; import cc.mrbird.febs.mall.dto.clothes.AdminClothesRefundOrderDto; import cc.mrbird.febs.mall.dto.clothes.AdminClothesTypeInfoDto; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.ClothesTypeService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.AdminMallOrderInfoVo; import cc.mrbird.febs.mall.vo.clothes.AdminClothesOrderListVo; import cc.mrbird.febs.pay.util.WeixinServiceUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor @Transactional public class ClothesTypeServiceImpl extends ServiceImpl implements ClothesTypeService { private final ClothesTypeMapper clothesTypeMapper; private final ClothesSizeMapper clothesSizeMapper ; private final ClothesPatternMapper clothesPatternMapper; private final ClothesLocationMapper clothesLocationMapper; private final ClothesClothMapper clothesClothMapper; private final ClothesArtMapper clothesArtMapper; private final ClothesTypeArtMapper clothesTypeArtMapper; private final ClothesTypeSizeMapper clothesTypeSizeMapper; private final ClothesTypeClothMapper clothesTypeClothMapper; private final ClothesTypePatternMapper clothesTypePatternMapper; private final ClothesTypeLocationMapper clothesTypeLocationMapper; private final ClothesOrderMapper clothesOrderMapper; private final MallExpressInfoMapper mallExpressInfoMapper; private final IApiMallMemberWalletService memberWalletService; private final IMallMoneyFlowService mallMoneyFlowService; private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); @Autowired private WeixinServiceUtil weixinServiceUtil; @Override public IPage adminTypeList(ClothesType dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper clothesTypeLambdaQueryWrapper = Wrappers.lambdaQuery(ClothesType.class); Page clothesTypePage = clothesTypeMapper.selectPage(page, clothesTypeLambdaQueryWrapper); return clothesTypePage; } @Override public FebsResponse typeAdd(ClothesType dto) { ClothesType clothesType = new ClothesType(); clothesType.setName(dto.getName()); clothesType.setOrderNum(dto.getOrderNum()); clothesType.setImage(dto.getImage()); clothesType.setImageFront(dto.getImageFront()); clothesType.setImageBack(dto.getImageBack()); clothesType.setContent(dto.getContent()); clothesTypeMapper.insert(clothesType); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse typeUpdate(ClothesType dto) { Long id = dto.getId(); ClothesType clothesType = clothesTypeMapper.selectById(id); if (ObjectUtil.isNotNull(clothesType)) { clothesTypeMapper.update(null, Wrappers.lambdaUpdate(ClothesType.class) .eq(ClothesType::getId, id) .set(ClothesType::getName, dto.getName()) .set(ClothesType::getOrderNum, dto.getOrderNum()) .set(ClothesType::getImage, dto.getImage()) .set(ClothesType::getImageFront, dto.getImageFront()) .set(ClothesType::getImageBack, dto.getImageBack()) .set(ClothesType::getContent, dto.getContent()) ); } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse changeState(Long id, Integer type, Integer state) { ClothesType clothesType = clothesTypeMapper.selectById(id); if(ObjectUtil.isNotEmpty(clothesType)){ switch (type) { case 1: clothesType.setState( state); break; case 2: clothesType.setClothState(state); break; case 3: clothesType.setArtState(state); break; case 4: clothesType.setPatternState(state); break; case 5: clothesType.setLocationState(state); break; case 6: clothesType.setSizeState(state); break; default: break; } clothesTypeMapper.updateById(clothesType); } return new FebsResponse().success().message("操作成功"); } @Override public IPage adminSizeList(ClothesSize dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper clothesSizeLambdaQueryWrapper = Wrappers.lambdaQuery(ClothesSize.class); Page clothesSizePage = clothesSizeMapper.selectPage(page, clothesSizeLambdaQueryWrapper); return clothesSizePage; } @Override public FebsResponse sizeAdd(ClothesSize dto) { ClothesSize clothesSize = new ClothesSize(); clothesSize.setName(dto.getName()); clothesSize.setOrderNum(dto.getOrderNum()); clothesSize.setPrice(dto.getPrice()); clothesSize.setType(dto.getType()); clothesSize.setImage(dto.getImage()); clothesSize.setContent(dto.getContent()); clothesSizeMapper.insert(clothesSize); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse sizeUpdate(ClothesSize dto) { Long id = dto.getId(); ClothesSize clothesSize = clothesSizeMapper.selectById(id); if (ObjectUtil.isNotNull(clothesSize)) { clothesSizeMapper.update(null, Wrappers.lambdaUpdate(ClothesSize.class) .eq(ClothesSize::getId, id) .set(ClothesSize::getName, dto.getName()) .set(ClothesSize::getCode, dto.getCode()) .set(ClothesSize::getOrderNum, dto.getOrderNum()) .set(ClothesSize::getPrice, dto.getPrice()) .set(ClothesSize::getType, dto.getType()) .set(ClothesSize::getImage, dto.getImage()) .set(ClothesSize::getContent, dto.getContent()) ); } return new FebsResponse().success().message("操作成功"); } @Override public IPage adminPatternList(ClothesPattern dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper clothesPatternLambdaQueryWrapper = Wrappers.lambdaQuery(ClothesPattern.class); Page clothesPatternPage = clothesPatternMapper.selectPage(page, clothesPatternLambdaQueryWrapper); return clothesPatternPage; } @Override public FebsResponse patternAdd(ClothesPattern dto) { ClothesPattern clothesPattern = new ClothesPattern(); clothesPattern.setName(dto.getName()); clothesPattern.setCode(dto.getCode()); clothesPattern.setType(dto.getType()); clothesPattern.setPrice(dto.getPrice()); clothesPattern.setOrderNum(dto.getOrderNum()); clothesPattern.setImage(dto.getImage()); clothesPattern.setContent(dto.getContent()); clothesPatternMapper.insert(clothesPattern); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse patternUpdate(ClothesPattern dto) { Long id = dto.getId(); ClothesPattern clothesPattern = clothesPatternMapper.selectById(id); if (ObjectUtil.isNotNull(clothesPattern)) { clothesPatternMapper.update(null, Wrappers.lambdaUpdate(ClothesPattern.class) .eq(ClothesPattern::getId, id) .set(ClothesPattern::getName, dto.getName()) .set(ClothesPattern::getCode, dto.getCode()) .set(ClothesPattern::getImage, dto.getImage()) .set(ClothesPattern::getContent, dto.getContent()) .set(ClothesPattern::getOrderNum, dto.getOrderNum()) .set(ClothesPattern::getPrice, dto.getPrice()) .set(ClothesPattern::getType, dto.getType()) ); } return new FebsResponse().success().message("操作成功"); } @Override public IPage adminLocationList(ClothesLocation dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ClothesLocation.class); Page pages = clothesLocationMapper.selectPage(page, queryWrapper); return pages; } @Override public FebsResponse locationAdd(ClothesLocation dto) { ClothesLocation clothesLocation = new ClothesLocation(); clothesLocation.setName(dto.getName()); clothesLocation.setCode(dto.getCode()); clothesLocation.setImage(dto.getImage()); clothesLocation.setContent(dto.getContent()); clothesLocation.setPrice(dto.getPrice()); clothesLocation.setOrderNum(dto.getOrderNum()); clothesLocationMapper.insert(clothesLocation); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse locationUpdate(ClothesLocation dto) { Long id = dto.getId(); ClothesLocation clothesLocation = clothesLocationMapper.selectById(id); if (ObjectUtil.isNotNull(clothesLocation)) { clothesLocationMapper.update(null, Wrappers.lambdaUpdate(ClothesLocation.class) .eq(ClothesLocation::getId, id) .set(ClothesLocation::getName, dto.getName()) .set(ClothesLocation::getCode, dto.getCode()) .set(ClothesLocation::getOrderNum, dto.getOrderNum()) .set(ClothesLocation::getPrice, dto.getPrice()) .set(ClothesLocation::getImage, dto.getImage()) .set(ClothesLocation::getContent, dto.getContent()) ); } return new FebsResponse().success().message("操作成功"); } @Override public IPage adminClothList(ClothesCloth dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ClothesCloth.class); Page pages = clothesClothMapper.selectPage(page, queryWrapper); return pages; } @Override public FebsResponse clothAdd(ClothesCloth dto) { ClothesCloth clothesCloth = new ClothesCloth(); clothesCloth.setName(dto.getName()); clothesCloth.setCode(dto.getCode()); clothesCloth.setImage(dto.getImage()); clothesCloth.setContent(dto.getContent()); clothesCloth.setPrice(dto.getPrice()); clothesCloth.setOrderNum(dto.getOrderNum()); clothesClothMapper.insert(clothesCloth); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse clothUpdate(ClothesCloth dto) { Long id = dto.getId(); ClothesCloth clothesCloth = clothesClothMapper.selectById(id); if (ObjectUtil.isNotNull(clothesCloth)) { clothesClothMapper.update(null, Wrappers.lambdaUpdate(ClothesCloth.class) .eq(ClothesCloth::getId, id) .set(ClothesCloth::getName, dto.getName()) .set(ClothesCloth::getCode, dto.getCode()) .set(ClothesCloth::getOrderNum, dto.getOrderNum()) .set(ClothesCloth::getPrice, dto.getPrice()) .set(ClothesCloth::getImage, dto.getImage()) .set(ClothesCloth::getContent, dto.getContent()) ); } return new FebsResponse().success().message("操作成功"); } @Override public IPage adminArtList(ClothesArt dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ClothesArt.class); Page pages = clothesArtMapper.selectPage(page, queryWrapper); return pages; } @Override public FebsResponse artAdd(ClothesArt dto) { ClothesArt clothesArt = new ClothesArt(); clothesArt.setName(dto.getName()); clothesArt.setCode(dto.getCode()); clothesArt.setImage(dto.getImage()); clothesArt.setContent(dto.getContent()); clothesArt.setPrice(dto.getPrice()); clothesArt.setOrderNum(dto.getOrderNum()); clothesArtMapper.insert(clothesArt); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse artUpdate(ClothesArt dto) { Long id = dto.getId(); ClothesArt clothesArt = clothesArtMapper.selectById(id); if (ObjectUtil.isNotNull(clothesArt)) { clothesArtMapper.update(null, Wrappers.lambdaUpdate(ClothesArt.class) .eq(ClothesArt::getId, id) .set(ClothesArt::getName, dto.getName()) .set(ClothesArt::getCode, dto.getCode()) .set(ClothesArt::getOrderNum, dto.getOrderNum()) .set(ClothesArt::getPrice, dto.getPrice()) .set(ClothesArt::getImage, dto.getImage()) .set(ClothesArt::getContent, dto.getContent()) ); } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse artSet(AdminClothesTypeInfoDto dto) { Long typeId = dto.getTypeId(); List chooseIds = dto.getChooseIds(); ClothesType clothesType = clothesTypeMapper.selectById(typeId); if (ObjectUtil.isNotEmpty(clothesType)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ClothesTypeArt::getTypeId,typeId); clothesTypeArtMapper.delete(queryWrapper); if(CollUtil.isNotEmpty(chooseIds)){ for (Long chooseId : chooseIds){ ClothesTypeArt entity = new ClothesTypeArt(); entity.setTypeId(typeId); entity.setArtId(chooseId); clothesTypeArtMapper.insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse sizeSet(AdminClothesTypeInfoDto dto) { Long typeId = dto.getTypeId(); List chooseIds = dto.getChooseIds(); ClothesType clothesType = clothesTypeMapper.selectById(typeId); if (ObjectUtil.isNotEmpty(clothesType)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ClothesTypeSize::getTypeId,typeId); clothesTypeSizeMapper.delete(queryWrapper); if(CollUtil.isNotEmpty(chooseIds)){ for (Long chooseId : chooseIds){ ClothesTypeSize entity = new ClothesTypeSize(); entity.setTypeId(typeId); entity.setSizeId(chooseId); clothesTypeSizeMapper.insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse clothSet(AdminClothesTypeInfoDto dto) { Long typeId = dto.getTypeId(); List chooseIds = dto.getChooseIds(); ClothesType clothesType = clothesTypeMapper.selectById(typeId); if (ObjectUtil.isNotEmpty(clothesType)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ClothesTypeCloth::getTypeId,typeId); clothesTypeClothMapper.delete(queryWrapper); if(CollUtil.isNotEmpty(chooseIds)){ for (Long chooseId : chooseIds){ ClothesTypeCloth entity = new ClothesTypeCloth(); entity.setTypeId(typeId); entity.setClothId(chooseId); clothesTypeClothMapper.insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse patternSet(AdminClothesTypeInfoDto dto) { Long typeId = dto.getTypeId(); List chooseIds = dto.getChooseIds(); ClothesType clothesType = clothesTypeMapper.selectById(typeId); if (ObjectUtil.isNotEmpty(clothesType)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ClothesTypePattern::getTypeId,typeId); clothesTypePatternMapper.delete(queryWrapper); if(CollUtil.isNotEmpty(chooseIds)){ for (Long chooseId : chooseIds){ ClothesTypePattern entity = new ClothesTypePattern(); entity.setTypeId(typeId); entity.setPatternId(chooseId); clothesTypePatternMapper.insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse locationSet(AdminClothesTypeInfoDto dto) { Long typeId = dto.getTypeId(); List chooseIds = dto.getChooseIds(); ClothesType clothesType = clothesTypeMapper.selectById(typeId); if (ObjectUtil.isNotEmpty(clothesType)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ClothesTypeLocation::getTypeId,typeId); clothesTypeLocationMapper.delete(queryWrapper); if(CollUtil.isNotEmpty(chooseIds)){ for (Long chooseId : chooseIds){ ClothesTypeLocation entity = new ClothesTypeLocation(); entity.setTypeId(typeId); entity.setLocationId(chooseId); clothesTypeLocationMapper.insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public IPage getOrderListInPage(AdminClothesOrderListDto dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage vos = clothesOrderMapper.selectOrderListInPage(page, dto); return vos; } @Override public FebsResponse deliverGoods(AdminClothesDeliverGoodsDto dto) { ClothesOrder clothesOrder = clothesOrderMapper.selectById(dto.getId()); if(ObjectUtil.isNull(clothesOrder)){ return new FebsResponse().fail().message("订单不存在,刷新后重试"); } Integer status = clothesOrder.getStatus(); if(ClothesOrderStatusEnum.WAIT_SHIPPING.getValue() != status){ return new FebsResponse().fail().message("订单不是待发货状态"); } String expressNo = dto.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return new FebsResponse().fail().message("请输入物流单号"); } String expressCom = dto.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return new FebsResponse().fail().message("请输入物流公司"); } MallExpressInfo mallExpressInfo = new MallExpressInfo(); mallExpressInfo.setMemberId(clothesOrder.getMemberId()); mallExpressInfo.setOrderId(clothesOrder.getId()); mallExpressInfo.setOrderNo(clothesOrder.getOrderNo()); mallExpressInfo.setExpressNo(expressNo); mallExpressInfo.setExpressCom(expressCom); mallExpressInfoMapper.insert(mallExpressInfo); clothesOrderMapper.update( null, Wrappers.lambdaUpdate(ClothesOrder.class) .set(ClothesOrder::getStatus, ClothesOrderStatusEnum.WAIT_FINISH.getValue()) .set(ClothesOrder::getUpdatedTime, new Date()) .set(ClothesOrder::getDeliveryState, OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()) .eq(ClothesOrder::getId, clothesOrder.getId()) ); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse deliverGoodsUpdate(AdminClothesDeliverGoodsDto dto) { ClothesOrder clothesOrder = clothesOrderMapper.selectById(dto.getId()); if(ObjectUtil.isNull(clothesOrder)){ return new FebsResponse().fail().message("订单不存在,刷新后重试"); } Integer status = clothesOrder.getStatus(); if(ClothesOrderStatusEnum.WAIT_FINISH.getValue() != status){ return new FebsResponse().fail().message("订单不是待发货状态"); } String expressNo = dto.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return new FebsResponse().fail().message("请输入物流单号"); } String expressCom = dto.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return new FebsResponse().fail().message("请输入物流公司"); } MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne( Wrappers.lambdaQuery(MallExpressInfo.class) .eq(MallExpressInfo::getOrderId, clothesOrder.getId()) .eq(MallExpressInfo::getOrderNo, clothesOrder.getOrderNo()) .last("limit 1") ); if(ObjectUtil.isNull(mallExpressInfo)){ return new FebsResponse().fail().message("请先发货"); } mallExpressInfoMapper.update( null, Wrappers.lambdaUpdate(MallExpressInfo.class) .set(MallExpressInfo::getExpressNo, expressNo) .set(MallExpressInfo::getExpressCom, expressCom) .set(MallExpressInfo::getUpdatedTime, new Date()) .eq(MallExpressInfo::getId, mallExpressInfo.getId()) ); return new FebsResponse().success().message("操作成功"); } private void clothesUpdateStatusAndUpdateTimeById(Long id, Date date, int value) { clothesOrderMapper.update( null, Wrappers.lambdaUpdate(ClothesOrder.class) .set(ClothesOrder::getStatus, ClothesOrderStatusEnum.CANCEL.getValue()) .set(ClothesOrder::getUpdatedTime, new Date()) .eq(ClothesOrder::getId, id) ); } private Boolean weChatRefundOrderEvent(int refundMoney, BigDecimal orderAmount, String orderNo, String refundNo) { Boolean flag; Boolean debug = xcxProperties.getDebug(); if (debug) { if(orderAmount.compareTo(BigDecimal.ZERO) > 0){ boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, null); flag = b; }else{ flag = true; } } else { if(orderAmount.compareTo(BigDecimal.ZERO) > 0){ log.info("开始调用退款接口。。。退款编号为{}", refundNo); boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, refundMoney, refundMoney, null); flag = b; }else{ flag = true; } } return flag; } @Override public FebsResponse refundOrder(AdminClothesRefundOrderDto dto) { ClothesOrder clothesOrder = clothesOrderMapper.selectById(dto.getId()); if(ObjectUtil.isNull(clothesOrder)){ return new FebsResponse().fail().message("订单不存在,刷新后重试"); } Integer status = clothesOrder.getStatus(); if(ClothesOrderStatusEnum.WAIT_SHIPPING.getValue() != status){ return new FebsResponse().fail().message("订单不是待发货状态"); } //退款订单编号 String orderNo = clothesOrder.getOrderNo(); //退款退款编号 String refundNo = clothesOrder.getOrderNo()+"_REFUND_"+clothesOrder.getId(); //退款订单金额 BigDecimal orderAmount = clothesOrder.getRealAmount(); //余额支付退款 if(ClothesOrderPayTypeEnum.BALANCE.getName().equals(clothesOrder.getPayMethod())){ log.info("余额支付退款"); if(orderAmount.compareTo(BigDecimal.ZERO) > 0){ //更新订单详情 clothesUpdateStatusAndUpdateTimeById(clothesOrder.getId(),new Date(),ClothesOrderStatusEnum.CANCEL.getValue()); memberWalletService.add(orderAmount, clothesOrder.getMemberId(), "balance"); mallMoneyFlowService.addMoneyFlow( clothesOrder.getMemberId(), orderAmount, ScoreFlowTypeEnum.REFUND.getValue(), clothesOrder.getOrderNo(), FlowTypeEnum.BALANCE.getValue(), StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),orderAmount), 2 ); } return new FebsResponse().success().message("退款成功"); }else if(ClothesOrderPayTypeEnum.WECHAT.getName().equals(clothesOrder.getPayMethod())){ int refundMoney = orderAmount.multiply(new BigDecimal(100)).intValue(); Boolean flag = weChatRefundOrderEvent(refundMoney, orderAmount, orderNo, refundNo); if(flag){ if(orderAmount.compareTo(BigDecimal.ZERO) > 0){ //更新订单详情 clothesUpdateStatusAndUpdateTimeById(clothesOrder.getId(),new Date(),ClothesOrderStatusEnum.CANCEL.getValue()); mallMoneyFlowService.addMoneyFlow( clothesOrder.getMemberId(), orderAmount, ScoreFlowTypeEnum.WECHAT_REFUND.getValue(), clothesOrder.getOrderNo(), FlowTypeEnum.BALANCE.getValue(), StrUtil.format(ScoreFlowTypeEnum.WECHAT_REFUND.getDesc(),orderAmount), 2 ); } }else{ return new FebsResponse().fail().message("退款失败,请联系客服人员"); } }else{ return new FebsResponse().fail().message("退款失败,请联系客服人员"); } return new FebsResponse().success().message("退款成功"); } @Override public void confirmOrder(long orderId) { ClothesOrder clothesOrder = clothesOrderMapper.selectById(orderId); if(ObjectUtil.isNotNull(clothesOrder) && ClothesOrderStatusEnum.WAIT_FINISH.getValue() == clothesOrder.getStatus()){ clothesUpdateStatusAndUpdateTimeById(clothesOrder.getId(),new Date(),ClothesOrderStatusEnum.FINISH.getValue()); } } @Override public void exportOrderList(List orderIds, HttpServletResponse response) throws IOException { List res = new ArrayList<>(); ExcelSheetPO orderSheet = new ExcelSheetPO(); String title = "订单列表"; orderSheet.setSheetName(title); orderSheet.setTitle(title); String[] header = {"订单ID", "订单编号", "收货姓名", "收货电话", "收货地址", "商品详情", "备注", "物流单号", "物流公司", "物流公司码"}; orderSheet.setHeaders(header); QueryRequest request = new QueryRequest(); request.setPageNum(1); request.setPageSize(9999); List dataList = clothesOrderMapper.selectList( Wrappers.lambdaQuery(ClothesOrder.class) .in(ClothesOrder::getId, orderIds) .eq(ClothesOrder::getDelFlag, 0) .eq(ClothesOrder::getStatus, ClothesOrderStatusEnum.WAIT_SHIPPING.getValue())); Map longClothesTypeHashMap = new HashMap<>(); if(CollUtil.isNotEmpty(dataList)){ Set typeIds = dataList.stream().map(ClothesOrder::getTypeId).collect(Collectors.toSet()); List clothesTypes = clothesTypeMapper.selectList( Wrappers.lambdaQuery(ClothesType.class) .in(ClothesType::getId, typeIds) ); if(CollUtil.isNotEmpty(clothesTypes)){ //stream操作clothesTypes,返回一个HashMap, key为clothesType.id, value为clothesType longClothesTypeHashMap = clothesTypes.stream().collect(Collectors.toMap(ClothesType::getId, clothesType -> clothesType)); } } List> list = new ArrayList<>(); if (dataList.size() > 0) { for (ClothesOrder item : dataList) { List temp = new ArrayList<>(); temp.add(item.getId()); temp.add(item.getOrderNo()); temp.add(item.getName()); temp.add(item.getPhone()); temp.add(item.getAddress()); temp.add(longClothesTypeHashMap.get(item.getTypeId()).getName()); temp.add(item.getRemark()); list.add(temp); } } orderSheet.setDataList(list); res.add(orderSheet); response = ResponseHeadUtil.setExcelHead(response); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title + DateUtil.format(new Date(), "yyyyMMDDHHmmss") + ".xlsx".trim(), "UTF-8")); OutputStream os = response.getOutputStream(); ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); } @Override public void deliverGoodsImport(AdminClothesDeliverGoodsDto dto) { ClothesOrder clothesOrder = clothesOrderMapper.selectById(dto.getId()); if(ObjectUtil.isNull(clothesOrder)){ return; } Integer status = clothesOrder.getStatus(); if(ClothesOrderStatusEnum.WAIT_SHIPPING.getValue() != status){ return; } String expressNo = dto.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return; } String expressCom = dto.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return; } mallExpressInfoMapper.update( null, Wrappers.lambdaUpdate(MallExpressInfo.class) .set(MallExpressInfo::getExpressNo, expressNo) .set(MallExpressInfo::getExpressCom, expressCom) .eq(MallExpressInfo::getOrderId, clothesOrder.getId()) .eq(MallExpressInfo::getOrderNo, clothesOrder.getOrderNo()) ); clothesOrderMapper.update( null, Wrappers.lambdaUpdate(ClothesOrder.class) .set(ClothesOrder::getStatus, ClothesOrderStatusEnum.WAIT_FINISH.getValue()) .set(ClothesOrder::getUpdatedTime, new Date()) .set(ClothesOrder::getDeliveryState, OrderDeliveryStateEnum.DELIVERY_ING.getValue()) .eq(ClothesOrder::getId, clothesOrder.getId()) ); } }