package cc.mrbird.febs.mall.controller.clothes; import cc.mrbird.febs.common.annotation.ControllerEndpoint; import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.RedisUtils; 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.controller.order.ViewMallOrderController; import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto; import cc.mrbird.febs.mall.dto.DeliverGoodsDto; import cc.mrbird.febs.mall.dto.activity.AdminCategoryAddDto; import cc.mrbird.febs.mall.dto.activity.AdminCategoryUpdateDto; import cc.mrbird.febs.mall.dto.clothes.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.service.ClothesTypeService; 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.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.NotBlank; import javax.validation.constraints.NotNull; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @Slf4j @Validated @RestController @RequiredArgsConstructor @RequestMapping(value = "/admin/clothesType") public class AdminClothesTypeController extends BaseController { private final ClothesTypeService clothesTypeService; private final RedisUtils redisUtils; /** * 分类列表 * @return */ @GetMapping("groupList") public FebsResponse groupList(AdminClothesSocialCategoryDto dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.getGroupList(dto, request)); return new FebsResponse().success().data(data); } /** * 分类-新增 */ @PostMapping("addGroup") @ControllerEndpoint(operation = "分类-新增", exceptionMessage = "操作失败") public FebsResponse addGroup(@RequestBody @Valid AdminClothesCategoryAddDto dto) { return clothesTypeService.addGroup(dto); } /** * 分类-删除 */ @GetMapping("groupDelete/{id}") @ControllerEndpoint(operation = "选项-删除", exceptionMessage = "操作失败") public FebsResponse groupDelete(@NotNull(message = "{required}") @PathVariable Long id) { return clothesTypeService.groupDelete(id); } /** * 分类-更新 */ @PostMapping("groupUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse groupUpdate(@RequestBody @Valid AdminClothesCategoryUpdateDto dto) { return clothesTypeService.groupUpdate(dto); } /** * 分类-开启 */ @GetMapping("groupState/{id}/{type}") @ControllerEndpoint(operation = "分类-开启", exceptionMessage = "操作失败") public FebsResponse groupState( @NotNull(message = "{required}") @PathVariable Long id, @NotNull(message = "{required}") @PathVariable Integer type) { return clothesTypeService.groupState(id,type); } /** * 社区列表 * * @param dto * @param request * @return */ @GetMapping("socialList") public FebsResponse socialList(AdminClothesSocialListDto dto, QueryRequest request) { String startTime = dto.getStartTime(); String endTime = dto.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 data = getDataTable(clothesTypeService.getSocialListInPage(dto, request)); return new FebsResponse().success().data(data); } /** * 社区列表-评论列表 */ @GetMapping("socialComment") public FebsResponse socialComment(ClothesSocialComment dto, QueryRequest request, Integer parentId) { String existToken = redisUtils.getString(AppContants.SOCIAL_COMMENT); long socialId = Long.parseLong(existToken); dto.setSocialId(socialId); Map data = getDataTable(clothesTypeService.socialComment(dto,request)); return new FebsResponse().success().data(data); } /** * 社区-新增 */ @PostMapping("socialAdd") @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败") public FebsResponse socialAdd(@RequestBody ClothesSocial dto) { return clothesTypeService.socialAdd(dto); } /** * 社区-更新 */ @PostMapping("socialUpdate") @ControllerEndpoint(operation = "社区-更新", exceptionMessage = "操作失败") public FebsResponse socialUpdate(@RequestBody ClothesSocial dto) { return clothesTypeService.socialUpdate(dto); } /** * 社区-灵感 */ @PostMapping("socialMuseUpdate") @ControllerEndpoint(operation = "社区-灵感", exceptionMessage = "操作失败") public FebsResponse socialMuseUpdate(@RequestBody ClothesSocialMuse dto) { return clothesTypeService.socialMuseUpdate(dto); } /** * 社区获取设计类型-工艺 * @return */ @GetMapping(value = "/allArt/{typeId}") public FebsResponse allArt(@NotNull(message = "{required}") @PathVariable Long typeId) { return new FebsResponse().success().data(clothesTypeService.allArt(typeId)); } /** * 社区获取设计类型-尺码 * @return */ @GetMapping(value = "/allSize/{typeId}") public FebsResponse allSize(@NotNull(message = "{required}") @PathVariable Long typeId) { return new FebsResponse().success().data(clothesTypeService.allSize(typeId)); } /** * 社区获取设计类型-位置 * @return */ @GetMapping(value = "/allLocation/{typeId}") public FebsResponse allLocation(@NotNull(message = "{required}") @PathVariable Long typeId) { return new FebsResponse().success().data(clothesTypeService.allLocation(typeId)); } /** * 社区获取设计类型-图案 * @return */ @GetMapping(value = "/allPattern/{typeId}") public FebsResponse allPattern(@NotNull(message = "{required}") @PathVariable Long typeId) { return new FebsResponse().success().data(clothesTypeService.allPattern(typeId)); } /** * 社区获取设计类型-布料 * @return */ @GetMapping(value = "/allCloth/{typeId}") public FebsResponse allCloth(@NotNull(message = "{required}") @PathVariable Long typeId) { return new FebsResponse().success().data(clothesTypeService.allCloth(typeId)); } /** * 社区获取设计类型 * @return */ @GetMapping(value = "/allType") public FebsResponse allType() { return new FebsResponse().success().data(clothesTypeService.allType()); } /** * 社区获取分类 * @return */ @GetMapping(value = "/allGroup") public FebsResponse allGroup() { return new FebsResponse().success().data(clothesTypeService.allGroup()); } /** * 社区-开启 */ @GetMapping("socialState/{id}/{state}") @ControllerEndpoint(operation = "社区-开启", exceptionMessage = "操作失败") public FebsResponse socialState(@NotNull(message = "{required}") @PathVariable Long id, @NotNull(message = "{required}") @PathVariable Integer state) { return clothesTypeService.socialState(id,state); } /** * 社区-开启评论 */ @GetMapping("commentStateSwitch/{id}/{state}") @ControllerEndpoint(operation = "社区-开启评论", exceptionMessage = "操作失败") public FebsResponse commentStateSwitch(@NotNull(message = "{required}") @PathVariable Long id, @NotNull(message = "{required}") @PathVariable Integer state) { return clothesTypeService.commentStateSwitch(id,state); } /** * 社区-评论-是否展示 */ @GetMapping("showStateSwitch/{id}/{state}") @ControllerEndpoint(operation = "社区-评论-是否展示", exceptionMessage = "操作失败") public FebsResponse showStateSwitch(@NotNull(message = "{required}") @PathVariable Long id, @NotNull(message = "{required}") @PathVariable Integer state) { return clothesTypeService.showStateSwitch(id,state); } /** * 社区-推荐首页 */ @GetMapping("socialHotState/{id}/{state}") @ControllerEndpoint(operation = "社区-开启", exceptionMessage = "操作失败") public FebsResponse socialHotState(@NotNull(message = "{required}") @PathVariable Long id, @NotNull(message = "{required}") @PathVariable Integer state) { return clothesTypeService.socialHotState(id,state); } /** * 社区-删除 */ @GetMapping("socialDelete/{id}") @ControllerEndpoint(operation = "社区-删除", exceptionMessage = "删除失败") public FebsResponse socialDelete(@NotNull(message = "{required}") @PathVariable Long id) { return clothesTypeService.socialDelete(id); } /** * 订单列表 * * @param dto * @param request * @return */ @GetMapping("orderList") public FebsResponse getOrderList(AdminClothesOrderListDto dto, QueryRequest request) { String startTime = dto.getStartTime(); String endTime = dto.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 data = getDataTable(clothesTypeService.getOrderListInPage(dto, request)); return new FebsResponse().success().data(data); } /** * 订单列表-发货 */ @PostMapping("deliverGoods") @ControllerEndpoint(operation = "订单列表-发货", exceptionMessage = "操作失败") public FebsResponse deliverGoods(AdminClothesDeliverGoodsDto dto) { return clothesTypeService.deliverGoods(dto); } /** * 订单列表-修改物流编号 */ @PostMapping("deliverGoodsUpdate") @ControllerEndpoint(operation = "订单列表-修改物流编号", exceptionMessage = "操作失败") public FebsResponse deliverGoodsUpdate(@Valid AdminClothesDeliverGoodsDto dto) { return clothesTypeService.deliverGoodsUpdate(dto); } /** * 订单列表-仅退款 */ @GetMapping("refundOrder/{id}") @ControllerEndpoint(operation = "订单列表-仅退款", exceptionMessage = "仅退款") public FebsResponse refundOrder(@NotNull(message = "{required}") @PathVariable Long id) { AdminClothesRefundOrderDto dto = new AdminClothesRefundOrderDto(); dto.setId(id); return clothesTypeService.refundOrder(dto); } @GetMapping("confirmOrder/{ids}") @ControllerEndpoint(operation = "订单列表-确认收货", exceptionMessage = "操作失败") public FebsResponse confirmOrder(@NotBlank(message = "{required}") @PathVariable String ids){ List List = StrUtil.splitTrim(ids, ","); for(String id : List){ long orderId = Long.parseLong(id); clothesTypeService.confirmOrder(orderId); } return new FebsResponse().success(); } @GetMapping("exportOrderList/{ids}") @ControllerEndpoint(operation = "订单列表", exceptionMessage = "导出失败") public FebsResponse exportOrderList(@NotBlank(message = "{required}") @PathVariable String ids, HttpServletResponse response) throws IOException { List List = StrUtil.splitTrim(ids, ","); if(CollUtil.isNotEmpty( List)){ ArrayList orderIds = new ArrayList<>(); for (String id : List){ long orderId = Long.parseLong(id); orderIds.add(orderId); } if(CollUtil.isNotEmpty(orderIds)){ clothesTypeService.exportOrderList(orderIds,response); } } 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 = "/home/javaweb/webresource/clothes/"; 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 data = ExcelUtil.readExcel(saveFile, null, null); if (CollUtil.isEmpty(data)) { return new FebsResponse().fail(); } List> dataList = data.get(0).getDataList(); int orderIdNoIndex = -1; int expressNoIndex = -1; int expressComIndex = -1; int expressCodeIndex = -1; for (int i = 1; i < dataList.size(); i++) { List objects = dataList.get(i); String orderId = ""; String expressNo = ""; String expressCode = ""; String expressCom = ""; for (int j = 0; j < objects.size(); j++) { Object obj = objects.get(j); if ("订单ID".equals(obj)) { orderIdNoIndex = j; } if ("物流单号".equals(obj)) { expressNoIndex = j; } if ("物流公司".equals(obj)) { expressComIndex = j; } if ("物流公司码".equals(obj)) { expressCodeIndex = j; } if (j == orderIdNoIndex) { orderId = (String) objects.get(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)) { AdminClothesDeliverGoodsDto dto = new AdminClothesDeliverGoodsDto(); dto.setId(Long.parseLong(orderId)); dto.setExpressCom(expressCom); dto.setExpressCode(expressCode); dto.setExpressNo(expressNo); clothesTypeService.deliverGoodsImport(dto); } } return new FebsResponse().success(); } /** * 分类列表 * @return */ @GetMapping("typeList") public FebsResponse typeList(ClothesType dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.adminTypeList(dto, request)); return new FebsResponse().success().data(data); } /** * 分类-新增 */ @PostMapping("typeAdd") @ControllerEndpoint(operation = " 分类-新增", exceptionMessage = "操作失败") public FebsResponse typeAdd(@RequestBody @Valid ClothesType dto) { return clothesTypeService.typeAdd(dto); } /** * 分类-更新 */ @PostMapping("typeUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse typeUpdate(@RequestBody @Valid ClothesType dto) { return clothesTypeService.typeUpdate(dto); } /** * 分类-状态操作 */ @GetMapping("changeState/{id}/{type}/{state}") @ControllerEndpoint(operation = "分类-状态操作", exceptionMessage = "操作失败") public FebsResponse changeState( @NotNull(message = "{required}") @PathVariable Long id, @NotNull(message = "{required}") @PathVariable Integer type, @NotNull(message = "{required}") @PathVariable Integer state ) { return clothesTypeService.changeState(id,type,state); } /** * 尺码列表 * @return */ @GetMapping("sizeList") public FebsResponse sizeList(ClothesSize dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.adminSizeList(dto, request)); return new FebsResponse().success().data(data); } /** * 尺码-新增 */ @PostMapping("sizeAdd") @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败") public FebsResponse sizeAdd(@RequestBody @Valid ClothesSize dto) { return clothesTypeService.sizeAdd(dto); } /** * 尺码-更新 */ @PostMapping("sizeUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse sizeUpdate(@RequestBody @Valid ClothesSize dto) { return clothesTypeService.sizeUpdate(dto); } /** * 图案列表 * @return */ @GetMapping("patternList") public FebsResponse patternList(ClothesPattern dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.adminPatternList(dto, request)); return new FebsResponse().success().data(data); } /** * 图案-新增 */ @PostMapping("patternAdd") @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败") public FebsResponse patternAdd(@RequestBody @Valid ClothesPattern dto) { return clothesTypeService.patternAdd(dto); } /** * 图案-更新 */ @PostMapping("patternUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse patternUpdate(@RequestBody @Valid ClothesPattern dto) { return clothesTypeService.patternUpdate(dto); } /** * 位置列表 * @return */ @GetMapping("locationList") public FebsResponse locationList(ClothesLocation dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.adminLocationList(dto, request)); return new FebsResponse().success().data(data); } /** * 位置-新增 */ @PostMapping("locationAdd") @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败") public FebsResponse locationAdd(@RequestBody @Valid ClothesLocation dto) { return clothesTypeService.locationAdd(dto); } /** * 位置-更新 */ @PostMapping("locationUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse locationUpdate(@RequestBody @Valid ClothesLocation dto) { return clothesTypeService.locationUpdate(dto); } /** * 布料列表 * @return */ @GetMapping("clothList") public FebsResponse clothList(ClothesCloth dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.adminClothList(dto, request)); return new FebsResponse().success().data(data); } /** * 布料-新增 */ @PostMapping("clothAdd") @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败") public FebsResponse clothAdd(@RequestBody @Valid ClothesCloth dto) { return clothesTypeService.clothAdd(dto); } /** * 布料-更新 */ @PostMapping("clothUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse clothUpdate(@RequestBody @Valid ClothesCloth dto) { return clothesTypeService.clothUpdate(dto); } /** * 工艺列表 * @return */ @GetMapping("artList") public FebsResponse artList(ClothesArt dto, QueryRequest request) { Map data = getDataTable(clothesTypeService.adminArtList(dto, request)); return new FebsResponse().success().data(data); } /** * 工艺-新增 */ @PostMapping("artAdd") @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败") public FebsResponse artAdd(@RequestBody @Valid ClothesArt dto) { return clothesTypeService.artAdd(dto); } /** * 工艺-更新 */ @PostMapping("artUpdate") @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败") public FebsResponse artUpdate(@RequestBody @Valid ClothesArt dto) { return clothesTypeService.artUpdate(dto); } @PostMapping("artSet") @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败") public FebsResponse artSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) { return clothesTypeService.artSet(dto); } @PostMapping("sizeSet") @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败") public FebsResponse sizeSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) { return clothesTypeService.sizeSet(dto); } @PostMapping("clothSet") @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败") public FebsResponse clothSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) { return clothesTypeService.clothSet(dto); } @PostMapping("patternSet") @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败") public FebsResponse patternSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) { return clothesTypeService.patternSet(dto); } @PostMapping("locationSet") @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败") public FebsResponse locationSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) { return clothesTypeService.locationSet(dto); } }