xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/vo/XpAppUserCouponListVo.java
@@ -61,6 +61,7 @@ @ApiModelProperty(value = "活动名称") private String acticityName; private Long couponid; @ApiModelProperty(value = "优惠券id") private Long coupond; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpOperationsUserClientFallbackFactory.java
New file @@ -0,0 +1,40 @@ package com.xiaopeng.api.factory.account; import com.xiaopeng.api.feignClient.account.XpOperationsUserClient; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Slf4j @Component public class XpOperationsUserClientFallbackFactory implements FallbackFactory<XpOperationsUserClient> { @Override public XpOperationsUserClient create(Throwable cause) { return new XpOperationsUserClient() { @Override public R<List<XpOperationsUser>> listByIds(List<Long> ids) { log.error("查询运维人员信息失败,ids={}, err={}", ids, cause.getMessage()); return R.ok(new ArrayList<>()); } @Override public R<List<XpOperationsUser>> listByName(String nickName) { log.error("查询运维人员信息失败,nickName={}, err={}", nickName, cause.getMessage()); return R.ok(new ArrayList<>()); } @Override public R<XpOperationsUserProfileVO> getProfile(Long id) { log.error("查询运维人员信息失败,id={}, err={}", id, cause.getMessage()); return R.ok(new XpOperationsUserProfileVO()); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationsUserClient.java
@@ -1,6 +1,6 @@ package com.xiaopeng.api.feignClient.account; import com.xiaopeng.api.factory.account.XpOperationUserClientFallbackFactory; import com.xiaopeng.api.factory.account.XpOperationsUserClientFallbackFactory; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO; import com.xiaopeng.common.core.domain.R; @@ -13,14 +13,9 @@ import java.util.List; /** * 小程序用户Feign客户端 * * @author mitao */ @FeignClient(contextId = "XpOperationsUserClient", value = ServiceNameConstantsEnum.XP_ACCOUNT_SERVICE, fallbackFactory = XpOperationUserClientFallbackFactory.class) fallbackFactory = XpOperationsUserClientFallbackFactory.class) public interface XpOperationsUserClient { /** xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java
@@ -1,13 +1,13 @@ package com.xiaopeng.maintenance.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRecord; import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRule; import com.xiaopeng.api.model.operation.SysOperLog; import com.xiaopeng.api.vo.account.LoginOperationUser; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.poi.ExcelUtil; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.security.service.TokenService; import com.xiaopeng.maintenance.dto.XpCruiseCheckInRuleDto; @@ -26,10 +26,15 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.List; /** @@ -37,6 +42,7 @@ */ @RestController @RequestMapping("") @Slf4j public class XpCruiseCheckInRuleController { @Resource @@ -148,7 +154,6 @@ @ApiOperation(value = "巡游打卡统计", tags = {"管理后台-巡游打卡管理"}) @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/statistic") public R<List<XpCruiseCheckInStatisticsVO>> pageList(@RequestBody XpCruiseCheckInStatisticsQuery query) { return R.ok(xpCruiseCheckInRecordService.statistics(query)); } @@ -156,8 +161,26 @@ @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/export") public R<PageInfo<XpCruiseCheckInRecordVO>> pageListExport(@RequestBody XpCruiseCheckInRecordQuery query, HttpServletResponse response) { List<XpCruiseCheckInRecordVO> list = xpCruiseCheckInRecordService.all(query); ExcelUtil<XpCruiseCheckInRecordVO> util = new ExcelUtil<>(XpCruiseCheckInRecordVO.class); util.exportExcel(response, list, "巡游打卡记录"); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpCruiseCheckInRecordVO.class, list); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("巡游打卡记录.xls", "utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { log.error("导出巡游打卡记录失败", e); } finally { try { if (outputStream != null) { outputStream.close(); } } catch (IOException e) { log.error("关闭输出流失败", e); } } return R.ok(); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRecordServiceImpl.java
@@ -40,27 +40,32 @@ public PageInfo<XpCruiseCheckInRecordVO> pageList(XpCruiseCheckInRecordQuery query) { PageInfo<XpCruiseCheckInRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<XpCruiseCheckInRecordVO> list = xpCruiseCheckInRecordMapper.selectCruiseCheckInRecordList(pageInfo, query); List<Long> ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList()); List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData(); Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity())); list = list.stream().map(record -> { XpOperationsUser user = userMap.get(record.getOperationsUserId()); if (user == null) return null; record.setOperationsUserId(user.getId()); record.setOperationsUserName(user.getNickName()); record.setPhoneNumber(user.getPhoneNumber()); if (StringUtils.isNotBlank(query.getOperationsUserName()) && !record.getOperationsUserName().contains(query.getOperationsUserName())) { return null; } if (StringUtils.isNotBlank(query.getPhoneNumber()) && !record.getPhoneNumber().contains(query.getPhoneNumber())) { return null; } return record; }) .filter(Objects::nonNull) .collect(Collectors.toList()); for (XpCruiseCheckInRecordVO xpCruiseCheckInRecordVO : list) { XpOperationsUser user = userMap.get(xpCruiseCheckInRecordVO.getOperationsUserId()); if (user == null) continue; xpCruiseCheckInRecordVO.setOperationsUserId(user.getId()); xpCruiseCheckInRecordVO.setOperationsUserName(user.getNickName()); xpCruiseCheckInRecordVO.setPhoneNumber(user.getPhoneNumber()); } list.removeIf(vo -> { if (StringUtils.isNotBlank(query.getOperationsUserName()) && !vo.getOperationsUserName().contains(query.getOperationsUserName())) { return true; } return StringUtils.isNotBlank(query.getPhoneNumber()) && !vo.getPhoneNumber().contains(query.getPhoneNumber()); }); pageInfo.setRecords(list); return pageInfo; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRecordVO.java
@@ -1,5 +1,6 @@ package com.xiaopeng.maintenance.vo; import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.xiaopeng.api.model.maintenance.XpCheckLocation; @@ -22,6 +23,7 @@ @ApiModelProperty(value = "规则id") private Long ruleId; @ApiModelProperty(value = "打卡规则名称") @Excel(name = "打卡规则名称", width = 20) private String ruleName; @ApiModelProperty(value = "(0=不循环,1=每天循环)") private Integer cyclicMode; @@ -38,7 +40,9 @@ @ApiModelProperty(value = "运维人员id") private Long operationsUserId; @ApiModelProperty(value = "运维人员姓名") @Excel(name = "运维人员", width = 20) private String operationsUserName; @Excel(name = "手机号", width = 20) @ApiModelProperty(value = "运维人员手机号") private String phoneNumber; @ApiModelProperty(value = "所属分队") @@ -58,6 +62,7 @@ private BigDecimal locationLatitude; @ApiModelProperty(value = "打卡点位名称") @Excel(name = "打卡点位", width = 20) private String locationAddress; @ApiModelProperty(value = "打卡点位范围") @@ -72,12 +77,15 @@ @ApiModelProperty(value = "打卡时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Excel(name = "打卡时间", width = 20) private LocalDateTime checkInTime; @ApiModelProperty(value = "打卡结果(1=正常打卡,2=迟到打卡,3=未打卡)") @Excel(name = "打卡状态", width= 20, replace = {"正常打卡_1", "迟到打卡_2", "未打卡_3"}) private Integer checkInResult; @ApiModelProperty(value = "现场情况(1=正常,2=拥堵)") @Excel(name = "巡游结果", width = 20,replace = {"正常_1", "拥堵_2"}) private Integer fieldSituation; @ApiModelProperty(value = "现场照片JSON数组") xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpCruiseCheckInRecordMapper.xml
@@ -69,12 +69,15 @@ <select id="selectCruiseCheckInRecordList" resultMap="CruiseCheckInRecordVOMap"> SELECT <include refid="CruiseCheckInRecordColumns"/> r.id, r.check_in_time, r.check_in_result, r.field_situation, cl.location_address, cr.name AS rule_name FROM xp_cruise_check_in_record r LEFT JOIN xp_cruise_check_in_rule_location rl ON r.cruise_check_in_rule_id = rl.cruise_check_in_rule_id AND r.check_location_id = rl.check_location_id AND rl.is_deleted = '0' LEFT JOIN xp_check_location cl ON r.check_location_id = cl.id AND cl.is_deleted = '0' LEFT JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' JOIN xp_check_location cl ON r.check_location_id = cl.id AND cl.is_deleted = '0' JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' WHERE r.is_deleted = '0' <if test="query.fieldSituation != null"> AND r.field_situation = #{query.fieldSituation} @@ -104,9 +107,9 @@ SELECT <include refid="CruiseCheckInRecordColumns"/> FROM xp_cruise_check_in_record r LEFT JOIN xp_cruise_check_in_rule_location rl ON r.cruise_check_in_rule_id = rl.cruise_check_in_rule_id AND r.check_location_id = rl.check_location_id AND rl.is_deleted = '0' LEFT JOIN xp_check_location cl ON r.check_location_id = cl.id AND cl.is_deleted = '0' LEFT JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' JOIN xp_cruise_check_in_rule_location rl ON r.cruise_check_in_rule_id = rl.cruise_check_in_rule_id AND r.check_location_id = rl.check_location_id JOIN xp_check_location cl ON r.check_location_id = cl.id AND cl.is_deleted = '0' JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' WHERE r.id = #{id} AND r.is_deleted = '0' </select> @@ -119,9 +122,9 @@ COUNT(CASE WHEN r.field_situation = 1 THEN 1 END) AS noTraffic, COUNT(CASE WHEN r.field_situation = 2 THEN 1 END) AS traffic FROM xp_cruise_check_in_record r LEFT JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' LEFT JOIN xp_fleet_operations fo ON r.operations_user_id = fo.operations_user_id LEFT JOIN xp_fleet f ON fo.fleet_id = f.id JOIN xp_cruise_check_in_rule cr ON r.cruise_check_in_rule_id = cr.id AND cr.is_deleted = '0' JOIN xp_fleet_operations fo ON r.operations_user_id = fo.operations_user_id JOIN xp_fleet f ON fo.fleet_id = f.id WHERE r.is_deleted = '0' AND r.check_in_time IS NOT NULL <if test="query.ruleName != null and query.ruleName != ''"> xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/TestMsgSchedule.java
@@ -16,7 +16,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @Component //@Component @Slf4j //public class TestMsgHandler implements BusinessMsgHandler{ public class TestMsgSchedule {