package com.stylefeng.guns.modular.system.controller.checkCar; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.exception.GunsException; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.modular.system.controller.util.UploadUtil; import com.stylefeng.guns.modular.system.model.TBranchOffice; import com.stylefeng.guns.modular.system.model.TBranchOfficeArea; import com.stylefeng.guns.modular.system.model.TRegion; import com.stylefeng.guns.modular.system.service.ITBranchOfficeAreaService; import com.stylefeng.guns.modular.system.service.ITBranchOfficeService; import com.stylefeng.guns.modular.system.service.ITRegionService; import com.stylefeng.guns.modular.system.util.OssUploadUtil; import com.stylefeng.guns.modular.system.util.wxutils.WeChatUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.beans.factory.annotation.Autowired; import com.stylefeng.guns.core.log.LogObjectHolder; import org.springframework.web.bind.annotation.RequestParam; import com.stylefeng.guns.modular.system.model.TCheckCarActivity; import com.stylefeng.guns.modular.system.service.ITCheckCarActivityService; import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; /** * 代检车活动控制器 * * @author fengshuonan * @Date 2025-08-02 18:21:14 */ @Slf4j @Controller @RequestMapping("/tCheckCarActivity") public class TCheckCarActivityController extends BaseController { private String PREFIX = "/system/tCheckCarActivity/"; @Autowired private ITCheckCarActivityService tCheckCarActivityService; @Autowired private ITBranchOfficeService branchOfficeService; @Autowired private ITBranchOfficeAreaService branchOfficeAreaService; @Autowired private ITRegionService regionService; @Autowired private WeChatUtil weChatUtil; @Value("wx.conf.secret") private String secret; @Value("wx.conf.appId") private String appId; /** * 跳转到代检车活动首页 */ @RequestMapping("") public String index(Model model) { // 查询当前帐号的省市区 Integer objectId = ShiroKit.getUser().getObjectId(); Integer roleType = ShiroKit.getUser().getRoleType(); TBranchOffice tBranchOffice = branchOfficeService.selectById(objectId); if (roleType == 1) { List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper()); if (CollectionUtils.isEmpty(branchOfficeAreaList)) { model.addAttribute("branchOfficeAreaList", new ArrayList<>()); } branchOfficeAreaList.forEach(item -> { item.setActivityAreaCode(item.getProvinceCode() + "-" + item.getCityCode() + "-" + item.getAreaCode()); }); model.addAttribute("branchOfficeAreaList", branchOfficeAreaList); model.addAttribute("roleType", roleType); return PREFIX + "tCheckCarActivity_audit.html"; } else { List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper() .eq("branchOfficeId", tBranchOffice.getId())); if (CollectionUtils.isEmpty(branchOfficeAreaList)) { model.addAttribute("branchOfficeAreaList", new ArrayList<>()); } branchOfficeAreaList.forEach(item -> { item.setActivityAreaCode(item.getProvinceCode() + "-" + item.getCityCode() + "-" + item.getAreaCode()); }); model.addAttribute("roleType", roleType); model.addAttribute("branchOfficeAreaList", branchOfficeAreaList); return PREFIX + "tCheckCarActivity.html"; } } /** * 跳转到添加代检车活动 */ @RequestMapping("/tCheckCarActivity_add") public String tCheckCarActivityAdd(Model model) { // 查询当前帐号的省市区 Integer objectId = ShiroKit.getUser().getObjectId(); Integer roleType = ShiroKit.getUser().getRoleType(); if(roleType == 1){ List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper()); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList",branchOfficeAreaList); }else { TBranchOffice tBranchOffice = branchOfficeService.selectById(objectId); List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper() .eq("branchOfficeId",tBranchOffice.getId())); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList",branchOfficeAreaList); } return PREFIX + "tCheckCarActivity_add.html"; } /** * 跳转到修改代检车活动 */ @RequestMapping("/tCheckCarActivity_update/{tCheckCarActivityId}") public String tCheckCarActivityUpdate(@PathVariable Integer tCheckCarActivityId, Model model) { TCheckCarActivity tCheckCarActivity = tCheckCarActivityService.selectById(tCheckCarActivityId); String timeRange = DateUtil.format(tCheckCarActivity.getStartTime(), DatePattern.NORM_DATE_FORMAT) + " - " + DateUtil.format(tCheckCarActivity.getEndTime(), DatePattern.NORM_DATE_FORMAT); tCheckCarActivity.setTimeRange(timeRange); // 查询当前帐号的省市区 Integer objectId = ShiroKit.getUser().getObjectId(); Integer roleType = ShiroKit.getUser().getRoleType(); if(roleType == 1){ List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper()); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList", branchOfficeAreaList); }else { TBranchOffice tBranchOffice = branchOfficeService.selectById(objectId); List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper() .eq("branchOfficeId",tBranchOffice.getId())); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList",branchOfficeAreaList); } List cityList = getBranchOfficeByProvinceCode(tCheckCarActivity.getProvinceCode(), objectId, roleType); List areaList = getBranchOfficeByCityCode(tCheckCarActivity.getCityCode(), objectId, roleType); model.addAttribute("cityList", cityList); model.addAttribute("areaList", areaList); model.addAttribute("item",tCheckCarActivity); LogObjectHolder.me().set(tCheckCarActivity); return PREFIX + "tCheckCarActivity_edit.html"; } /** * 根据省份编码获取代检车活动区域 * @param provinceCode * @param objectId * @param roleType * @return */ private List getBranchOfficeByProvinceCode(String provinceCode, Integer objectId, Integer roleType) { List list = new ArrayList<>(); if (SinataUtil.isNotEmpty(provinceCode)) { EntityWrapper wrapper = new EntityWrapper<>(); wrapper.eq("provinceCode", provinceCode); if (roleType == 2) { wrapper.eq("branchOfficeId", objectId); } list = branchOfficeAreaService.selectList(wrapper); } list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getCityCode))), ArrayList::new)); return list; } /** * 根据城市编码获取代检车活动区域 * @param cityCode * @param objectId * @param roleType * @return */ private List getBranchOfficeByCityCode(String cityCode, Integer objectId, Integer roleType) { List list = new ArrayList<>(); if (SinataUtil.isNotEmpty(cityCode)) { EntityWrapper wrapper = new EntityWrapper<>(); wrapper.eq("cityCode", cityCode); if (roleType == 2) { wrapper.eq("branchOfficeId", objectId); } list = branchOfficeAreaService.selectList(wrapper); } list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getAreaCode))), ArrayList::new)); return list; } /** * 跳转到详情代检车活动 */ @RequestMapping("/tCheckCarActivity_detail/{tCheckCarActivityId}") public String tCheckCarActivityDetail(@PathVariable Integer tCheckCarActivityId, Model model) { TCheckCarActivity tCheckCarActivity = tCheckCarActivityService.selectById(tCheckCarActivityId); String timeRange = DateUtil.format(tCheckCarActivity.getStartTime(), DatePattern.NORM_DATE_FORMAT) + " - " + DateUtil.format(tCheckCarActivity.getEndTime(), DatePattern.NORM_DATE_FORMAT); tCheckCarActivity.setTimeRange(timeRange); if (tCheckCarActivity.getAuditStatus().equals(1)) { //判断是否开始 Date now = new Date(); if (tCheckCarActivity.getStartTime() != null && tCheckCarActivity.getStartTime().after(now)) { tCheckCarActivity.setActivityStatus(0); // 未开始 } else if (tCheckCarActivity.getEndTime() != null && tCheckCarActivity.getEndTime().before(now)) { tCheckCarActivity.setActivityStatus(2); // 已结束 } else if (tCheckCarActivity.getPauseFlag() != null && tCheckCarActivity.getPauseFlag().equals(1) && tCheckCarActivity.getStartTime() != null && tCheckCarActivity.getStartTime().before(now) && tCheckCarActivity.getEndTime() != null && tCheckCarActivity.getEndTime().after(now)) { tCheckCarActivity.setActivityStatus(3); // 已暂停 } else if (tCheckCarActivity.getStartTime() != null && tCheckCarActivity.getStartTime().before(now) && tCheckCarActivity.getEndTime() != null && tCheckCarActivity.getEndTime().after(now)) { tCheckCarActivity.setActivityStatus(1); // 进行中 }else { tCheckCarActivity.setActivityStatus(0); // 未开始 } } //格式化审核时间 if (Objects.nonNull(tCheckCarActivity.getAuditTime())) { tCheckCarActivity.setAuditTimeFormat(DateUtil.format(tCheckCarActivity.getAuditTime(), DatePattern.NORM_DATETIME_FORMAT)); } // 查询当前帐号的省市区 Integer objectId = ShiroKit.getUser().getObjectId(); Integer roleType = ShiroKit.getUser().getRoleType(); if(roleType == 1){ List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper()); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList",branchOfficeAreaList); }else { TBranchOffice tBranchOffice = branchOfficeService.selectById(objectId); List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper() .eq("branchOfficeId",tBranchOffice.getId())); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList",branchOfficeAreaList); } List cityList = getBranchOfficeByProvinceCode(tCheckCarActivity.getProvinceCode(), objectId, roleType); List areaList = getBranchOfficeByCityCode(tCheckCarActivity.getCityCode(), objectId, roleType); model.addAttribute("cityList", cityList); model.addAttribute("areaList", areaList); model.addAttribute("item",tCheckCarActivity); LogObjectHolder.me().set(tCheckCarActivity); return PREFIX + "tCheckCarActivity_detail.html"; } /** * 获取代检车活动列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(String createTime,String branchOfficeName,String name, String activityAreaCode,Integer status) { return super.packForBT(tCheckCarActivityService.getOrderList(createTime,branchOfficeName,name,activityAreaCode,status)); } /** * 新增代检车活动 */ @RequestMapping(value = "/add") @ResponseBody public Object add(TCheckCarActivity tCheckCarActivity) { tCheckCarActivity.setBranchOfficeId(ShiroKit.getUser().getObjectId()); tCheckCarActivity.setCreateBy(ShiroKit.getUser().getName()); TRegion distinct = regionService.selectOne(new EntityWrapper().eq("code", tCheckCarActivity.getDistrictCode())); if (distinct != null) { tCheckCarActivity.setDistrictName(distinct.getName()); //查询城市 TRegion city = regionService.selectOne(new EntityWrapper().eq("id", distinct.getParentId())); if (city != null) { tCheckCarActivity.setCityName(city.getName()); //查询省份 TRegion province = regionService.selectOne(new EntityWrapper().eq("id", city.getParentId())); if (province != null) { tCheckCarActivity.setProvinceName(province.getName()); } } } tCheckCarActivityService.insert(tCheckCarActivity); return SUCCESS_TIP; } /** * 删除代检车活动 */ @RequestMapping(value = "/delete") @ResponseBody public Object delete(@RequestParam Integer tCheckCarActivityId) { tCheckCarActivityService.deleteById(tCheckCarActivityId); return SUCCESS_TIP; } /** * 修改代检车活动 */ @RequestMapping(value = "/update") @ResponseBody public Object update(TCheckCarActivity tCheckCarActivity) { tCheckCarActivity.setUpdateBy(ShiroKit.getUser().getName()); TRegion distinct = regionService.selectOne(new EntityWrapper().eq("code", tCheckCarActivity.getDistrictCode())); if (distinct != null) { tCheckCarActivity.setDistrictName(distinct.getName()); //查询城市 TRegion city = regionService.selectOne(new EntityWrapper().eq("id", distinct.getParentId())); if (city != null) { tCheckCarActivity.setCityName(city.getName()); //查询省份 TRegion province = regionService.selectOne(new EntityWrapper().eq("id", city.getParentId())); if (province != null) { tCheckCarActivity.setProvinceName(province.getName()); } } } tCheckCarActivity.setAuditStatus(0); // 重置审核状态为未审核 tCheckCarActivityService.updateById(tCheckCarActivity); return SUCCESS_TIP; } /** * 代检车活动详情 */ @RequestMapping(value = "/detail/{tCheckCarActivityId}") @ResponseBody public Object detail(@PathVariable("tCheckCarActivityId") Integer tCheckCarActivityId) { return tCheckCarActivityService.selectById(tCheckCarActivityId); } /** * 获取活动统计数据 */ @RequestMapping(value = "/statistics/{tCheckCarActivityId}") @ResponseBody public Object getActivityStatistics(@PathVariable("tCheckCarActivityId") Integer tCheckCarActivityId) { return tCheckCarActivityService.getActivityStatistics(tCheckCarActivityId); } /** * 获取活动优惠券领取记录列表 */ @RequestMapping(value = "/records/{tCheckCarActivityId}") @ResponseBody public Object getActivityRecords(@PathVariable("tCheckCarActivityId") Integer tCheckCarActivityId, @RequestParam(required = false) String userPhone) { return super.packForBT(tCheckCarActivityService.getActivityRecords(tCheckCarActivityId, userPhone)); } /** * 跳转到审核代检车活动详情页面 */ @RequestMapping("/tCheckCarActivity_audit_detail/{tCheckCarActivityId}") public String tCheckCarActivityAuditDetail(@PathVariable Integer tCheckCarActivityId, Model model) { TCheckCarActivity tCheckCarActivity = tCheckCarActivityService.selectById(tCheckCarActivityId); String timeRange = DateUtil.format(tCheckCarActivity.getStartTime(), DatePattern.NORM_DATE_FORMAT) + " - " + DateUtil.format(tCheckCarActivity.getEndTime(), DatePattern.NORM_DATE_FORMAT); tCheckCarActivity.setTimeRange(timeRange); // 查询当前帐号的省市区 Integer objectId = ShiroKit.getUser().getObjectId(); Integer roleType = ShiroKit.getUser().getRoleType(); if(roleType == 1){ List branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper()); if(CollectionUtils.isEmpty(branchOfficeAreaList)){ model.addAttribute("provinceList",new ArrayList<>()); } branchOfficeAreaList.forEach(item->{ item.setActivityAreaCode(item.getProvinceCode()+"-"+item.getCityCode()+"-"+item.getAreaCode()); }); branchOfficeAreaList = branchOfficeAreaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TBranchOfficeArea::getProvinceCode))),ArrayList::new)); model.addAttribute("provinceList",branchOfficeAreaList); } List cityList = getBranchOfficeByProvinceCode(tCheckCarActivity.getProvinceCode(), objectId, roleType); List areaList = getBranchOfficeByCityCode(tCheckCarActivity.getCityCode(), objectId, roleType); model.addAttribute("cityList", cityList); model.addAttribute("areaList", areaList); model.addAttribute("item",tCheckCarActivity); LogObjectHolder.me().set(tCheckCarActivity); return PREFIX + "tCheckCarActivity_auditPage.html"; } /** * 审核代检车活动 */ @RequestMapping(value = "/audit") @ResponseBody public Object audit(Integer id, Integer auditStatus, String auditRemark) { TCheckCarActivity activity = tCheckCarActivityService.selectById(id); activity.setAuditStatus(auditStatus); activity.setRejectReason(auditRemark); activity.setAuditTime(new Date()); //如果审核通过,则生成小程序二维码 if (auditStatus == 1) { String pagePath = "";//TODO 小程序路径 try { InputStream release = weChatUtil.getwxacodeunlimit(appId, secret, pagePath, "id=" + id, "release"); String url = OssUploadUtil.ossUploadInputStream(release); activity.setQrCode(url); } catch (Exception e) { log.error("生成小程序二维码失败", e); throw new GunsException("服务器开小差啦"); } } tCheckCarActivityService.updateById(activity); return SUCCESS_TIP; } /** * 暂停/开启活动 */ @RequestMapping(value = "/pause") @ResponseBody public Object pause(@RequestParam Integer tCheckCarActivityId) { TCheckCarActivity activity = tCheckCarActivityService.selectById(tCheckCarActivityId); if (activity.getPauseFlag() == null || activity.getPauseFlag() == 0) { activity.setPauseFlag(1); // 暂停 } else { activity.setPauseFlag(0); // 开启 } tCheckCarActivityService.updateById(activity); return SUCCESS_TIP; } }