| | |
| | | import cc.mrbird.febs.common.entity.DeptTree; |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.entity.QueryRequest; |
| | | import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; |
| | | import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; |
| | | import cc.mrbird.febs.common.enumerates.OrderStatusEnum; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | 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.*; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.MallOrderRefundOperationMapper; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.IAdminMallGoodsService; |
| | | import cc.mrbird.febs.mall.service.IAdminMallOrderService; |
| | | import cc.mrbird.febs.mall.vo.AdminAddAddressTreeVo; |
| | | import cc.mrbird.febs.mall.vo.AdminMallOrderRefundAddressVo; |
| | | import cc.mrbird.febs.pay.model.OrderStateDto; |
| | | import cc.mrbird.febs.pay.service.IXcxPayService; |
| | | import cc.mrbird.febs.pay.util.WechatConfigure; |
| | | import cc.mrbird.febs.system.entity.Dept; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.validation.Valid; |
| | | import javax.validation.constraints.NotNull; |
| | | import java.io.*; |
| | | import java.net.URLEncoder; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | public class AdminMallOrderController extends BaseController { |
| | | |
| | | private final IAdminMallOrderService adminMallOrderService; |
| | | private final MallOrderInfoMapper mallOrderInfoMapper; |
| | | private final SpringContextHolder springContextHolder; |
| | | |
| | | private final IXcxPayService iXcxPayService; |
| | | private final MallTeamLeaderMapper mallTeamLeaderMapper; |
| | | private final MallMemberMapper mallMemberMapper; |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 订单多次退款列表 |
| | | * |
| | | * @param mallRefundEntity |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @GetMapping("orderRefundList") |
| | | public FebsResponse orderRefundList(MallRefundEntity mallRefundEntity, QueryRequest request) { |
| | | Map<String, Object> data = getDataTable(adminMallOrderService.getOrderRefundListInPage(mallRefundEntity, request)); |
| | | return new FebsResponse().success().data(data); |
| | | } |
| | | |
| | | /** |
| | | * 订单列表 |
| | | * |
| | | * @param mallOrderInfo |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @GetMapping("orderList") |
| | | public FebsResponse getOrderList(MallOrderInfoDto mallOrderInfo, QueryRequest request) { |
| | | String startTime = mallOrderInfo.getStartTime(); |
| | | String endTime = mallOrderInfo.getEndTime(); |
| | | if(StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)){ |
| | | DateTime dateStartTime= DateUtil.parseDate(startTime); |
| | | DateTime dateEndTime = DateUtil.parseDate(endTime); |
| | | int compare = DateUtil.compare(dateStartTime, dateEndTime); |
| | | if(compare >= 0){ |
| | | return new FebsResponse().fail().message("请输入正确的开始时间和结束时间"); |
| | | } |
| | | } |
| | | Map<String, Object> data = getDataTable(adminMallOrderService.getOrderListInPage(mallOrderInfo, request)); |
| | | return new FebsResponse().success().data(data); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 订单列表-取消订单 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @GetMapping("cancelOrder/{id}") |
| | | @ControllerEndpoint(operation = "订单列表-取消订单", exceptionMessage = "操作失败") |
| | | public FebsResponse cancelOrder(@NotNull(message = "{required}") @PathVariable Long id) { |
| | | return adminMallOrderService.cancelOrder(id); |
| | | } |
| | | |
| | | /** |
| | | * 订单退款-列表 |
| | | * |
| | | * @param mallOrderRefundDto |
| | | * @param request |
| | | * @return |
| | |
| | | * 订单退款-详情 |
| | | */ |
| | | @GetMapping("/seeRefund") |
| | | public FebsResponse seeRefund(QueryRequest request, MallOrderRefund mallOrderRefund,Integer parentId) { |
| | | if(parentId==null){ |
| | | ViewMallOrderController.idFromRefund=0; |
| | | public FebsResponse seeRefund(QueryRequest request, MallOrderRefund mallOrderRefund, Integer parentId) { |
| | | if (parentId == null) { |
| | | ViewMallOrderController.idFromRefund = 0; |
| | | } |
| | | mallOrderRefund.setId(ViewMallOrderController.idFromRefund); |
| | | Map<String, Object> dataTable = getDataTable(adminMallOrderService.seeRefund(request, mallOrderRefund)); |
| | |
| | | |
| | | /** |
| | | * 订单退款-同意 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 订单退款-拒绝 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 订单退款-退款确认 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 订单退款地址-列表 |
| | | * |
| | | * @param mallOrderRefundAddressDto |
| | | * @param request |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 订单退款地址-删除 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | |
| | | */ |
| | | @GetMapping("addAddress/tree") |
| | | @ControllerEndpoint(exceptionMessage = "获取地址失败") |
| | | public List<AdminAddAddressTreeVo> getRefundAddress(){ |
| | | public List<AdminAddAddressTreeVo> getRefundAddress() { |
| | | return adminMallOrderService.getRefundAddress(); |
| | | } |
| | | |
| | |
| | | return adminMallOrderService.withAddressUpdate(withAddressUpdateDto); |
| | | } |
| | | |
| | | /** |
| | | * 商家支付方式-列表 |
| | | * |
| | | * @param payMethodDto |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @GetMapping("payMethodList") |
| | | public FebsResponse getPayMethodList(PayMethodDto payMethodDto, QueryRequest request) { |
| | | Map<String, Object> data = getDataTable(adminMallOrderService.getPayMethodListInPage(payMethodDto, request)); |
| | | return new FebsResponse().success().data(data); |
| | | } |
| | | |
| | | /** |
| | | * 商家支付方式-更新 |
| | | */ |
| | | @PostMapping("payMethodEdit") |
| | | @ControllerEndpoint(operation = "商家支付方式-更新", exceptionMessage = "操作失败") |
| | | public FebsResponse payMethodEdit(@Valid PayMethodEditDto payMethodEditDto) { |
| | | return adminMallOrderService.payMethodEdit(payMethodEditDto); |
| | | } |
| | | |
| | | @GetMapping("exportOrderList") |
| | | @ControllerEndpoint(operation = "订单列表", exceptionMessage = "导出失败") |
| | | public FebsResponse exportOrderList(MallOrderInfo mallOrderInfo, HttpServletResponse response) throws IOException { |
| | | |
| | | List<ExcelSheetPO> res = new ArrayList<>(); |
| | | ExcelSheetPO orderSheet = new ExcelSheetPO(); |
| | | String title = "订单列表"; |
| | | orderSheet.setSheetName(title); |
| | | orderSheet.setTitle(title); |
| | | String[] header = {"订单编号", "订单金额", "下单时间", "配送方式", "收货姓名", "收货电话", "收货地址", "商品名称", "订单状态", "物流单号", "物流公司", "物流公司码"}; |
| | | orderSheet.setHeaders(header); |
| | | |
| | | QueryRequest request = new QueryRequest(); |
| | | request.setPageNum(1); |
| | | request.setPageSize(9999); |
| | | List<MallOrderInfo> dataList = adminMallOrderService.findOrderListInPage(mallOrderInfo, request).getRecords(); |
| | | List<List<Object>> list = new ArrayList<>(); |
| | | if (dataList.size() > 0) { |
| | | for (MallOrderInfo item : dataList) { |
| | | List<Object> temp = new ArrayList<>(); |
| | | temp.add(item.getOrderNo()); |
| | | temp.add(item.getAmount()); |
| | | temp.add(DateUtil.format(item.getOrderTime(), "yyyy-MM-dd HH:mm:ss")); |
| | | temp.add("快递配送"); |
| | | temp.add(item.getName()); |
| | | temp.add(item.getPhone()); |
| | | temp.add(item.getAddress()); |
| | | if (CollUtil.isNotEmpty(item.getItems())) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | |
| | | for (MallOrderItem itemItem : item.getItems()) { |
| | | if (StrUtil.isNotBlank(sb)) { |
| | | sb.append(";" + itemItem.getGoodsName() + "*" + itemItem.getCnt()); |
| | | } else { |
| | | sb.append(itemItem.getGoodsName() + "*" + itemItem.getCnt()); |
| | | } |
| | | } |
| | | temp.add(sb.toString()); |
| | | } else { |
| | | temp.add(""); |
| | | } |
| | | |
| | | temp.add(item.getStatus()); |
| | | 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); |
| | | return null; |
| | | } |
| | | |
| | | @GetMapping("confirmOrder") |
| | | @ControllerEndpoint(operation = "确认货到达自提点", exceptionMessage = "操作失败") |
| | | public FebsResponse confirmOrder(MallOrderInfo mallOrderInfoDto){ |
| | | String orderIds = mallOrderInfoDto.getOrderIds(); |
| | | List<String> ids = StrUtil.splitTrim(orderIds, ","); |
| | | for(String id : ids){ |
| | | long orderId = Long.parseLong(id); |
| | | MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); |
| | | if(ObjectUtil.isEmpty(mallOrderInfo)){ |
| | | // continue; |
| | | return new FebsResponse().fail().message("订单不存在"); |
| | | } |
| | | Integer status = mallOrderInfo.getStatus() == null ? 0 : mallOrderInfo.getStatus(); |
| | | Integer deliveryState = mallOrderInfo.getDeliveryState() == null ? 0 : mallOrderInfo.getDeliveryState(); |
| | | if(OrderStatusEnum.WAIT_FINISH.getValue() != status || 2 != deliveryState){ |
| | | // continue; |
| | | return new FebsResponse().fail().message("配送状态不是配送中状态"); |
| | | } |
| | | mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()); |
| | | mallOrderInfoMapper.updateById(mallOrderInfo); |
| | | |
| | | OrderStateDto orderStateDto = new OrderStateDto(); |
| | | String productNames = getProductNames(mallOrderInfo.getMemberId(), mallOrderInfo.getId()); |
| | | orderStateDto.setGoodsName(StrUtil.sub(productNames,0,15)+"..."); |
| | | String takeUniqueCode = mallOrderInfo.getTakeUniqueCode(); |
| | | MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode); |
| | | orderStateDto.setAddressArea(mallTeamLeader.getAddressArea()); |
| | | orderStateDto.setDetailAddress(StrUtil.sub(mallTeamLeader.getDetailAddress(),0,20)+"..."); |
| | | orderStateDto.setRemark("果蔬等生鲜,请尽快取货"); |
| | | orderStateDto.setLeaderPhone(mallTeamLeader.getPhone()); |
| | | orderStateDto.setOpenId(mallMemberMapper.selectById(mallOrderInfo.getMemberId()).getOpenId()); |
| | | DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_THREE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_THREE.getCode()); |
| | | orderStateDto.setTemplateId(dataDictionaryCustom.getValue()); |
| | | iXcxPayService.pushOrderToAddress(orderStateDto); |
| | | // iXcxPayService.uniformMessageSend(orderStateDto); |
| | | } |
| | | return new FebsResponse().success(); |
| | | } |
| | | |
| | | /** |
| | | * 根据用户ID和订单ID获取所购买商品名称 |
| | | * @return 所含商品名称(多个以","隔开) |
| | | */ |
| | | public String getProductNames(Long memberId, Long orderId) { |
| | | MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderByMemberIdAndId(memberId, orderId); |
| | | List<MallOrderItem> details = mallOrderInfo.getItems(); |
| | | if (CollectionUtils.isEmpty(details)) { |
| | | return ""; |
| | | } |
| | | StringBuffer productNameBuffer = new StringBuffer(); |
| | | Integer maxLength = 30; |
| | | for (int i = 0; i< details.size(); i++) { |
| | | MallOrderItem mallOrderItem = details.get(i); |
| | | String goodsName = mallOrderItem.getGoodsName(); |
| | | if (goodsName == null) { |
| | | continue; |
| | | } |
| | | if (i == 0 && goodsName.length() > maxLength) { |
| | | productNameBuffer.append(goodsName.substring(0, maxLength) + "..."); |
| | | break; |
| | | } |
| | | if ((productNameBuffer.length() + goodsName.length()) > maxLength) { |
| | | productNameBuffer.append("等"); |
| | | break; |
| | | } |
| | | productNameBuffer.append(goodsName + ","); |
| | | } |
| | | String productNames = productNameBuffer.toString(); |
| | | if (productNames.endsWith(",")) { |
| | | productNames = productNames.substring(0, productNames.length() - 1); |
| | | } |
| | | if (productNames.endsWith(",等")) { |
| | | productNames = productNames.substring(0, productNames.length() - 2) + "等"; |
| | | } |
| | | return productNames; |
| | | } |
| | | |
| | | @GetMapping("exportOrderListOne") |
| | | @ControllerEndpoint(operation = "订单列表", exceptionMessage = "导出失败") |
| | | public FebsResponse exportOrderListOne(MallOrderInfo mallOrderInfo, HttpServletResponse response) throws IOException { |
| | | |
| | | List<ExcelSheetPO> res = new ArrayList<>(); |
| | | ExcelSheetPO orderSheet = new ExcelSheetPO(); |
| | | String title = "订单列表"; |
| | | orderSheet.setSheetName(title); |
| | | orderSheet.setTitle(title); |
| | | String[] header = {"订单编号", "订单金额", "下单时间", "配送方式", "收货姓名", "收货电话", "商品名称", "团长名称", "团长手机号码", "自提点名称","详细地址"}; |
| | | orderSheet.setHeaders(header); |
| | | |
| | | QueryRequest request = new QueryRequest(); |
| | | request.setPageNum(1); |
| | | request.setPageSize(9999); |
| | | List<MallOrderInfo> dataList = adminMallOrderService.findOrderListInPage(mallOrderInfo, request).getRecords(); |
| | | List<List<Object>> list = new ArrayList<>(); |
| | | if (dataList.size() > 0) { |
| | | for (MallOrderInfo item : dataList) { |
| | | List<Object> temp = new ArrayList<>(); |
| | | temp.add(item.getOrderNo()); |
| | | temp.add(item.getAmount()); |
| | | temp.add(DateUtil.format(item.getOrderTime(), "yyyy-MM-dd HH:mm:ss")); |
| | | temp.add("自提"); |
| | | temp.add(item.getName()); |
| | | temp.add(item.getPhone()); |
| | | if (CollUtil.isNotEmpty(item.getItems())) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | |
| | | for (MallOrderItem itemItem : item.getItems()) { |
| | | if (StrUtil.isNotBlank(sb)) { |
| | | sb.append(";" + itemItem.getGoodsName() + "*" + itemItem.getCnt()); |
| | | } else { |
| | | sb.append(itemItem.getGoodsName() + "*" + itemItem.getCnt()); |
| | | } |
| | | } |
| | | temp.add(sb.toString()); |
| | | } else { |
| | | temp.add(""); |
| | | } |
| | | temp.add(item.getLeaderName()); |
| | | temp.add(item.getLeaderPhone()); |
| | | temp.add(item.getAddressArea()); |
| | | temp.add(item.getDetailAddress()); |
| | | list.add(temp); |
| | | |
| | | adminMallOrderService.updateOrderStateAndDeliveryState(item.getId(), OrderStatusEnum.WAIT_FINISH.getValue(), OrderDeliveryStateEnum.DELIVERY_ING.getValue()); |
| | | } |
| | | } |
| | | 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); |
| | | return null; |
| | | } |
| | | |
| | | @PostMapping(value = "/importDeliver") |
| | | @ControllerEndpoint(operation = "导入发货", exceptionMessage = "导入失败") |
| | | public FebsResponse importDeliver(@RequestBody MultipartFile file) throws IOException { |
| | | if (file.isEmpty()) { |
| | | return new FebsResponse().fail(); |
| | | } |
| | | |
| | | String fileName = file.getOriginalFilename(); |
| | | String dirPath = "/Users/helius/Documents/"; |
| | | |
| | | File saveFile = new File(new File(dirPath).getAbsolutePath() + File.separator + fileName); |
| | | if (!saveFile.exists()) { |
| | | if (!saveFile.getParentFile().exists()) { |
| | | saveFile.getParentFile().mkdirs(); |
| | | } |
| | | } |
| | | |
| | | file.transferTo(saveFile); |
| | | |
| | | List<ExcelSheetPO> data = ExcelUtil.readExcel(saveFile, null, null); |
| | | if (CollUtil.isEmpty(data)) { |
| | | return new FebsResponse().fail(); |
| | | } |
| | | |
| | | List<List<Object>> dataList = data.get(0).getDataList(); |
| | | |
| | | int expressNoIndex = -1; |
| | | int expressComIndex = -1; |
| | | int expressCodeIndex = -1; |
| | | for (int i = 1; i < dataList.size(); i++) { |
| | | List<Object> objects = dataList.get(i); |
| | | |
| | | String expressNo = ""; |
| | | String expressCode = ""; |
| | | String expressCom = ""; |
| | | for (int j = 0; j < objects.size(); j++) { |
| | | Object obj = objects.get(j); |
| | | if ("物流单号".equals(obj)) { |
| | | expressNoIndex = j; |
| | | } |
| | | |
| | | if ("物流公司".equals(obj)) { |
| | | expressComIndex = j; |
| | | } |
| | | |
| | | if ("物流公司码".equals(obj)) { |
| | | expressCodeIndex = j; |
| | | } |
| | | |
| | | if (j == expressNoIndex) { |
| | | expressNo = (String) objects.get(j); |
| | | } |
| | | |
| | | if (j == expressComIndex) { |
| | | expressCom = (String) objects.get(j); |
| | | } |
| | | |
| | | if (j == expressCodeIndex) { |
| | | expressCode = (String) objects.get(j);; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (StrUtil.isNotBlank(expressNo) && StrUtil.isNotBlank(expressCode) && StrUtil.isNotBlank(expressCom)) { |
| | | String orderNo = (String) objects.get(0); |
| | | |
| | | DeliverGoodsDto deliverGoods = new DeliverGoodsDto(); |
| | | deliverGoods.setOrderNo(orderNo); |
| | | deliverGoods.setExpressCom(expressCom); |
| | | deliverGoods.setExpressCode(expressCode); |
| | | deliverGoods.setExpressNo(expressNo); |
| | | adminMallOrderService.deliverGoodsByOrderNo(deliverGoods); |
| | | } |
| | | |
| | | |
| | | } |
| | | return new FebsResponse().success(); |
| | | } |
| | | |
| | | /** |
| | | * 评论列表 |
| | | */ |
| | | @GetMapping("commentList") |
| | | public FebsResponse getCommentList(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request) { |
| | | Map<String, Object> data = getDataTable(adminMallOrderService.getCommentListInPage(adminMallGoodsCommentDto, request)); |
| | | return new FebsResponse().success().data(data); |
| | | } |
| | | |
| | | /** |
| | | * 评论列表-显示评论 |
| | | */ |
| | | @GetMapping("showStateSwitchOn/{id}") |
| | | @ControllerEndpoint(operation = "评论列表-显示评论", exceptionMessage = "设置失败") |
| | | public FebsResponse showStateSwitchOn(@NotNull(message = "{required}") @PathVariable Long id) { |
| | | return adminMallOrderService.showStateSwitchOn(id); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 评论列表-不显示评论 |
| | | */ |
| | | @GetMapping("showStateSwitchOff/{id}") |
| | | @ControllerEndpoint(operation = "评论列表-显示评论", exceptionMessage = "设置失败") |
| | | public FebsResponse showStateSwitchOff(@NotNull(message = "{required}") @PathVariable Long id) { |
| | | return adminMallOrderService.showStateSwitchOff(id); |
| | | } |
| | | |
| | | } |