|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cc.mrbird.febs.common.annotation.ControllerEndpoint; | 
|---|
|  |  |  | import cc.mrbird.febs.common.controller.BaseController; | 
|---|
|  |  |  | 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.exception.FebsException; | 
|---|
|  |  |  | 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.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.system.entity.Dept; | 
|---|
|  |  |  | import cn.hutool.core.collection.CollUtil; | 
|---|
|  |  |  | import cn.hutool.core.date.DateUtil; | 
|---|
|  |  |  | import cn.hutool.core.util.StrUtil; | 
|---|
|  |  |  | import lombok.RequiredArgsConstructor; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 订单列表 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param mallOrderInfo | 
|---|
|  |  |  | * @param request | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 订单列表-取消订单 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @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 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | return adminMallOrderService.addAddress(addAddressDto); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 订单退款地址-选择 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @GetMapping("addAddress/tree") | 
|---|
|  |  |  | @ControllerEndpoint(exceptionMessage = "获取地址失败") | 
|---|
|  |  |  | public List<AdminAddAddressTreeVo> getRefundAddress() { | 
|---|
|  |  |  | return adminMallOrderService.getRefundAddress(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 订单退款地址-更新退款记录的地址信息 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping("withAddressUpdate") | 
|---|
|  |  |  | @ControllerEndpoint(operation = "订单退款地址-更新退款记录的地址信息", exceptionMessage = "操作失败") | 
|---|
|  |  |  | public FebsResponse withAddressUpdate(@Valid WithAddressUpdateDto withAddressUpdateDto) { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|