新疆后端项目

This commit is contained in:
DESKTOP-BLB5287\FP
2025-06-30 14:31:09 +08:00
commit 0e52aff1f1
2596 changed files with 261030 additions and 0 deletions
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>health-emergency</artifactId>
<groupId>com.renkang</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>health-emergency-biz</artifactId>
<dependencies>
<!--定时任务-->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-starter-job</artifactId>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-api</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-api</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,19 @@
package com.renkang.emergency.api;
/**
* @author Junqiang Zhu
*/
public interface RequestPrefix {
String BASE = "/api/emergency";
String RESOURCE = BASE + "/resource";
String ORDER = BASE + "/order";
String SEND_RECORD = ORDER + "/send/record";
String SCHEDULE = BASE + "/schedule";
String DISEASE = BASE + "/disease";
// 不鉴权路径
String API = "/api";
String ANON = API + "/anon/aed";
String AED = API + "/aed";
}
@@ -0,0 +1,38 @@
package com.renkang.emergency.api.controller;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.AedApiService;
import com.renkang.emergency.entity.AedLatest;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* aed组网不鉴权控制器
*
* @author Junqiang Zhu
* @date 2023-12-12 14:36
*/
@RequestMapping(RequestPrefix.ANON)
@RestController
public class AedAnonApiController {
@Autowired
private AedApiService aedApiService;
/**
* 最新数据推送
* @param aedLatest data
* @return string
*/
@PostMapping("latest-data")
public Result<String> latestData(@RequestBody AedLatest aedLatest) {
aedApiService.addAedLatest(aedLatest);
return Result.OK("success");
}
}
@@ -0,0 +1,47 @@
package com.renkang.emergency.api.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.AedApiService;
import com.renkang.emergency.bean.response.AedGeo;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-12-12 14:36
*/
@RequestMapping(RequestPrefix.AED)
@RestController
public class AedApiController {
@Autowired
private AedApiService aedApiService;
/**
* 附近的aed
*
* @param longitude 经度
* @param latitude 维度
* @param radiusRange 半径范围
* @return result
*/
@GetMapping("nearbyAed")
public Result<List<AedGeo>> nearbyAed(@RequestParam(required = false) BigDecimal longitude,
@RequestParam(required = false) BigDecimal latitude,
@RequestParam(defaultValue = "100000") Double radiusRange,
@RequestParam(required = false) Integer aedNum) {
List<AedGeo> aedGeos = aedApiService.nearbyAed(longitude, latitude, radiusRange, aedNum);
if (CollectionUtil.isEmpty(aedGeos)) {
return Result.OK("该位置附近暂无设备",aedGeos);
}
return Result.ok(aedGeos);
}
}
@@ -0,0 +1,121 @@
package com.renkang.emergency.api.controller;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.EmergencyApiService;
import com.renkang.emergency.bean.request.CallBack;
import com.renkang.emergency.bean.request.EmergencyCall;
import com.renkang.emergency.bean.request.SingleParam;
import com.renkang.emergency.bean.response.Call;
import com.renkang.emergency.bean.response.Stat;
import com.renkang.emergency.bean.response.StatSimple;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @author Junqiang Zhu
* @date 2023-04-24 17:47
*/
@RestController
@RequestMapping(RequestPrefix.BASE)
public class EmergencyApiController {
@Autowired
private EmergencyApiService emergencyApiService;
/**
* 应急呼叫
*
* @param emergencyCall data
* @return
*/
@PostMapping("/call")
public Result<String> call(@RequestBody @Validated EmergencyCall emergencyCall) {
return Result.ok(emergencyApiService.call(emergencyCall));
}
/**
* 获取值班人员
*
* @return 当前在线值班人员
*/
@GetMapping("/officerOnDuty")
public Result<Call> officerOnDuty() {
return Result.ok(emergencyApiService.officerOnDuty());
}
/**
* 呼叫回调
*
* @param callBack data
* @return
*/
@PostMapping("/call/back")
public Result<Boolean> callBack(@RequestBody @Validated CallBack callBack) {
return Result.ok(emergencyApiService.callBack(callBack));
}
/**
* 结束会话
*
* @param sessionId 会话id
* @return
*/
@PostMapping("/session/over")
public Result<Boolean> sessionOver(@RequestBody @Validated SingleParam<String> sessionId) {
return Result.ok(emergencyApiService.sessionOver(sessionId));
}
/**
* 数据统计
*
* @param personType 人员类型(0:操作人员 1: 专业人员)
* @return data
*/
@GetMapping("/stat")
public Result<Stat> stat(@RequestParam String personType) {
return Result.ok(emergencyApiService.stat(personType));
}
/**
* 操作人员数据统计
*/
@GetMapping("/statSimple")
public Result<StatSimple> statSimple() {
return Result.ok(emergencyApiService.statSimple());
}
@Operation(summary = "创建群聊-应急")
@GetMapping(value = "/createGroupMag")
public Result<Map<String, Object>> createGroupMag(@RequestParam("name") String name, @RequestParam("longitude") String longitude,
@RequestParam("latitude") String latitude,
@RequestParam(required = false) String type) {
return emergencyApiService.createGroupMag(name, longitude, latitude, type);
}
@Operation(summary = "创建群聊-干预")
@GetMapping(value = "/createGroupMagIntervene")
public Result<Map<String, Object>> createGroupMagIntervene(@RequestParam("name") String name, @RequestParam("longitude") String longitude,
@RequestParam("latitude") String latitude,
@RequestParam(required = false) String type) {
return emergencyApiService.createGroupMagIntervene(name, longitude, latitude,type);
}
@GetMapping(value = "/fixOrderStatus")
public Result<List<String>> fixOrderStatus() {
return Result.ok(emergencyApiService.fixOrderStatus());
}
}
@@ -0,0 +1,287 @@
package com.renkang.emergency.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.EmergencyOrderApiService;
import com.renkang.emergency.api.service.EmergencyResourceApiService;
import com.renkang.emergency.bean.request.ListSession;
import com.renkang.emergency.bean.request.OrderEvaluation;
import com.renkang.emergency.bean.request.SingleParam;
import com.renkang.emergency.bean.request.StationUpdateOrder;
import com.renkang.emergency.bean.response.InitUserOrder;
import com.renkang.emergency.bean.response.OrderThrough;
import com.renkang.emergency.bean.response.SessionOrderUser;
import com.renkang.emergency.entity.Order;
import com.renkang.emergency.entity.OrderDetail;
import com.renkang.emergency.entity.OrderSendRecord;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-04-24 17:47
*/
@RestController
@RequestMapping(RequestPrefix.ORDER)
public class EmergencyOrderApiController {
@Autowired
private EmergencyOrderApiService emergencyOrderApiService;
@Autowired
private EmergencyResourceApiService emergencyResourceApiService;
/**
* 发起人参与订单列表
*/
@GetMapping("/initUserOrderPage")
public Result<IPage<InitUserOrder>> initUserOrderPage(@RequestParam(value = "pageNo", defaultValue = "1") Long pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Long pageSize) {
Page<Order> page = new Page<>(pageNo, pageSize);
return Result.ok(emergencyOrderApiService.initUserOrderPage(page));
}
/**
* 应急小结
*/
@GetMapping("/orderThrough")
public Result<OrderThrough> orderThrough(@RequestParam @Validated @NotBlank(message = "id为空") String id) {
return Result.ok(emergencyOrderApiService.orderThrough(id));
}
/**
* 获取会话列表
*
* @param sessions 会话集合
* @param type 人员类型(操作/专业人员)
* @return result
*/
@PostMapping("listSession")
public Result<List<SessionOrderUser>> listSession(@RequestBody ListSession value) {
try {
return Result.OK(emergencyOrderApiService.listSession(value));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 订单列表
*
* @param orderType 订单类型 (-1:全部 0:进行中 3: 已完成)
* @param personType 人员类型 (0:操作人 1:专业人 3:发起人/救助人 4:驻场人)
* @return
*/
@GetMapping("/page")
public Result<IPage<Order>> page(@RequestParam(value = "pageNo", defaultValue = "1") Long pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Long pageSize,
@RequestParam("orderType") String orderType,
@RequestParam("personType") String personType) {
Page<Order> page = new Page<>(pageNo, pageSize);
return Result.ok(emergencyOrderApiService.page(page, orderType, personType));
}
/**
* 是否有正在进行的会话
*
* @return "" 或者 sessionId
*/
@GetMapping("/sessionNow")
public Result<String> sessionNow(@RequestParam String userId) {
return Result.ok(emergencyResourceApiService.sessionNow(userId));
}
/**
* 修改被救助人
*
* @param order 救助人信息
* @return result
*/
@PostMapping("/updateSalvageUser")
public Result<String> updateSalvageUser(@RequestBody Order order) {
try {
emergencyOrderApiService.updateSalvageUser(order);
return Result.OK("修改被救助人成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 应急单详情
*
* @param orderId 单子id
* @return
*/
@GetMapping("/detail")
public Result<OrderDetail> detail(@RequestParam String orderId) {
return Result.ok(emergencyOrderApiService.detail(orderId));
}
/**
* 拒绝派单
*/
@PostMapping("/rejectionOfOrder")
public Result<String> rejectionOfOrder(@RequestBody @Validated SingleParam<String> singleParam) {
try {
emergencyOrderApiService.rejectionOfOrder(singleParam);
return Result.OK("成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 补充小结
*/
@PostMapping("/fillSummary")
public Result<String> fillSummary(@RequestBody @Validated OrderDetail detail) {
try {
emergencyOrderApiService.fillSummary(detail);
return Result.OK("成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 驻场派单
*/
@PostMapping("/stationSendOrder")
public Result<String> stationSendOrder(@RequestBody Order order) {
try {
emergencyOrderApiService.stationSendOrder(order);
return Result.ok("派单成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 结束应急
*/
@PostMapping("/orderOver")
public Result<String> orderOver(@RequestBody Order order) {
try {
emergencyOrderApiService.orderOver(order);
return Result.ok("结束应急成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 补单
*/
@PostMapping("/replenishOrder")
public Result<String> replenishOrder(@RequestBody Order order) {
try {
emergencyOrderApiService.replenishOrder(order);
return Result.ok("补单成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 通过sessionId 获取订单详情
*/
@GetMapping("/getOrderBySessionId")
public Result<Order> getOrderBySessionId(@RequestParam String sessionId) {
try {
return Result.ok(emergencyOrderApiService.getOrderBySessionId(sessionId));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 获取订单详情通过订单id
*/
@GetMapping("/getOrderById")
public Result<Order> getOrderById(@RequestParam String id) {
try {
return Result.ok(emergencyOrderApiService.getOrderById(id));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 驻场人员 接单/拒单
* 1:已接单 2:已拒单)
*/
@PostMapping("/acceptOrRejectOrder")
public Result<String> acceptOrRejectOrder(@RequestBody @Validated StationUpdateOrder stationUpdateOrder) {
try {
emergencyOrderApiService.acceptOrRejectOrder(stationUpdateOrder);
return Result.OK("修改成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 驻场人员 派单列表
* orderStatus 是否接单(-1:全部 0:待处理 1:已接单 2:已拒单 3:已完成(已有别人接单))
*/
@GetMapping("/listOrderSend")
public Result<IPage<OrderSendRecord>> listOrderSend(@RequestParam(value = "pageNo", defaultValue = "1") Long pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Long pageSize,
@RequestParam("orderStatus") String orderStatus) {
Page<OrderSendRecord> page = new Page<>(pageNo, pageSize);
try {
return Result.OK(emergencyOrderApiService.pageOrderSend(page, orderStatus));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 评价
*/
@PostMapping("/evaluation")
public Result<String> evaluation(@RequestBody @Validated OrderEvaluation orderEvaluation) {
try {
emergencyOrderApiService.evaluation(orderEvaluation);
return Result.OK("评价成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 获取救助意见
*/
@GetMapping("/salvageOpinion")
public Result<String> salvageOpinion(@RequestParam String sessionId) {
return Result.OK(emergencyOrderApiService.salvageOpinion(sessionId));
}
/**
* 添加救助意见
*/
@PostMapping("/addSalvageOpinion")
public Result<String> addSalvageOpinion(@RequestBody Order order) {
try {
emergencyOrderApiService.addSalvageOpinion(order);
return Result.OK("添加成功");
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
}
@@ -0,0 +1,42 @@
package com.renkang.emergency.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.EmergencyOrderSendRecordApiService;
import com.renkang.emergency.entity.OrderSendRecord;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Junqiang Zhu
* @date 2023-04-24 17:47
*/
@RestController
@RequestMapping(RequestPrefix.SEND_RECORD)
public class EmergencyOrderSendRecordApiController {
@Autowired
private EmergencyOrderSendRecordApiService emergencyOrderSendRecordApiService;
/**
* 订单列表
*
* @param orderType 订单类型 (0:进行中 4: 已完成)
* @param personType 人员类型 (0:操作人 1:专业人 2: 救助人 3:发起人 4: 驻场人)
* @return
*/
@GetMapping("/page")
public Result<IPage<OrderSendRecord>> page(@RequestParam(value = "pageNo", defaultValue = "1") Long pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Long pageSize,
@RequestParam("orderId") String orderId) {
Page<OrderSendRecord> page = new Page<OrderSendRecord>(pageNo, pageSize);
return Result.ok(emergencyOrderSendRecordApiService.pageRecord(page, orderId));
}
}
@@ -0,0 +1,53 @@
package com.renkang.emergency.api.controller;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.EmergencyResourceApiService;
import com.renkang.emergency.bean.response.ResourceHome;
import com.renkang.emergency.entity.EmergencyResourceDO;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-04-24 17:47
*/
@RestController
@RequestMapping(RequestPrefix.RESOURCE)
public class EmergencyResourceApiController {
@Autowired
private EmergencyResourceApiService emergencyResourceApiService;
/**
* 获取首页数据
*
* @param type 资源类型
* @param longitude 经度
* @param latitude 维度
* @return result
*/
@GetMapping("/home")
public Result<ResourceHome> home(@RequestParam(required = false) String type,
@RequestParam(required = false) Double longitude,
@RequestParam(required = false) Double latitude) {
return Result.ok(emergencyResourceApiService.listResourceByType(type, longitude, latitude));
}
/**
* 查询主场医院列表
*
* @return
*/
@GetMapping("/selectStationHospitalList")
public Result<List<EmergencyResourceDO>> selectHospitalList() {
return emergencyResourceApiService.selectHospitalList();
}
}
@@ -0,0 +1,47 @@
package com.renkang.emergency.api.controller;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.EmergencyScheduleApiService;
import com.renkang.emergency.bean.response.ScheduleRecordShow;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 排班controller
*
* @author Junqiang Zhu
* @date 2023-05-25
*/
@RestController
@RequestMapping(RequestPrefix.SCHEDULE)
public class EmergencyScheduleApiController {
@Autowired
private EmergencyScheduleApiService emergencyScheduleApiService;
/**
* 年/月值班记录
*/
@GetMapping("/scheduleRecord")
public Result<ScheduleRecordShow> scheduleRecord(@RequestParam String year,
@RequestParam(required = false) String month,
@RequestParam(required = false) String userId) {
return Result.ok(emergencyScheduleApiService.scheduleRecord(year, month, userId));
}
/**
* 年/月值班 展示
*/
@GetMapping("/scheduleShow")
public Result<ScheduleRecordShow> scheduleShow(@RequestParam Integer year,
@RequestParam Integer month,
@RequestParam(required = false) String userId) {
return Result.ok(emergencyScheduleApiService.scheduleShow(year, month, userId));
}
}
@@ -0,0 +1,299 @@
package com.renkang.emergency.api.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.api.RequestPrefix;
import com.renkang.emergency.api.service.IEmergencySeriousDiseaseService;
import com.renkang.emergency.api.service.impl.EmergencyApiServiceImpl;
import com.renkang.emergency.bean.response.Call;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.EmergencySeriousDiseaseDO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.AgeCalculateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
@Tag(name = "大病就医")
@RestController
@RequestMapping(RequestPrefix.DISEASE)
@Slf4j
public class EmergencySeriousDiseaseApiController {
@Autowired
private IEmergencySeriousDiseaseService emergencySeriousDiseaseService;
@Autowired
private EmergencyApiServiceImpl emergencyApiServiceImpl;
@Transactional
@AutoLog(value = "预约看病")
@Operation(summary = "预约看病", description = "预约看病")
@PostMapping(value = "/appointmentSeeDoctor")
/*@LimitSubmit(key = "appointmentSeeDoctor:%s")*/
public Result<String> appointmentSeeDoctor(@RequestBody @Validated EmergencySeriousDisease emergencySeriousDisease) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//同一时间只能存在一个大病就医单
int count = emergencySeriousDiseaseService.selectEmergencyExist(sysUser.getId());
if (count > 0) {
return Result.error("当前已有大病就医预约,无法继续预约");
}
Date date = new Date();
if (date.getTime() >= emergencySeriousDisease.getDesireTime().getTime()) {
return Result.error("预约时间必须大于当前时间");
}
emergencySeriousDisease.setUserDepart(sysUser.getOrgCode());
emergencySeriousDisease.setUserId(sysUser.getId());
emergencySeriousDisease.setState("1");
emergencySeriousDisease.setIsFill(EmergencyConstants.ORDER_IS_FILL_0);
emergencySeriousDisease.setCreateTime(date);
emergencySeriousDisease.setReservationNo(String.valueOf(IdWorker.getId()));
emergencySeriousDisease.setRealname(sysUser.getRealname());
String idCard = sysUser.getIdCard();
if (!StringUtils.isEmpty(idCard)) {
emergencySeriousDisease.setAge(AgeCalculateUtil.countAge(idCard));
}
emergencySeriousDisease.setTelPhone(sysUser.getPhone());
emergencySeriousDisease.setSex(sysUser.getSex());
emergencySeriousDisease.setIdNo(idCard);
Call rs = emergencyApiServiceImpl.officerOnDuty();
if (rs == null || CollectionUtils.isEmpty(rs.getOperators())) {
return Result.error("没有接受方人员!");
}
String operatorsId = rs.getOperators().get(0).getUserId();
emergencySeriousDisease.setOperatorId(operatorsId);
emergencySeriousDisease.setCenterId(rs.getCenterId());
emergencySeriousDiseaseService.save(emergencySeriousDisease);
return Result.ok("预约成功");
}
@AutoLog(value = "预约看病详情")
@Operation(summary = "预约看病详情", description = "预约看病详情")
@GetMapping(value = "/selectEmergencySeriousDiseaseDOById")
public Result<EmergencySeriousDiseaseDO> selectEmergencySeriousDiseaseDOById(@RequestParam(name = "id", required = true) String id) {
LambdaQueryWrapper<EmergencySeriousDisease> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EmergencySeriousDisease::getId, id);
queryWrapper.eq(EmergencySeriousDisease::getStatus, 1);
queryWrapper.eq(EmergencySeriousDisease::getDelFlag, 0);
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getOne(queryWrapper);
if (emergencySeriousDisease == null) {
return Result.error("数据不存在");
}
EmergencySeriousDiseaseDO emergencySeriousDiseaseDO = new EmergencySeriousDiseaseDO();
BeanUtil.copyProperties(emergencySeriousDisease, emergencySeriousDiseaseDO);
emergencySeriousDiseaseDO.setNewState(emergencySeriousDisease.getState());
if (StringUtils.equals(emergencySeriousDisease.getState(), "6") || StringUtils.equals(emergencySeriousDisease.getState(), "7") ||
StringUtils.equals(emergencySeriousDisease.getState(), "8")) {
emergencySeriousDiseaseDO.setNewState("1");
}
if (StringUtils.equals(emergencySeriousDisease.getState(), "3") || StringUtils.equals(emergencySeriousDisease.getState(), "4")) {
emergencySeriousDiseaseDO.setNewState("3");
}
if (StringUtils.equals(emergencySeriousDisease.getState(), "5")) {
emergencySeriousDiseaseDO.setNewState("4");
}
return Result.ok(emergencySeriousDiseaseDO);
}
@Transactional
@AutoLog(value = "修改看病详情")
@Operation(summary = "修改看病详情", description = "修改看病详情")
@PostMapping(value = "/updateEmergencySeriousDiseaseDOById")
/*@LimitSubmit(key = "updateEmergencySeriousDiseaseDOById:%s")*/
public Result<String> updateEmergencySeriousDiseaseDOById(@RequestBody @Validated EmergencySeriousDisease emergencySeriousDisease) {
LambdaQueryWrapper<EmergencySeriousDisease> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EmergencySeriousDisease::getId, emergencySeriousDisease.getId());
queryWrapper.eq(EmergencySeriousDisease::getStatus, 1);
queryWrapper.eq(EmergencySeriousDisease::getDelFlag, 0);
EmergencySeriousDisease emergencySeriousDiseaseOnly = emergencySeriousDiseaseService.getOne(queryWrapper);
if (emergencySeriousDiseaseOnly == null) {
return Result.error("数据不存在");
}
String state = emergencySeriousDiseaseOnly.getState();
if (!StringUtils.equals(state, "1") && StringUtils.equals(state, "5")) {
return Result.ok("该预约暂时无法修改");
}
emergencySeriousDisease.setState("1");
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.ok("修改完成");
}
@Operation(summary = "预约看病列表", description = "预约看病列表")
@GetMapping(value = "/selectEmergencySeriousDiseaseList")
public Result<List<EmergencySeriousDiseaseDO>> selectEmergencySeriousDiseaseList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
QueryWrapper<EmergencySeriousDisease> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", sysUser.getId());
queryWrapper.orderByDesc("create_time");
Page<EmergencySeriousDisease> page = new Page<>(pageNo, 10);
IPage<EmergencySeriousDisease> pageList = emergencySeriousDiseaseService.page(page, queryWrapper);
List<EmergencySeriousDisease> list = pageList.getRecords();
List<EmergencySeriousDiseaseDO> res = Lists.newArrayList();
if (CollectionUtil.isNotEmpty(list)) {
if (CollectionUtil.isNotEmpty(list)) {
for (EmergencySeriousDisease emergencySeriousDisease : list) {
EmergencySeriousDiseaseDO aa = BeanUtil.toBean(emergencySeriousDisease, EmergencySeriousDiseaseDO.class);
res.add(aa);
}
}
}
return Result.ok(res);
}
/**
* 预约看病列表 根据状态
*
* @param pageNo
* @param pageSize
* @param state
* @return
*/
@Operation(summary = "预约看病列表 根据状态", description = "预约看病列表 根据状态")
@GetMapping(value = "/selectEmergencySeriousDiseaseListByState")
public Result<List<EmergencySeriousDiseaseDO>> selectEmergencySeriousDiseaseListByState(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "state") String state) {
List<EmergencySeriousDiseaseDO> list = emergencySeriousDiseaseService.selectEmergencySeriousDiseaseListByState(pageNo, pageSize, state);
return Result.ok(list);
}
@Operation(summary = "驻场人员接单", description = "驻场人员接单")
// @RequiresPermissions("emergency:emergency_serious_disease:acceptStation")
@GetMapping(value = "/acceptStation")
public Result<String> acceptStation(@RequestParam(name = "id", required = true) String id) {
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getById(id);
if (emergencySeriousDisease == null) {
return Result.OK("该数据不存在!");
}
String state = emergencySeriousDisease.getState();
if (!"2".equals(state)) {
return Result.OK("该订单暂时无法接单!");
}
emergencySeriousDisease.setAcceptStationTime(new Date());
emergencySeriousDisease.setState("3");
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.OK("派单成功!");
}
@Operation(summary = "驻场人员预约完成", description = "驻场人员预约完成")
// @RequiresPermissions("emergency:emergency_serious_disease:stationReservationFinish")
@GetMapping(value = "/stationReservationFinish")
public Result<String> stationReservationFinish(@RequestParam(name = "id", required = true) String id,
@RequestParam(name = "reservationTime", required = true) Date reservationTime) {
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getById(id);
if (emergencySeriousDisease == null) {
return Result.OK("该数据不存在!");
}
String state = emergencySeriousDisease.getState();
if (!"3".equals(state)) {
return Result.OK("该订单暂时无法预约完成!");
}
emergencySeriousDisease.setDesireFinishTime(new Date());
emergencySeriousDisease.setReservationTime(reservationTime);
emergencySeriousDisease.setState("4");
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.OK("派单成功!");
}
@Operation(summary = "驻场人员驳回", description = "驻场人员驳回")
// @RequiresPermissions("emergency:emergency_serious_disease:stationReject")
@GetMapping(value = "/stationReject")
public Result<String> stationReject(@RequestParam(name = "id", required = true) String id,
@RequestParam(name = "rejectionReason", required = true) String rejectionReason) {
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getById(id);
if (emergencySeriousDisease == null) {
return Result.OK("该数据不存在!");
}
String state = emergencySeriousDisease.getState();
if (!"2".equals(state)) {
return Result.OK("该订单暂时无法驳回!");
}
emergencySeriousDisease.setStationRejectionReason(rejectionReason);
emergencySeriousDisease.setStationRejectionTime(new Date());
emergencySeriousDisease.setState("7");
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.OK("驳回成功!");
}
@Operation(summary = "预约看病列表 超时处理", description = "预约看病列表 超时处理")
@GetMapping(value = "/expireEmergencySeriousDiseaseList")
public Result<String> expireEmergencySeriousDiseaseList() {
emergencySeriousDiseaseService.expireEmergencySeriousDiseaseList();
return Result.ok();
}
}
@@ -0,0 +1,33 @@
package com.renkang.emergency.api.controller;
import com.renkang.emergency.bean.request.ZiYunData;
import com.renkang.emergency.service.IZyAmbulanceDataService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Jiang Shunzhi
*/
@RestController
@RequestMapping("/api/ambulance")
@Tag(name = "救护车")
public class ZiYunController {
@Autowired
private IZyAmbulanceDataService ambulanceDataService;
@Operation(description = "救护车数据推送")
@PostMapping("/info/push")
@RequiresPermissions("emergency:ambulance:data:push")
public Result<Boolean> infoPush(@RequestBody ZiYunData data) {
return Result.ok(ambulanceDataService.infoPush(data));
}
}
@@ -0,0 +1,16 @@
package com.renkang.emergency.api.service;
import com.renkang.emergency.bean.response.AedGeo;
import com.renkang.emergency.entity.AedLatest;
import java.math.BigDecimal;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-12-12 15:54
*/
public interface AedApiService {
void addAedLatest(AedLatest aedLatest);
List<AedGeo> nearbyAed(BigDecimal longitude, BigDecimal latitude, Double radiusRange, Integer aedNum);
}
@@ -0,0 +1,37 @@
package com.renkang.emergency.api.service;
import com.renkang.emergency.bean.request.CallBack;
import com.renkang.emergency.bean.request.EmergencyCall;
import com.renkang.emergency.bean.request.SingleParam;
import com.renkang.emergency.bean.response.Call;
import com.renkang.emergency.bean.response.Stat;
import com.renkang.emergency.bean.response.StatSimple;
import org.jeecg.common.api.vo.Result;
import java.util.List;
import java.util.Map;
/**
* @author Junqiang Zhu
* @date 2023-04-26 10:47
*/
public interface EmergencyApiService {
String call(EmergencyCall emergencyCall);
boolean callBack(CallBack callBack);
boolean sessionOver(SingleParam<String> sessionId);
Stat stat(String personType);
Call officerOnDuty();
StatSimple statSimple();
Result<Map<String, Object>> createGroupMag(String name, String longitude, String latitude, String type);
Result<Map<String, Object>> createGroupMagIntervene(String name, String longitude, String latitude, String type);
List<String> fixOrderStatus();
}
@@ -0,0 +1,73 @@
package com.renkang.emergency.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.bean.request.ListSession;
import com.renkang.emergency.bean.request.OrderEvaluation;
import com.renkang.emergency.bean.request.SingleParam;
import com.renkang.emergency.bean.request.StationUpdateOrder;
import com.renkang.emergency.bean.response.InitUserOrder;
import com.renkang.emergency.bean.response.OrderThrough;
import com.renkang.emergency.bean.response.SessionOrderUser;
import com.renkang.emergency.entity.Order;
import com.renkang.emergency.entity.OrderDetail;
import com.renkang.emergency.entity.OrderSendRecord;
import com.renkang.emergency.entity.TblHelpCentorVo;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-04-27 10:34
*/
public interface EmergencyOrderApiService {
IPage<InitUserOrder> initUserOrderPage(Page<Order> page);
IPage<Order> page(Page<Order> page, String orderType, String personType);
/**
* 订单详情
*/
OrderDetail detail(String orderId);
/**
* 修改被救助人
*/
void updateSalvageUser(Order order);
/**
* 拒绝派单
*/
void rejectionOfOrder(SingleParam<String> singleParam);
/**
* 补充小结
*/
void fillSummary(OrderDetail detail);
void stationSendOrder(Order order);
void orderOver(Order order);
void replenishOrder(Order order);
Order getOrderBySessionId(String sessionId);
void acceptOrRejectOrder(StationUpdateOrder stationUpdateOrder);
IPage<OrderSendRecord> pageOrderSend(Page<OrderSendRecord> page, String orderStatus);
void evaluation(OrderEvaluation orderEvaluation);
String salvageOpinion(String sessionId);
void addSalvageOpinion(Order order);
List<SessionOrderUser> listSession(ListSession value);
OrderThrough orderThrough(String id);
Order getOrderById(String id);
List<TblHelpCentorVo> getSicknessTypeStatistic(String sex, String depart);
}
@@ -0,0 +1,13 @@
package com.renkang.emergency.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.OrderSendRecord;
/**
* @author Junqiang Zhu
* @date 2023-04-27 17:32
*/
public interface EmergencyOrderSendRecordApiService {
IPage<OrderSendRecord> pageRecord(Page<OrderSendRecord> page, String orderId);
}
@@ -0,0 +1,19 @@
package com.renkang.emergency.api.service;
import com.renkang.emergency.bean.response.ResourceHome;
import com.renkang.emergency.entity.EmergencyResourceDO;
import org.jeecg.common.api.vo.Result;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-04-25 13:07
*/
public interface EmergencyResourceApiService {
ResourceHome listResourceByType(String type, Double longitude, Double latitude);
String sessionNow(String userId);
Result<List<EmergencyResourceDO>> selectHospitalList();
}
@@ -0,0 +1,13 @@
package com.renkang.emergency.api.service;
import com.renkang.emergency.bean.response.ScheduleRecordShow;
/**
* @author Junqiang Zhu
* @date 2023-04-25 13:07
*/
public interface EmergencyScheduleApiService {
ScheduleRecordShow scheduleRecord(String year, String month, String userId);
ScheduleRecordShow scheduleShow(Integer year, Integer month, String userId);
}
@@ -0,0 +1,29 @@
package com.renkang.emergency.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.EmergencySeriousDiseaseDO;
import org.jeecg.common.api.vo.Result;
import java.util.List;
/**
* @Description: 大病就医
* @Author: jeecg-boot
* @Date: 2023-04-23
* @Version: V1.0
*/
public interface IEmergencySeriousDiseaseService extends IService<EmergencySeriousDisease> {
Result<String> appointmentSeeDoctor(EmergencySeriousDiseaseDO emergencySeriousDiseaseDO);
IPage<EmergencySeriousDisease> pageList(Page<EmergencySeriousDisease> page, EmergencySeriousDisease emergencySeriousDisease);
List<EmergencySeriousDiseaseDO> selectEmergencySeriousDiseaseListByState(Integer pageNo, Integer pageSize, String state);
void expireEmergencySeriousDiseaseList();
int selectEmergencyExist(String userId);
}
@@ -0,0 +1,331 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.renkang.emergency.api.service.AedApiService;
import com.renkang.emergency.bean.response.AedGeo;
import com.renkang.emergency.entity.Aed;
import com.renkang.emergency.entity.AedLatest;
import com.renkang.emergency.entity.AedWarnInfo;
import com.renkang.emergency.enums.AedEnumUtil;
import com.renkang.emergency.manager.AedManger;
import com.renkang.emergency.mapper.AedLatestMapper;
import com.renkang.emergency.mapper.AedMapper;
import com.renkang.emergency.service.IAedWarnInfoService;
import com.renkang.emergency.util.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.global.GlobalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* @author Junqiang Zhu
* @date 2023-12-12 15:54
*/
@Service
@Slf4j
public class AedApiServiceImpl implements AedApiService {
@Autowired
private AedLatestMapper aedLatestMapper;
@Autowired
private AsyncTaskExecutor taskExecutor;
@Autowired
private AedManger aedManger;
@Autowired
private AedMapper aedMapper;
@Autowired
private IAedWarnInfoService aedWarnInfoService;
@Override
public void addAedLatest(AedLatest latest) {
// 最新数据
aedLatestMapper.insert(latest);
// 修改aed基础信息
taskExecutor.execute(() -> updateAedInfo(latest));
// 异常数据处理
taskExecutor.execute(() -> handleWarnInfo(latest));
}
private void updateAedInfo(AedLatest latest) {
if (StrUtil.isBlank(latest.getAedModel()) || StrUtil.isBlank(latest.getAedNo())) {
return;
}
LambdaUpdateWrapper<Aed> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Aed::getHostModel, latest.getAedModel())
.eq(Aed::getHostSerialNum, latest.getAedNo());
// 电压
if (StrUtil.isNotBlank(latest.getRouterVoltage())) {
updateWrapper.set(Aed::getBatteryVoltage, latest.getRouterVoltage());
}
// 有效期
if (ObjectUtil.isNotNull(latest.getPadExpiration())) {
updateWrapper.set(Aed::getElectrodeSheetValidTime, latest.getPadExpiration());
}
// 路由器型号
if (StrUtil.isNotBlank(latest.getRouterModel())) {
updateWrapper.set(Aed::getRouterModel, latest.getRouterModel());
}
// 路由器序列号
if (StrUtil.isNotBlank(latest.getRouterSerialNo())) {
updateWrapper.set(Aed::getRouterSerialNum, latest.getRouterSerialNo());
}
// 自检查状态
handleStatusCheck(latest, updateWrapper);
// 电极片状态
handleStatusElectrodeSheet(latest, updateWrapper);
// 电池状态
handleStatusBattery(latest, updateWrapper);
// 路由状态
handleStatusRouter(latest, updateWrapper);
// 修改数据
aedMapper.update(null, updateWrapper);
}
private void handleStatusRouter(AedLatest latest, LambdaUpdateWrapper<Aed> updateWrapper) {
if (latest == null || StrUtil.isBlank(latest.getRouterVoltage())) {
return;
}
try {
BigDecimal data = new BigDecimal(latest.getRouterVoltage());
if (data.compareTo(BigDecimal.valueOf(6.5)) < 0) {
updateWrapper.set(Aed::getRouterStatus, AedEnumUtil.RouterPowerEnum.LOW.ordinal());
} else {
updateWrapper.set(Aed::getRouterStatus, AedEnumUtil.RouterPowerEnum.OK.ordinal());
}
} catch (Exception e) {
log.error("路由电压状态解析错误", e);
}
}
private void handleStatusBattery(AedLatest latest, LambdaUpdateWrapper<Aed> updateWrapper) {
if (latest == null || StrUtil.isBlank(latest.getBatteryPower())) {
return;
}
String result = latest.getBatteryPower();
try {
String[] split = result.split("%");
BigDecimal data = new BigDecimal(split[0]);
if (data.compareTo(BigDecimal.valueOf(5)) < 0) {
updateWrapper.set(Aed::getBatteryStatus, AedEnumUtil.BatteryPowerEnum.CHANGE.ordinal());
} else if (data.compareTo(BigDecimal.valueOf(25)) < 0) {
updateWrapper.set(Aed::getBatteryStatus, AedEnumUtil.BatteryPowerEnum.LOW.ordinal());
} else {
updateWrapper.set(Aed::getBatteryStatus, AedEnumUtil.BatteryPowerEnum.OK.ordinal());
}
} catch (Exception e) {
log.error("aed组网数据推送解析错误{电量状态解析}", e);
}
}
private void handleStatusElectrodeSheet(AedLatest latest, LambdaUpdateWrapper<Aed> updateWrapper) {
if (latest == null || ObjectUtil.isNull(latest.getPadExpiration())) {
return;
}
Date padExpiration = latest.getPadExpiration();
int date = DateUtils.numOfMonthsThatDiffer(padExpiration, new Date());
if (date <= 0) {
updateWrapper.set(Aed::getElectrodeSheetStatus, AedEnumUtil.ExpiredPowerEnum.EXPIRED.ordinal());
} else if (date == 1) {
updateWrapper.set(Aed::getElectrodeSheetStatus, AedEnumUtil.ExpiredPowerEnum.APPROACH.ordinal());
} else {
updateWrapper.set(Aed::getElectrodeSheetStatus, AedEnumUtil.ExpiredPowerEnum.OK.ordinal());
}
}
private void handleStatusCheck(AedLatest latest, LambdaUpdateWrapper<Aed> updateWrapper) {
if (latest == null || StrUtil.isBlank(latest.getAedStatus())) {
return;
}
String aedStatus = latest.getAedStatus();
if ("00000000".equals(aedStatus)) {
updateWrapper.set(Aed::getCheckStatus, AedEnumUtil.CheckEnum.OK.ordinal());
} else if ("00010001".equals(aedStatus)) {
updateWrapper.set(Aed::getCheckStatus, AedEnumUtil.CheckEnum.CANNOT_FIND.ordinal());
} else if ("00010002".equals(aedStatus)) {
updateWrapper.set(Aed::getCheckStatus, AedEnumUtil.CheckEnum.CANNOT_CONNECT.ordinal());
} else if ("00010005".equals(aedStatus)) {
updateWrapper.set(Aed::getCheckStatus, AedEnumUtil.CheckEnum.CANNOT_GET.ordinal());
}
}
private void handleWarnInfo(AedLatest aedLatest) {
List<AedWarnInfo> list = new ArrayList<>();
// 电池电量
handleBatteryPower(list, aedLatest);
// 路由电量
handleRoutingPower(list, aedLatest);
// 过期
handleIsExpired(list, aedLatest);
// 自检结果
handleCheck(list, aedLatest);
// 电极片
handleElectrodeSheet(list, aedLatest);
// 温度
handleTemp(list, aedLatest);
// 数据插入
if (CollectionUtil.isNotEmpty(list)) {
aedWarnInfoService.saveBatch(list);
}
}
private void handleTemp(List<AedWarnInfo> list, AedLatest latest) {
}
private void handleElectrodeSheet(List<AedWarnInfo> list, AedLatest latest) {
}
private void handleCheck(List<AedWarnInfo> list, AedLatest latest) {
if (latest == null || list == null) {
return;
}
String module = String.valueOf(AedEnumUtil.WarnTypeEnum.CHECK.ordinal());
AedWarnInfo aedWarnInfo = get(latest, module);
aedWarnInfo.setValue(latest.getAedStatus());
if (StrUtil.isBlank(latest.getAedStatus())) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.CheckEnum.CANNOT_FIND.ordinal()));
aedWarnInfo.setWarnDesc(String.format("{%s}设备自检失败,请检查", new Date().getTime()));
list.add(aedWarnInfo);
return;
}
// 没有找到
if ("00010001".equals(latest.getAedStatus())) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.CheckEnum.CANNOT_FIND.ordinal()));
aedWarnInfo.setWarnDesc(String.format("{%s}没有找到AED", new Date().getTime()));
list.add(aedWarnInfo);
}
// 无法连接
if ("00010002".equals(latest.getAedStatus())) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.CheckEnum.CANNOT_CONNECT.ordinal()));
aedWarnInfo.setWarnDesc(String.format("{%s}无法连接AED", new Date().getTime()));
list.add(aedWarnInfo);
}
// 无法获取自检信息
if ("00010005".equals(latest.getAedStatus())) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.CheckEnum.CANNOT_GET.ordinal()));
aedWarnInfo.setWarnDesc(String.format("{%s}无法获取自检信息", new Date().getTime()));
list.add(aedWarnInfo);
}
}
private void handleIsExpired(List<AedWarnInfo> list, AedLatest latest) {
if (latest == null || list == null) {
return;
}
if (ObjectUtil.isNull(latest.getPadExpiration())) {
return;
}
String module = String.valueOf(AedEnumUtil.WarnTypeEnum.EXPIRED.ordinal());
AedWarnInfo aedWarnInfo = get(latest, module);
int month = DateUtils.numOfMonthsThatDiffer(latest.getPadExpiration(), new Date());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
String format = simpleDateFormat.format(latest.getPadExpiration());
aedWarnInfo.setValue(format);
// 已过期
if (month <= 0) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.ExpiredPowerEnum.EXPIRED.ordinal()));
list.add(aedWarnInfo);
}
// 快过期
if (month == 1) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.ExpiredPowerEnum.APPROACH.ordinal()));
list.add(aedWarnInfo);
}
}
private void handleRoutingPower(List<AedWarnInfo> list, AedLatest latest) {
if (latest == null || list == null) {
return;
}
if (StrUtil.isBlank(latest.getRouterVoltage())) {
return;
}
String module = String.valueOf(AedEnumUtil.WarnTypeEnum.ROUTER.ordinal());
AedWarnInfo aedWarnInfo = get(latest, module);
aedWarnInfo.setValue(latest.getRouterVoltage());
try {
BigDecimal data = new BigDecimal(latest.getRouterVoltage());
if (data.compareTo(BigDecimal.valueOf(6.5)) < 0) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.RouterPowerEnum.LOW.ordinal()));
aedWarnInfo.setWarnDesc("路由器电压低于6.5v");
list.add(aedWarnInfo);
}
} catch (Exception e) {
log.error("aed组网数据推送解析错误{路由电压}", e);
}
}
private void handleBatteryPower(List<AedWarnInfo> list, AedLatest latest) {
if (latest == null || list == null) {
return;
}
if (StrUtil.isBlank(latest.getBatteryPower())) {
return;
}
String module = String.valueOf(AedEnumUtil.WarnTypeEnum.BATTERY.ordinal());
AedWarnInfo aedWarnInfo = get(latest, module);
aedWarnInfo.setValue(latest.getBatteryPower());
try {
String[] split = latest.getBatteryPower().split("%");
BigDecimal data = new BigDecimal(split[0]);
if (data.compareTo(BigDecimal.valueOf(5)) < 0) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.BatteryPowerEnum.CHANGE.ordinal()));
list.add(aedWarnInfo);
} else if (data.compareTo(BigDecimal.valueOf(25)) < 0) {
aedWarnInfo.setType(String.valueOf(AedEnumUtil.BatteryPowerEnum.LOW.ordinal()));
list.add(aedWarnInfo);
}
} catch (Exception e) {
log.error("aed组网数据推送解析错误{电量}", e);
}
}
private AedWarnInfo get(AedLatest latest, String module) {
AedWarnInfo aedWarnInfo = new AedWarnInfo();
aedWarnInfo.setAedModel(latest.getAedModel());
aedWarnInfo.setAedNo(latest.getAedNo());
aedWarnInfo.setLatestId(latest.getId());
aedWarnInfo.setModule(module);
aedWarnInfo.setWarnStatus("0");
aedWarnInfo.setCreateTime(new Date());
return aedWarnInfo;
}
@Override
public List<AedGeo> nearbyAed(BigDecimal longitude, BigDecimal latitude, Double radiusRange, Integer aedNum) {
if (longitude != null && latitude != null) {
return aedManger.geoSearch(longitude, latitude, radiusRange, aedNum, "");
}
return aedAll();
}
private List<AedGeo> aedAll() {
LambdaQueryWrapper<Aed> queryWrapper = new LambdaQueryWrapper<>();
List<Aed> list = aedMapper.selectList(queryWrapper);
if (CollectionUtil.isEmpty(list)) {
return Collections.emptyList();
}
List<AedGeo> result = new ArrayList<>();
GlobalUtils.convertList(list, result, AedGeo.class);
return result;
}
}
@@ -0,0 +1,945 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.renkang.emergency.api.service.EmergencyApiService;
import com.renkang.emergency.bean.request.CallBack;
import com.renkang.emergency.bean.request.EmergencyCall;
import com.renkang.emergency.bean.request.EmergencySocket;
import com.renkang.emergency.bean.request.SingleParam;
import com.renkang.emergency.bean.response.*;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.*;
import com.renkang.emergency.manager.EmergencyCloudManager;
import com.renkang.emergency.mapper.*;
import com.renkang.emergency.service.IEmergencyCenterService;
import com.renkang.emergency.service.ISysNotifySmsPhoneService;
import com.renkang.emergency.service.ITblAmbulanceGpsService;
import com.renkang.emergency.util.CodeConstant;
import com.renkang.emergency.util.DateUtils;
import com.renkang.emergency.websocket.WebSocket;
import com.renkang.im.api.IMHelloApi;
import com.renkang.im.entity.ConSessionRequestDO;
import com.renkang.im.entity.ImGroupMsgTextReqDO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.bean.request.ListUser;
import org.jeecg.common.api.dto.message.BusTemplateMessageDTO;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.system.vo.LoginUserNew;
import org.jeecg.common.system.vo.SysDepartModel;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.parboiled.common.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* @author Junqiang Zhu
* @date 2023-04-25 13:07
*/
@Slf4j
@Service("emergencyApiService")
public class EmergencyApiServiceImpl implements EmergencyApiService {
private static final Logger logger = LoggerFactory.getLogger(EmergencyApiServiceImpl.class);
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderInterveneMapper orderInterveneMapper;
@Autowired
private EmergencyCloudManager emergencyCloudManager;
@Autowired
private ScheduleCustomMapper scheduleCustomMapper;
@Autowired
private ScheduleDefaultMapper scheduleDefaultMapper;
@Autowired
private EmergencySeriousDiseaseMapper emergencySeriousDiseaseMapper;
@Autowired
private EmergencyResourceApiServiceImpl emergencyResourceApiServiceImpl;
@Autowired
private ITblAmbulanceGpsService tblAmbulanceGpsService;
@Resource
private IEmergencyCenterService centerService;
@Autowired
private IMHelloApi iMHelloApi;
@Autowired
private ISysBaseAPI sysBaseAPI;
@Autowired
private ISysCache sysCache;
@Autowired
private WebSocket webSocket;
@Resource
private ISysNotifySmsPhoneService sysNotifySmsPhoneService;
@Autowired
private AsyncTaskExecutor asyncTaskExecutor;
@Autowired
private EmergencyCenterMapper emergencyCenterMapper;
@Autowired
private EmergencySchedulesNewItemMapper emergencySchedulesNewItemMapper;
@Autowired
private LargeScreenImpl largeScreen;
@Override
public String call(EmergencyCall emergencyCall) {
// 订单
return insertOrder(emergencyCall);
}
public String callIntervene(EmergencyCall emergencyCall, String type) {
// 订单
return insertOrderIntervene(emergencyCall.getCallType(), emergencyCall.getResourceId(),
emergencyCall.getLongitude(), emergencyCall.getLatitude(), type);
}
@Override
public boolean callBack(CallBack callBack) {
// 获取用户集合
Map<String, LoginUserNew> map = emergencyCloudManager.listUser(Arrays.asList(callBack.getOperationUserId(), callBack.getMajorUserId()));
LoginUserNew operationUser = map.get(callBack.getOperationUserId());
LoginUserNew majorUser = map.get(callBack.getMajorUserId());
Date now = new Date();
Order order = new Order();
order.setId(callBack.getOrderId());
order.setSessionId(callBack.getSessionId());
order.setSessionNow(true);
order.setOperationUserId(callBack.getOperationUserId());
order.setOperationUserName(handleNull(operationUser).getRealname());
order.setOperationUserSex(ifNullReturnEmpty(handleNull(operationUser).getSex()));
order.setOperationUserMobile(handleNull(operationUser).getPhone());
order.setOperationUserAvatar(handleNull(operationUser).getAvatar());
order.setOperationResponseTime(now);
order.setMajorUserId(callBack.getMajorUserId());
order.setMajorUserName(handleNull(majorUser).getRealname());
order.setMajorUserSex(ifNullReturnEmpty(handleNull(majorUser).getSex()));
order.setMajorUserMobile(handleNull(majorUser).getPhone());
order.setMajorUserAvatar(handleNull(majorUser).getAvatar());
order.setMajorResponseTime(now);
order.setOrderStatus(EmergencyConstants.ORDER_STATUS_1_NEW);
order.setIsDispatch(EmergencyConstants.ORDER_SEND_STATUS_1);
// 应急中心id
order.setCenterId(callBack.getCenterId());
int result = orderMapper.updateById(order);
return result == 1;
}
private void sendInitMsg(String groupId, String callType, String userId) {
asyncTaskExecutor.execute(() -> {
try {
List<LoginUserNew> loginUserNews = sysBaseAPI.listUserByIds(new ListUser(Collections.singletonList(userId)));
LoginUserNew majorUser = loginUserNews.isEmpty() ? null : loginUserNews.get(0);
ImGroupMsgTextReqDO req = new ImGroupMsgTextReqDO();
req.setGroupId(groupId);
req.setFromUserId("administrator");
req.setContent(
handleNull(majorUser).getRealname() +
"(" + handleNull(majorUser).getPhone() + ")" +
getCallName(callType) +
"已发起,请相关人员及时响应"
);
iMHelloApi.sendGroupMsgTextNew(req);
} catch (Exception e) {
log.error("发送消息失败", e);
}
});
}
private String getCallName(String callType) {
switch (callType) {
case "0":
return "120求助";
case "1":
return "APP应急求助";
case "2":
return "急救联动";
default:
return "应急求助";
}
}
@Override
public boolean sessionOver(SingleParam<String> sessionId) {
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Order::getSessionId, sessionId.getParam())
.set(Order::getSessionNow, EmergencyConstants.SESSION_NOW_0)
.set(Order::getSessionOverTime, new Date());
int update = orderMapper.update(null, updateWrapper);
return update == 1;
}
@Override
public Stat stat(String personType) {
LoginUser loginUser = GlobalUtils.getLoginUser();
String userId = loginUser.getId();
Stat stat = new Stat();
stat.setCompletionRate(getCompletionRate(userId, personType));
stat.setTotalNum(getTotalNum(userId, personType));
stat.setDutyTeamNum(getDutyTeamNum());
stat.setTimelinessRate(getTimelinessRate(userId));
return stat;
}
@Override
public Call officerOnDuty() {
CenterUser onDutyUser = findOnDutyUser(false);
Call onDutyPerson = convertUser(onDutyUser);
List<EmergencyUser> operation = findIdleUsers(onDutyPerson.getOperators(), EmergencyConstants.OPERATION_NEW);
List<EmergencyUser> major = findIdleUsers(onDutyPerson.getMajors(), EmergencyConstants.MAJOR_NEW);
onDutyPerson.setMajors(major);
onDutyPerson.setOperators(operation);
return onDutyPerson;
}
private CenterUser findOnDutyUser(boolean isDefaultCenter) {
EmergencyCenter emergencyCenter = getEmergencyCenter(isDefaultCenter);
CenterUser centerUser = new CenterUser();
if (emergencyCenter == null) {
centerUser.setCenterId(null);
centerUser.setCenterUsers(Collections.emptyList());
return centerUser;
}
String today = DateUtil.today();
List<EmergencyUser> emergencyUsers = emergencySchedulesNewItemMapper.onDutyUser(emergencyCenter.getId(), today);
if (CollUtil.isNotEmpty(emergencyUsers)) {
centerUser.setCenterId(emergencyCenter.getId());
centerUser.setCenterUsers(emergencyUsers);
return centerUser;
}
// 默认中心也没有数据 返回空
if (emergencyCenter.getDefaultCenter()) {
centerUser.setCenterId(null);
centerUser.setCenterUsers(Collections.emptyList());
return centerUser;
}
return findOnDutyUser(true);
}
private Call convertUser(CenterUser onDutyUser) {
Call call = new Call();
if (onDutyUser == null || CollUtil.isEmpty(onDutyUser.getCenterUsers())) {
call.setOperators(Collections.emptyList());
call.setMajors(Collections.emptyList());
return call;
}
List<EmergencyUser> list = onDutyUser.getCenterUsers();
List<EmergencyUser> operations = list.stream().filter(f -> EmergencyConstants.OPERATION_NEW.equals(f.getUserType())).collect(Collectors.toList());
List<EmergencyUser> majors = list.stream().filter(f -> EmergencyConstants.MAJOR_NEW.equals(f.getUserType())).collect(Collectors.toList());
call.setOperators(operations);
call.setMajors(majors);
call.setCenterId(onDutyUser.getCenterId());
return call;
}
/**
* 获取当前登录用户可使用的中心
*
* @param isDefaultCenter 是否拉取默认中心
* @return 中心id
*/
private EmergencyCenter getEmergencyCenter(boolean isDefaultCenter) {
LambdaQueryWrapper<EmergencyCenter> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(EmergencyCenter::getId,
EmergencyCenter::getServiceScope,
EmergencyCenter::getDefaultCenter)
.eq(EmergencyCenter::getStatus, 0); // 0:开启 1:关闭
LoginUser loginUser = GlobalUtils.getLoginUser();
String orgCode = loginUser.getOrgCode();
if (StrUtil.isBlank(orgCode) || isDefaultCenter) {
queryWrapper.eq(EmergencyCenter::getDefaultCenter, true);
}
// 所有的应急中心
List<EmergencyCenter> emergencyCenters = emergencyCenterMapper.selectList(queryWrapper);
if (StrUtil.isBlank(orgCode) || isDefaultCenter) {
if (CollUtil.isEmpty(emergencyCenters)) {
return null;
} else {
return emergencyCenters.get(0);
}
}
List<EmergencyCenter> collect = emergencyCenters.stream()
.peek(center -> {
if (StrUtil.isNotBlank(center.getServiceScope())) {
try {
String[] split = center.getServiceScope().split(",");
center.setServiceScopeList(Arrays.asList(split));
} catch (Exception e) {
center.setServiceScopeList(Collections.emptyList());
}
}
})
.filter(center -> center.getServiceScopeList().stream().anyMatch(orgCode::startsWith))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)) {
return collect.get(0);
}
// 默认中心用作兜底
List<EmergencyCenter> defaultCenter = emergencyCenters.stream()
.filter(EmergencyCenter::getDefaultCenter)
.collect(Collectors.toList());
if (CollUtil.isEmpty(defaultCenter)) {
return null;
}
return defaultCenter.get(0);
}
@Override
public StatSimple statSimple() {
LoginUser loginUser = GlobalUtils.getLoginUser();
String userId = loginUser.getId();
StatSimple simple = new StatSimple();
simple.setEmeNum(getEmeResNum(userId));
simple.setEmeResRate(getEmeResRate(userId));
simple.setSeriousNum(getSeriousNum(userId));
simple.setSeriousRate(getSeriousRate(userId));
return simple;
}
private Integer getEmeResNum(String userId) {
if (StrUtil.isBlank(userId)) {
return 0;
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getSessionNow, true)
.eq(Order::getOperationUserId, userId)
.eq(Order::getStatus, CommonConstant.STATUS_1)
.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
Long aLong = orderMapper.selectCount(queryWrapper);
return aLong.intValue();
}
private BigDecimal getEmeResRate(String userId) {
if (StrUtil.isBlank(userId)) {
return BigDecimal.ZERO;
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getOperationUserId, userId)
.eq(Order::getStatus, CommonConstant.STATUS_1)
.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
List<Order> orders = orderMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(orders)) {
return BigDecimal.ZERO;
}
long count = orders.stream().filter(order -> {
// 响应时间小于发起时间两分钟
return DateUtils.ltFixedMinute(order.getCreateTime(), order.getOperationResponseTime(), 2);
}).count();
return BigDecimal.valueOf(count)
.divide(BigDecimal.valueOf(orders.size()), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
}
private BigDecimal getSeriousRate(String userId) {
if (StrUtil.isBlank(userId)) {
return BigDecimal.ZERO;
}
LambdaQueryWrapper<EmergencySeriousDisease> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(EmergencySeriousDisease::getId, EmergencySeriousDisease::getState)
.eq(EmergencySeriousDisease::getOperatorId, userId)
.eq(EmergencySeriousDisease::getStatus, CommonConstant.STATUS_1)
.eq(EmergencySeriousDisease::getDelFlag, CommonConstant.DEL_FLAG_0);
List<EmergencySeriousDisease> list = emergencySeriousDiseaseMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(list)) {
return BigDecimal.ZERO;
}
int total = list.size();
//1未派单 2已派单 3已接单 4已预约 5已完成 6操作人员驳回 7驻场人员驳回 8 超时未接单
long wait = list.parallelStream().filter(f -> "1".equals(f.getState())).count();
return BigDecimal.valueOf(wait)
.divide(BigDecimal.valueOf(total), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
}
private Integer getSeriousNum(String userId) {
if (StrUtil.isBlank(userId)) {
return 0;
}
LambdaQueryWrapper<EmergencySeriousDisease> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EmergencySeriousDisease::getOperatorId, userId)
.eq(EmergencySeriousDisease::getStatus, CommonConstant.STATUS_1)
.eq(EmergencySeriousDisease::getDelFlag, CommonConstant.DEL_FLAG_0)
//1未派单 2已派单 3已接单 4已预约 5已完成 6操作人员驳回 7驻场人员驳回 8 超时未接单
.in(EmergencySeriousDisease::getState, Arrays.asList("1", "7", "8"));
return emergencySeriousDiseaseMapper.selectCount(queryWrapper).intValue();
}
private BigDecimal getTimelinessRate(String userId) {
// 总次数
int totalNum = getTotalNum(null, null);
if (totalNum == 0) {
return BigDecimal.ZERO;
}
int num = 0;
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getMajorUserId, userId);
List<Order> orders = orderMapper.selectList(queryWrapper);
for (Order order : orders) {
Date majorResponseTime = order.getMajorResponseTime();
if (ObjectUtil.isNull(majorResponseTime)) {
continue;
}
boolean b = DateUtils.ltFixedMinute(order.getCreateTime(), order.getMajorResponseTime(), 5);
if (b) {
num++;
}
}
return BigDecimal.valueOf(num)
.divide(BigDecimal.valueOf(totalNum), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
}
private Integer getDutyTeamNum() {
Call onDutyPerson = getOnDutyPerson();
if (ObjectUtil.isNull(onDutyPerson)) {
return 0;
}
return Math.min(onDutyPerson.getMajors().size(), onDutyPerson.getOperators().size());
}
private Integer getTotalNum(String userId, String userType) {
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getStatus, CommonConstant.STATUS_1).eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
if (EmergencyConstants.OPERATION.equals(userType)) {
if (StrUtil.isNotBlank(userId)) {
queryWrapper.eq(Order::getOperationUserId, userId);
}
}
if (EmergencyConstants.MAJOR.equals(userType)) {
if (StrUtil.isNotBlank(userId)) {
queryWrapper.eq(Order::getMajorUserId, userId);
}
}
Long num = orderMapper.selectCount(queryWrapper);
if (ObjectUtil.isNull(num)) {
return 0;
}
return num.intValue();
}
private BigDecimal getCompletionRate(String userId, String personType) {
// 应急发生次数
int total = getTotalNum(null, null);
// 应急回复次数
Integer reply = getTotalNum(userId, personType);
if (total == 0) {
return BigDecimal.ZERO;
}
return BigDecimal.valueOf(reply)
.divide(BigDecimal.valueOf(total), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
}
private LoginUserNew handleNull(LoginUserNew loginUserNew) {
if (ObjectUtil.isNull(loginUserNew)) {
loginUserNew = new LoginUserNew();
}
return loginUserNew;
}
private String ifNullReturnEmpty(Integer integer) {
if (ObjectUtil.isNull(integer)) {
return StrUtil.EMPTY;
}
return integer.toString();
}
private Call getOnDutyPerson() {
// 获取自定义排班信息
Call custom = getScheduleCustom();
// 获取默认排班信息
getScheduleDefault(CollectionUtils.isEmpty(custom.getOperators()), (CollectionUtils.isEmpty(custom.getMajors())), custom);
return custom;
}
private List<EmergencyUser> findIdleUsers(List<EmergencyUser> users, String userType) {
if (CollectionUtils.isEmpty(users)) {
return Collections.emptyList();
}
List<EmergencyUser> result = new ArrayList<>();
// 操作人员
if (EmergencyConstants.OPERATION_NEW.equals(userType)) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
List<EmergencyUser> list = orderMapper.officerOnDutyJoinSessionInfoByOP(dateStr);
if (CollectionUtils.isEmpty(list)) {
return users;
}
result = checkSessionUser(users, list);
}
// 专业人员
if (EmergencyConstants.MAJOR_NEW.equals(userType)) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
List<EmergencyUser> list = orderMapper.officerOnDutyJoinSessionInfoByMajor(dateStr);
if (CollectionUtils.isEmpty(list)) {
return users;
}
result = checkSessionUser(users, list);
}
// 排序
return result.stream().sorted(Comparator.comparingInt(EmergencyUser::getNum)).collect(Collectors.toList());
}
/**
* @param users 值班人员
* @param sessionInfos 正在会话的值班人员
* @return 可以参与会话的人员
*/
private List<EmergencyUser> checkSessionUser(List<EmergencyUser> users, List<EmergencyUser> sessionInfos) {
List<EmergencyUser> result = new ArrayList<>();
for (EmergencyUser user : users) {
int flag = 0;
for (EmergencyUser sessionUser : sessionInfos) {
if (sessionUser.getUserId().equals(user.getUserId())) {
user.setNum(sessionUser.getNum());
flag++;
}
}
if (flag == 0) {
result.add(user);
}
}
if (CollectionUtils.isEmpty(result)) {
return users;
} else {
return result;
}
}
private void getScheduleDefault(boolean getOperator, boolean getMajors, Call custom) {
Date now = new Date();
int week = DateUtils.weekDay(now);
int amOrPm = DateUtils.amOrPm(now);
// 默认排班操作人员
if (getOperator) {
LambdaQueryWrapper<ScheduleDefault> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ScheduleDefault::getWeek, week)
.eq(ScheduleDefault::getType, amOrPm)
.eq(ScheduleDefault::getUserType, EmergencyConstants.OPERATION);
List<ScheduleDefault> scheduleDefaults = scheduleDefaultMapper.selectList(queryWrapper);
convertDefault(scheduleDefaults, custom.getOperators());
}
// 默认排班专业人员
if (getMajors) {
LambdaQueryWrapper<ScheduleDefault> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ScheduleDefault::getWeek, week)
.eq(ScheduleDefault::getType, amOrPm)
.eq(ScheduleDefault::getUserType, EmergencyConstants.MAJOR);
List<ScheduleDefault> scheduleDefaults = scheduleDefaultMapper.selectList(queryWrapper);
convertDefault(scheduleDefaults, custom.getMajors());
}
}
private Call getScheduleCustom() {
int amOrPm = DateUtils.amOrPm(new Date());
// 操作人员list
LambdaQueryWrapper<ScheduleCustom> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ScheduleCustom::getScheduleTime, DateUtil.today())
.eq(ScheduleCustom::getType, String.valueOf(amOrPm))
.eq(ScheduleCustom::getUserType, EmergencyConstants.OPERATION);
List<ScheduleCustom> operations = scheduleCustomMapper.selectList(queryWrapper);
// 专业人员
LambdaQueryWrapper<ScheduleCustom> majorWrapper = new LambdaQueryWrapper<>();
majorWrapper.eq(ScheduleCustom::getScheduleTime, DateUtil.today())
.eq(ScheduleCustom::getType, String.valueOf(amOrPm))
.eq(ScheduleCustom::getUserType, EmergencyConstants.MAJOR);
List<ScheduleCustom> majors = scheduleCustomMapper.selectList(majorWrapper);
// convert
List<EmergencyUser> operationUser = new ArrayList<>();
List<EmergencyUser> majorUser = new ArrayList<>();
convertCustom(operations, operationUser);
convertCustom(majors, majorUser);
// return
Call custom = new Call();
custom.setOperators(operationUser);
custom.setMajors(majorUser);
return custom;
}
private void convertCustom(List<ScheduleCustom> list, List<EmergencyUser> emergencyUsers) {
if (CollectionUtils.isEmpty(list)) {
return;
}
list.forEach(scheduleCustom -> {
EmergencyUser user = new EmergencyUser();
BeanUtil.copyProperties(scheduleCustom, user);
emergencyUsers.add(user);
});
}
private void convertDefault(List<ScheduleDefault> list, List<EmergencyUser> emergencyUsers) {
if (CollectionUtils.isEmpty(list)) {
return;
}
list.forEach(scheduleCustom -> {
EmergencyUser user = new EmergencyUser();
BeanUtil.copyProperties(scheduleCustom, user);
emergencyUsers.add(user);
});
}
private String insertOrder(EmergencyCall emergencyCall) {
LoginUser loginUser = GlobalUtils.getLoginUser();
Order order = new Order();
order.setInitiatorType(emergencyCall.getCallType());
order.setIsFill(EmergencyConstants.ORDER_IS_FILL_0);
order.setResourceId(emergencyCall.getResourceId());
// 发起人
order.setInitiatorUserId(loginUser.getId());
order.setInitiatorUserSex(String.valueOf(loginUser.getSex()));
order.setInitiatorUserName(loginUser.getRealname());
order.setInitiatorUserMobile(loginUser.getPhone());
order.setInitiatorUserIdCard(loginUser.getIdCard());
if (ObjectUtil.isNotNull(emergencyCall.getLongitude())) {
order.setInitiatorLongitude(BigDecimal.valueOf(emergencyCall.getLongitude()));
}
if (ObjectUtil.isNotNull(emergencyCall.getLatitude())) {
order.setInitiatorLatitude(BigDecimal.valueOf(emergencyCall.getLatitude()));
}
order.setInitiatorUserDepart(loginUser.getOrgCode());
order.setInitiatorUserAvatar(loginUser.getAvatar());
// 救助人
order.setSalvageUserId(loginUser.getId());
order.setSalvageUserSex(String.valueOf(loginUser.getSex()));
order.setSalvageUserName(loginUser.getRealname());
order.setSalvageUserMobile(loginUser.getPhone());
order.setSalvageUserIdCard(loginUser.getIdCard());
order.setSalvageUserDepart(loginUser.getOrgCode());
order.setSalvageUserAvatar(loginUser.getAvatar());
// 如果是120 插入应急中心
if (StrUtil.isBlank(emergencyCall.getCenterId()) && EmergencyConstants.CALL_TYPE_0.equals(emergencyCall.getCallType())) {
Call call = officerOnDuty();
order.setCenterId(call.getCenterId());
}
orderMapper.insert(order);
// 大屏推送及发送短信
EmergencySocket socket = new EmergencySocket();
socket.setType(emergencyCall.getCallType());
socket.setCenterId(emergencyCall.getCenterId());
socket.setOrgCode(loginUser.getOrgCode());
largeScreen.orderPush(socket, emergencyCall.getLongitude(), emergencyCall.getLatitude(),order.getId());
return order.getId();
}
private String insertOrderIntervene(String callType, String resourceId, Double longitude, Double latitude, String type) {
LoginUser loginUser = GlobalUtils.getLoginUser();
OrderIntervene order = new OrderIntervene();
order.setInitiatorType(callType);
order.setIsFill(EmergencyConstants.ORDER_IS_FILL_0);
order.setResourceId(resourceId);
order.setType(type);
// 发起人
order.setInitiatorUserId(loginUser.getId());
order.setInitiatorUserSex(String.valueOf(loginUser.getSex()));
order.setInitiatorUserName(loginUser.getRealname());
order.setInitiatorUserMobile(loginUser.getPhone());
order.setInitiatorUserIdCard(loginUser.getIdCard());
if (ObjectUtil.isNotNull(longitude)) {
order.setInitiatorLongitude(BigDecimal.valueOf(longitude));
}
if (ObjectUtil.isNotNull(latitude)) {
order.setInitiatorLatitude(BigDecimal.valueOf(latitude));
}
order.setInitiatorUserDepart(loginUser.getOrgCode());
order.setInitiatorUserAvatar(loginUser.getAvatar());
// 救助人
order.setSalvageUserId(loginUser.getId());
order.setSalvageUserSex(String.valueOf(loginUser.getSex()));
order.setSalvageUserName(loginUser.getRealname());
order.setSalvageUserMobile(loginUser.getPhone());
order.setSalvageUserIdCard(loginUser.getIdCard());
order.setSalvageUserDepart(loginUser.getOrgCode());
order.setSalvageUserAvatar(loginUser.getAvatar());
orderInterveneMapper.insert(order);
return order.getId();
}
@Override
public Result<Map<String, Object>> createGroupMag(String name, String longitude, String latitude, String type) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Order order = emergencyResourceApiServiceImpl.sessionNowSession(sysUser.getId());
List<String> userList = new ArrayList<>(2);
if (order != null) {
Map res = new HashMap<>();
res.put("userId", sysUser.getId());
res.put("groupId", order.getSessionId());
res.put("tfNew", "0");
userList.add(order.getOperationUserId());
userList.add(order.getMajorUserId());
res.put("member", userList);
res.put("id", order.getId());
return Result.OK(res);
}
// 当前值班人员
Call rs = this.officerOnDuty();
if (rs == null || CollectionUtils.isEmpty(rs.getMajors()) || CollectionUtils.isEmpty(rs.getOperators())) {
return Result.error("没有接受方人员!");
}
String majorsId = rs.getMajors().get(0).getUserId();
String operatorsId = rs.getOperators().get(0).getUserId();
List<String> yesIds = new ArrayList<>();
yesIds.add(sysUser.getId());
yesIds.add(majorsId);
yesIds.add(operatorsId);
ConSessionRequestDO conSessionRequestDO = selectConSessionRequestDO(yesIds, "", name);
conSessionRequestDO.setUserId(sysUser.getId());
Result<Map<String, Object>> imrs = iMHelloApi.creatGroupMagNew(conSessionRequestDO);
boolean isSuccess = imrs.isSuccess();
if (!isSuccess) {
return Result.error("应急单创建失败");
}
String sessionId = (String) imrs.getResult().get("groupId");
String callType = StrUtil.isNotBlank(type) ? "2" : "1";
sendInitMsg(sessionId, callType, sysUser.getId());
EmergencyCall emergencyCall = new EmergencyCall();
emergencyCall.setCallType(callType);
emergencyCall.setLongitude(Double.valueOf(longitude));
emergencyCall.setLatitude(Double.valueOf(latitude));
emergencyCall.setCenterId(rs.getCenterId());
String orderId = this.call(emergencyCall);
CallBack callBack = new CallBack();
callBack.setOrderId(orderId);
callBack.setMajorUserId(majorsId);
callBack.setOperationUserId(operatorsId);
callBack.setSessionId(sessionId);
callBack.setCenterId(rs.getCenterId());
this.callBack(callBack);
userList.add(operatorsId);
userList.add(majorsId);
imrs.getResult().put("member", userList);
imrs.getResult().put("tfNew", "1");
imrs.getResult().put("id", orderId);
return imrs;
}
@Override
public Result<Map<String, Object>> createGroupMagIntervene(String name, String longitude, String latitude, String type) {
// 干预每次发起都是创建新的应急单
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Call call = this.officerOnDuty();
if (call == null || CollectionUtils.isEmpty(call.getMajors()) || CollectionUtils.isEmpty(call.getOperators())) {
return Result.error("没有接受方人员!");
}
String majorsId = call.getMajors().get(0).getUserId();
String operatorsId = call.getOperators().get(0).getUserId();
List<String> yesIds = new ArrayList<>();
yesIds.add(sysUser.getId());
yesIds.add(majorsId);
yesIds.add(operatorsId);
ConSessionRequestDO conSessionRequestDO = this.selectConSessionRequestDO(yesIds, "", name);
conSessionRequestDO.setUserId(sysUser.getId());
Result<Map<String, Object>> imrs = iMHelloApi.creatGroupMagNew(conSessionRequestDO);
boolean isSuccess = imrs.isSuccess();
if (!isSuccess) {
return Result.error("应急单创建失败");
}
String sessionId = (String) imrs.getResult().get("groupId");
sendInitMsg(sessionId, "3", sysUser.getId());
EmergencyCall emergencyCall = new EmergencyCall();
emergencyCall.setCallType("1");
emergencyCall.setLongitude(Double.valueOf(longitude));
emergencyCall.setLatitude(Double.valueOf(latitude));
String bb = this.callIntervene(emergencyCall, type);
CallBack callBack = new CallBack();
callBack.setOrderId(bb);
callBack.setMajorUserId(majorsId);
callBack.setOperationUserId(operatorsId);
callBack.setSessionId(sessionId);
callBack.setCenterId(call.getCenterId());
this.callBackIntervene(callBack);
List<String> userList = new ArrayList<>(2);
userList.add(operatorsId);
userList.add(majorsId);
imrs.getResult().put("member", userList);
imrs.getResult().put("tfNew", "1");
imrs.getResult().put("id", bb);
return imrs;
}
private boolean callBackIntervene(CallBack callBack) {
// 获取用户集合
Map<String, LoginUserNew> map = emergencyCloudManager.listUser(Arrays.asList(callBack.getOperationUserId(), callBack.getMajorUserId()));
LoginUserNew operationUser = map.get(callBack.getOperationUserId());
LoginUserNew majorUser = map.get(callBack.getMajorUserId());
Date now = new Date();
OrderIntervene order = new OrderIntervene();
order.setId(callBack.getOrderId());
order.setSessionId(callBack.getSessionId());
order.setSessionNow(true);
order.setOperationUserId(callBack.getOperationUserId());
order.setOperationUserName(handleNull(operationUser).getRealname());
order.setOperationUserSex(ifNullReturnEmpty(handleNull(operationUser).getSex()));
order.setOperationUserMobile(handleNull(operationUser).getPhone());
order.setOperationUserAvatar(handleNull(operationUser).getAvatar());
order.setOperationResponseTime(now);
order.setMajorUserId(callBack.getMajorUserId());
order.setMajorUserName(handleNull(majorUser).getRealname());
order.setMajorUserSex(ifNullReturnEmpty(handleNull(majorUser).getSex()));
order.setMajorUserMobile(handleNull(majorUser).getPhone());
order.setMajorUserAvatar(handleNull(majorUser).getAvatar());
order.setMajorResponseTime(now);
order.setOrderStatus(EmergencyConstants.ORDER_STATUS_1_NEW);
order.setIsDispatch(EmergencyConstants.ORDER_SEND_STATUS_1);
order.setCenterId(callBack.getCenterId());
int result = orderInterveneMapper.updateById(order);
return result == 1;
}
public ConSessionRequestDO selectConSessionRequestDO(List<String> userIds, String doctorId, String name) {
ListUser listUser = new ListUser();
listUser.setUserIds(userIds);
List<LoginUserNew> loginUser = sysBaseAPI.listUserByIds(listUser);
ConSessionRequestDO conSessionRequestDO = new ConSessionRequestDO();
conSessionRequestDO.setAccountList(loginUser);
conSessionRequestDO.setName(name);
if (StringUtils.isNotEmpty(doctorId)) {
CompletableFuture<LoginUserNew> future = CompletableFuture.supplyAsync(() -> {
return selectUserByAccount(doctorId);
});
LoginUserNew toAccount = future.join();
if (toAccount != null) {
loginUser.add(toAccount);
}
}
return conSessionRequestDO;
}
public LoginUserNew selectUserByAccount(String userId) {
List<LoginUserNew> loginUser = sysBaseAPI.listUserByIds(new ListUser(Collections.singletonList(userId)));
if (CollectionUtils.isNotEmpty(loginUser)) {
return loginUser.get(0);
}
return null;
}
@Override
public List<String> fixOrderStatus() {
LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(Order.class)
.ne(Order::getOrderStatus, EmergencyConstants.ORDER_STATUS_5_NEW);
List<Order> orders = orderMapper.selectList(wrapper);
return orders.parallelStream().peek(order -> {
try {
ImGroupMsgTextReqDO req = new ImGroupMsgTextReqDO();
req.setGroupId(order.getSessionId());
req.setFromUserId("administrator");
req.setContent("系统提示:该应急工单未结束,请操作人员及时处理");
iMHelloApi.sendGroupMsgTextNew(req);
} catch (Exception e) {
log.error("发送消息失败", e);
}
}).map(Order::getId).collect(Collectors.toList());
}
}
@@ -0,0 +1,867 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.api.service.EmergencyOrderApiService;
import com.renkang.emergency.bean.request.ListSession;
import com.renkang.emergency.bean.request.OrderEvaluation;
import com.renkang.emergency.bean.request.SingleParam;
import com.renkang.emergency.bean.request.StationUpdateOrder;
import com.renkang.emergency.bean.response.*;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Order;
import com.renkang.emergency.entity.OrderDetail;
import com.renkang.emergency.entity.OrderSendRecord;
import com.renkang.emergency.entity.TblHelpCentorVo;
import com.renkang.emergency.manager.EmergencyCacheManager;
import com.renkang.emergency.mapper.OrderDetailMapper;
import com.renkang.emergency.mapper.OrderMapper;
import com.renkang.emergency.mapper.OrderSendRecordMapper;
import com.renkang.emergency.service.IOrderDetailService;
import com.renkang.emergency.service.IOrderService;
import com.renkang.im.api.IMHelloApi;
import com.renkang.im.entity.ImGroupMsgTextReqDO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
* @author Junqiang Zhu
* @date 2023-04-27 10:35
*/
@Service("emergencyOrderApiService")
@Slf4j
public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private IOrderService orderService;
@Autowired
private OrderDetailMapper orderDetailMapper;
@Autowired
private EmergencyCacheManager emergencyCacheManager;
@Autowired
private IOrderDetailService orderDetailService;
@Autowired
private OrderSendRecordMapper orderSendRecordMapper;
@Autowired
private IMHelloApi imHelloApi;
@Autowired
private ISysCache sysCache;
@Override
public IPage<InitUserOrder> initUserOrderPage(Page<Order> page) {
String userId = GlobalUtils.getLoginUser().getId();
LambdaQueryWrapper<Order> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
queryWrapper.select(Order::getId, Order::getInitiatorUserId,
Order::getInitiatorUserName, Order::getCreateTime,
Order::getSendOrderHospital, Order::getStationBusiness,
Order::getOrderStatus, Order::getSessionId)
.eq(Order::getInitiatorUserId, userId)
.orderByDesc(Order::getCreateTime);
Page<Order> orderPage = orderMapper.selectPage(page, queryWrapper);
Page<InitUserOrder> result = new Page<>();
if (ObjectUtil.isNull(orderPage) || CollectionUtils.isEmpty(orderPage.getRecords())) {
return result;
}
List<InitUserOrder> list = new ArrayList<>();
GlobalUtils.copyPageDataToTarget(orderPage, result);
GlobalUtils.convertList(orderPage.getRecords(), list, InitUserOrder.class);
result.setRecords(list);
return result;
}
/**
* @param orderType 订单类型 (0:进行中 3: 已完成)
* @param personType 人员类型 (0:操作人 1:专业人 3:发起人/救助人 4:驻场人)
* @return result
*/
@Override
public IPage<Order> page(Page<Order> page, String orderType, String personType) {
List<String> orderStatus = getOrderStatus(orderType, personType);
if (CollectionUtils.isEmpty(orderStatus)) {
return new Page<>();
}
LambdaQueryWrapper<Order> queryWrapper = getQueryWrapper(personType, orderStatus);
return listOrderByType(page, queryWrapper);
// IPage<OrderSimple> simpleLetterPage = handleOrders(orderPage);
// GlobalUtils.copyPageDataToTarget(orderPage, simpleLetterPage);
//
// return simpleLetterPage;
}
@Override
public OrderDetail detail(String orderId) {
return orderDetailMapper.selectById(orderId);
}
@Override
public void updateSalvageUser(Order order) {
if (ObjectUtil.isNull(order)) {
throw new RuntimeException("数据为空");
}
if (StrUtil.isBlank(order.getId())) {
throw new RuntimeException("应急单id为空");
}
if (StrUtil.isBlank(order.getSalvageUserId())) {
throw new RuntimeException("救助人为空");
}
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Order::getId, order.getId())
.set(Order::getSalvageUserId, order.getSalvageUserId())
.set(Order::getSalvageUserName, order.getSalvageUserName())
.set(Order::getSalvageUserSex, order.getSalvageUserSex())
.set(Order::getSalvageUserMobile, order.getSalvageUserMobile())
.set(Order::getSalvageUserIdCard, order.getSalvageUserIdCard())
.set(Order::getSalvageUserDepart, order.getSalvageUserDepart())
.set(Order::getSalvageUserAvatar, order.getSalvageUserAvatar())
.set(Order::getUpdateTime, new Date());
orderMapper.update(null, updateWrapper);
}
@Override
public void rejectionOfOrder(SingleParam<String> singleParam) {
if (ObjectUtil.isNull(singleParam) || StrUtil.isBlank(singleParam.getParam())) {
throw new RuntimeException("参数缺失");
}
// 查找订单
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getId, singleParam.getParam());
boolean exists = orderMapper.exists(queryWrapper);
if (!exists) {
throw new RuntimeException("该订单不存在");
}
// 修改订单
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Order::getId, singleParam.getParam())
.set(Order::getIsDispatch, EmergencyConstants.ORDER_SEND_STATUS_1);
orderMapper.update(null, updateWrapper);
}
@Override
public void fillSummary(OrderDetail detail) {
if (StrUtil.isBlank(detail.getId())) {
throw new RuntimeException("未知订单");
}
String orderId = detail.getId();
boolean existOrder = orderDetailService.ifDoesNotExistInsertOrderDetail(orderId);
if (!existOrder) {
throw new RuntimeException("未知订单");
}
OrderDetail result = new OrderDetail();
result.setId(orderId);
// 事件经过
result.setOrderThrough(detail.getOrderThrough());
// 事件结果
result.setOrderResult(detail.getOrderResult());
// 病情记录
result.setOrderRecord(detail.getOrderRecord());
orderDetailMapper.updateById(result);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void stationSendOrder(Order order) {
if (StrUtil.isBlank(order.getId())) {
throw new RuntimeException("未知订单");
}
if (StrUtil.isBlank(order.getStationUserId())) {
throw new RuntimeException("未选择驻场人员");
}
if (StrUtil.isBlank(order.getStationBusiness())) {
throw new RuntimeException("未选择派单业务类型");
}
Order result = orderService.getOrderById(order.getId());
if (result == null) {
throw new RuntimeException("未知订单");
}
if (EmergencyConstants.ORDER_STATUS_5_NEW.equals(result.getOrderStatus())) {
throw new RuntimeException("订单已结束");
}
boolean existOrderSendRecord = existOrderSendRecord(order.getId(), order.getStationUserId());
if (existOrderSendRecord) {
// 产品要求 不管有没有人接单都可以再次配单
// throw new RuntimeException("已有人接单,无需重新派单...");
}
// 新增派单记录
Date now = new Date();
OrderSendRecord record = new OrderSendRecord();
record.setOrderId(order.getId());
record.setStationUserId(order.getStationUserId());
record.setStationUserSex(order.getStationUserSex());
record.setStationUserName(order.getStationUserName());
record.setStationBusiness(order.getStationBusiness());
record.setStationUserDepart(order.getStationUserDepart());
record.setSendOrderHospital(order.getSendOrderHospital());
record.setTransferOrderTime(now);
// 默认接单
record.setAccept(EmergencyConstants.SEND_ORDER_ACCEPT_1);
orderSendRecordMapper.insert(record);
// 修改订单信息
Order update = new Order();
update.setId(order.getId());
update.setOrderStatus(EmergencyConstants.ORDER_STATUS_2_NEW);
// todo 现在没有驻场人员端 所以默认派单的时候已接单
update.setIsDispatch(EmergencyConstants.ORDER_SEND_STATUS_4);
update.setOperationSendOrderTime(new Date());
update.setStationUserId(order.getStationUserId());
update.setStationUserName(order.getStationUserName());
update.setStationUserSex(order.getStationUserSex());
update.setStationUserMobile(order.getStationUserMobile());
update.setStationUserAvatar(order.getStationUserAvatar());
update.setSendOrderHospital(order.getSendOrderHospital());
update.setStationBusiness(order.getStationBusiness());
update.setStationResponseTime(now);
orderMapper.updateById(update);
}
@Override
public void orderOver(Order order) {
if (StrUtil.isBlank(order.getId())) {
throw new RuntimeException("未知订单");
}
Order existOrder = orderService.getById(order.getId());
if (ObjectUtil.isNull(existOrder)) {
throw new RuntimeException("未知订单");
}
if (EmergencyConstants.ORDER_STATUS_5_NEW.equals(existOrder.getOrderStatus())) {
throw new RuntimeException("应急单已结束,无需重复操作");
}
Order update = new Order();
update.setId(order.getId());
update.setOrderStatus(EmergencyConstants.ORDER_STATUS_5_NEW);
update.setIsDispatch(EmergencyConstants.ORDER_SEND_STATUS_5);
update.setOrderOverTime(new Date());
update.setSessionNow(false);
orderMapper.updateById(update);
// 给im发消息
sendImMsg(existOrder.getSessionId());
}
private void sendImMsg(String sessionId) {
if (StrUtil.isBlank(sessionId)) {
return;
}
imHelloApi.sendGroupMsg(getMsgBody(sessionId));
}
private ImGroupMsgTextReqDO getMsgBody(String sessionId) {
ImGroupMsgTextReqDO im = new ImGroupMsgTextReqDO();
im.setGroupId(sessionId);
im.setFromUserId("administrator");
im.setContent(getMsgJson());
return im;
}
private String getMsgJson() {
SendIm sendIm = new SendIm();
/** 1: 应急单*/
sendIm.setType(1);
sendIm.setTitle("应急单");
sendIm.setContent("该应急单已结束");
return JSONObject.toJSON(sendIm).toString();
}
// 补单
@Override
@Transactional(rollbackFor = Exception.class)
public void replenishOrder(Order order) {
if (ObjectUtil.isNull(order)) {
throw new RuntimeException("空参");
}
if (StrUtil.isBlank(order.getInitiatorType())) {
throw new RuntimeException("未选择发起类型(120/应急就医)");
}
if (StrUtil.isBlank(order.getId())) {
insertReplenishOrder(order);
} else {
updateReplenishOrder(order);
}
}
@Override
public Order getOrderBySessionId(String sessionId) {
if (StrUtil.isBlank(sessionId)) {
throw new RuntimeException("未知会话");
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getSessionId, sessionId)
.eq(Order::getStatus, CommonConstant.STATUS_1)
.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
Order order = orderMapper.selectOne(queryWrapper);
if (ObjectUtil.isNull(order)) {
return order;
}
// 派单记录
order.setOrderSendRecordList(listOrderSendRecord(order.getId()));
handleUserDepart(order);
handleOrderDetail(order);
return order;
}
private void handleOrderDetail(Order order) {
if (ObjectUtil.isNull(order) || StrUtil.isBlank(order.getId())) {
return;
}
LambdaQueryWrapper<OrderDetail> lambdaQueryWrapper = GlobalUtils.getLambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderDetail::getId, order.getId());
OrderDetail orderDetail = orderDetailMapper.selectOne(lambdaQueryWrapper);
order.setOrderDetail(orderDetail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void acceptOrRejectOrder(StationUpdateOrder stationUpdateOrder) {
LoginUser loginUser = GlobalUtils.getLoginUser();
// 校验订单
boolean existOrder = orderService.existOrder(stationUpdateOrder.getOrderId());
if (!existOrder) {
throw new RuntimeException("未知订单");
}
LambdaQueryWrapper<OrderSendRecord> lambdaQueryWrapper = GlobalUtils.getLambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderSendRecord::getOrderId, stationUpdateOrder.getOrderId());
List<OrderSendRecord> list = orderSendRecordMapper.selectList(lambdaQueryWrapper);
if (CollectionUtils.isEmpty(list)) {
throw new RuntimeException("订单异常,没有派单记录");
}
LambdaUpdateWrapper<OrderSendRecord> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(OrderSendRecord::getStationUserId, loginUser.getId())
.eq(OrderSendRecord::getOrderId, stationUpdateOrder.getOrderId())
.set(OrderSendRecord::getAccept, stationUpdateOrder.getOrderStatus())
.set(OrderSendRecord::getRefuseCause, stationUpdateOrder.getCause())
.set(OrderSendRecord::getMemo, stationUpdateOrder.getMemo())
.set(OrderSendRecord::getTransferOrderTime, new Date());
// 接单
LambdaUpdateWrapper<Order> orderUpdateWrapper = new LambdaUpdateWrapper<>();
if (EmergencyConstants.SEND_ORDER_ACCEPT_1.equals(stationUpdateOrder.getOrderStatus())) {
orderUpdateWrapper.eq(Order::getId, stationUpdateOrder.getOrderId())
.set(Order::getStationUserId, loginUser.getId())
.set(Order::getStationUserSex, loginUser.getSex())
.set(Order::getStationUserName, loginUser.getRealname())
.set(Order::getStationUserDepart, loginUser.getOrgCode())
.set(Order::getStationUserAvatar, loginUser.getAvatar())
.set(Order::getStationResponseTime, new Date())
.set(Order::getSendOrderHospital, stationUpdateOrder.getHospital())
.set(Order::getStationBusiness, stationUpdateOrder.getBusiness())
.set(Order::getOrderStatus, EmergencyConstants.ORDER_STATUS_4_NEW)
.set(Order::getIsDispatch, EmergencyConstants.ORDER_SEND_STATUS_4);
orderMapper.update(null, orderUpdateWrapper);
// 修改其他派单记录为已完成
LambdaUpdateWrapper<OrderSendRecord> orderSendRecordWrapper = new LambdaUpdateWrapper<>();
orderSendRecordWrapper.eq(OrderSendRecord::getOrderId, stationUpdateOrder.getOrderId())
.ne(OrderSendRecord::getStationUserId, loginUser.getId())
.set(OrderSendRecord::getAccept, EmergencyConstants.SEND_ORDER_ACCEPT_3);
orderSendRecordMapper.update(null, orderSendRecordWrapper);
} else {
// 拒单 修改应急单为待审核
orderUpdateWrapper.eq(Order::getId, stationUpdateOrder.getOrderId())
.set(Order::getOrderStatus, EmergencyConstants.ORDER_STATUS_3_NEW)
.set(Order::getIsDispatch, EmergencyConstants.ORDER_SEND_STATUS_3);
orderMapper.update(null, orderUpdateWrapper);
}
orderSendRecordMapper.update(null, updateWrapper);
}
@Override
public IPage<OrderSendRecord> pageOrderSend(Page<OrderSendRecord> page, String orderStatus) {
if (StrUtil.isBlank(orderStatus)) {
throw new RuntimeException("未知订单状态");
}
LoginUser loginUser = GlobalUtils.getLoginUser();
LambdaQueryWrapper<OrderSendRecord> lambdaQueryWrapper = GlobalUtils.getLambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderSendRecord::getStationUserId, loginUser.getId());
// 全部订单
if (!"-1".equals(orderStatus)) {
lambdaQueryWrapper.eq(OrderSendRecord::getAccept, orderStatus);
}
Page<OrderSendRecord> orderSendRecordPage = orderSendRecordMapper.selectPage(page, lambdaQueryWrapper);
if (ObjectUtil.isNull(orderSendRecordPage) || CollectionUtils.isEmpty(orderSendRecordPage.getRecords())) {
return orderSendRecordPage;
}
orderSendRecordPage.getRecords().forEach(orderSendRecord -> {
Order order = orderMapper.selectById(orderSendRecord.getOrderId());
if (ObjectUtil.isNotNull(order)) {
handleUserDepart(order);
orderSendRecord.setOrder(order);
}
});
return orderSendRecordPage;
}
@Override
public void evaluation(OrderEvaluation orderEvaluation) {
LoginUser loginUser = GlobalUtils.getLoginUser();
LambdaQueryWrapper<Order> lambdaQueryWrapper = GlobalUtils.getLambdaQueryWrapper();
lambdaQueryWrapper.eq(Order::getSalvageUserId, loginUser.getId())
.eq(Order::getId, orderEvaluation.getOrderId());
Order order = orderMapper.selectOne(lambdaQueryWrapper);
if (ObjectUtil.isNull(order)) {
throw new RuntimeException("没有关联订单");
}
boolean existInsertOrderDetail = orderDetailService.ifDoesNotExistInsertOrderDetail(order.getId());
if (!existInsertOrderDetail) {
throw new RuntimeException("没有关联订单");
}
OrderDetail detail = new OrderDetail();
detail.setId(order.getId());
detail.setOrderScore(orderEvaluation.getScore());
detail.setOrderEvaluation(orderEvaluation.getEvaluation());
orderDetailMapper.updateById(detail);
}
@Override
public String salvageOpinion(String sessionId) {
LambdaQueryWrapper<Order> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
queryWrapper.select(Order::getInfoDesc, Order::getId).eq(Order::getSessionId, sessionId);
List<Order> orders = orderMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(orders)) {
return StrUtil.EMPTY;
}
String result = orders.get(0).getInfoDesc();
if (StrUtil.isBlank(result)) {
return StrUtil.EMPTY;
}
return result;
}
@Override
public void addSalvageOpinion(Order order) {
if (StrUtil.isBlank(order.getSessionId()) || StrUtil.isBlank(order.getInfoDesc())) {
throw new RuntimeException("参数缺失 sessionId/救助意见");
}
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Order::getSessionId, order.getSessionId())
.set(Order::getInfoDesc, order.getInfoDesc());
orderMapper.update(null, updateWrapper);
}
@Override
public List<SessionOrderUser> listSession(ListSession value) {
if (CollectionUtils.isEmpty(value.getSessions())) {
throw new RuntimeException("参数会话列表为空");
}
if (!EmergencyConstants.OPERATION.equals(value.getType())) {
if (!EmergencyConstants.MAJOR.equals(value.getType())) {
throw new RuntimeException("未知类型");
}
}
List<Order> orders = getSessionOrder(value.getSessions(), value.getType());
return convertOrder(orders);
}
@Override
public OrderThrough orderThrough(String id) {
LambdaQueryWrapper<OrderDetail> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
queryWrapper.select(
OrderDetail::getId,
OrderDetail::getOrderThrough,
OrderDetail::getOrderResult)
.eq(OrderDetail::getId, id);
OrderThrough result = new OrderThrough();
OrderDetail orderDetail = orderDetailMapper.selectOne(queryWrapper);
if (orderDetail == null) {
result.setOrderThrough(StrUtil.EMPTY);
result.setOrderResult(StrUtil.EMPTY);
return result;
}
result.setOrderThrough(StrUtil.isBlank(orderDetail.getOrderThrough()) ? StrUtil.EMPTY : orderDetail.getOrderThrough());
result.setOrderResult(StrUtil.isBlank(orderDetail.getOrderResult()) ? StrUtil.EMPTY : orderDetail.getOrderResult());
return result;
}
@Override
public Order getOrderById(String id) {
if (StrUtil.isBlank(id)) {
throw new RuntimeException("未知订单");
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getId, id)
.eq(Order::getStatus, CommonConstant.STATUS_1)
.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
Order order = orderMapper.selectOne(queryWrapper);
if (ObjectUtil.isNull(order)) {
return order;
}
// 派单记录
order.setOrderSendRecordList(listOrderSendRecord(order.getId()));
handleUserDepart(order);
handleOrderDetail(order);
return order;
}
@Override
public List<TblHelpCentorVo> getSicknessTypeStatistic(String sex, String depart) {
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(sex) && !"0".equals(sex)){
queryWrapper.eq(Order::getSalvageUserSex,sex);
}
if (StrUtil.isNotBlank(depart)){
queryWrapper.like(Order::getSalvageUserDepart,depart);
}
queryWrapper.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
List<Order> orders = orderMapper.selectList(queryWrapper);
// 统计
Map<String, Integer> map = new HashMap<>();
orders.forEach(order -> {
String initiatorType = order.getInitiatorType();
if (map.containsKey(initiatorType)) {
map.put(initiatorType, map.get(initiatorType) + 1);
} else {
map.put(initiatorType, 1);
}
});
List<TblHelpCentorVo> voList = new ArrayList<>();
map.forEach((k, v) -> {
TblHelpCentorVo vo = new TblHelpCentorVo();
vo.setType(k);
vo.setCount(v);
voList.add(vo);
});
return voList;
}
private List<SessionOrderUser> convertOrder(List<Order> orders) {
if (CollectionUtils.isEmpty(orders)) {
return Collections.emptyList();
}
List<SessionOrderUser> result = new ArrayList<>();
orders.forEach(order -> {
SessionOrderUser sessionUser = new SessionOrderUser();
sessionUser.setOrderId(order.getId());
sessionUser.setSessionId(order.getSessionId());
sessionUser.setUserId(order.getInitiatorUserId());
sessionUser.setUserName(order.getInitiatorUserName());
sessionUser.setAge(getAgeByIdCard(order.getInitiatorUserIdCard()));
sessionUser.setSex(order.getInitiatorUserSex());
sessionUser.setAvatar(order.getInitiatorUserAvatar());
sessionUser.setDepart(getDepartName(order.getInitiatorUserDepart()));
sessionUser.setInitTime(order.getCreateTime());
sessionUser.setHospital(order.getSendOrderHospital());
sessionUser.setOrderStatus(order.getOrderStatus());
result.add(sessionUser);
});
return result;
}
private String getDepartName(String orgCode) {
SysDepart result = sysCache.getDepartByOrgCode(orgCode);
if (ObjectUtil.isNull(result)) {
return StrUtil.EMPTY;
}
return result.getDepartName();
}
private Integer getAgeByIdCard(String idCard) {
if (StrUtil.isBlank(idCard)) {
return null;
}
try {
return IdcardUtil.getAgeByIdCard(idCard);
} catch (Exception e) {
return null;
}
}
private List<Order> getSessionOrder(List<String> sessions, String type) {
String userId = GlobalUtils.getLoginUser().getId();
LambdaQueryWrapper<Order> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
if (EmergencyConstants.MAJOR.equals(type)) {
queryWrapper.eq(Order::getMajorUserId, userId);
}
if (EmergencyConstants.OPERATION.equals(type)) {
queryWrapper.eq(Order::getOperationUserId, userId);
}
queryWrapper.ne(Order::getOrderStatus, EmergencyConstants.ORDER_STATUS_5_NEW);
queryWrapper.apply("FIND_IN_SET(session_id, {0})", String.join(",", sessions));
return orderMapper.selectList(queryWrapper);
}
private void handleUserDepart(Order order) {
// 发起人部门
SysDepart initUserDepart = emergencyCacheManager.getUserDepart(order.getInitiatorUserDepart());
// 发起人二级部门
SysDepart initUserSecondDepart = emergencyCacheManager.getUserSecondDepart(order.getInitiatorUserDepart());
// 救助人部门
SysDepart saUserDepart = emergencyCacheManager.getUserDepart(order.getSalvageUserDepart());
// 救助人二级部门
SysDepart saUserSecondDepart = emergencyCacheManager.getUserSecondDepart(order.getSalvageUserDepart());
order.setInitiatorUserDepart(initUserDepart.getDepartName());
order.setInitiatorUserSecondDepart(initUserSecondDepart.getDepartName());
order.setSalvageUserDepart(saUserDepart.getDepartName());
order.setSalvageUserSecondDepart(saUserSecondDepart.getDepartName());
}
private List<OrderSendRecord> listOrderSendRecord(String id) {
if (StrUtil.isBlank(id)) {
return Collections.emptyList();
}
LambdaQueryWrapper<OrderSendRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrderSendRecord::getOrderId, id)
.eq(OrderSendRecord::getStatus, CommonConstant.STATUS_1)
.eq(OrderSendRecord::getDelFlag, CommonConstant.DEL_FLAG_0)
.orderByDesc(OrderSendRecord::getCreateTime);
List<OrderSendRecord> list = orderSendRecordMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
return list;
}
private void updateReplenishOrder(Order order) {
String orderId = order.getId();
boolean exist = orderService.existOrder(orderId);
if (!exist) {
throw new RuntimeException("应急单不存在");
}
// 修改订单
handleReplenishOrder(order);
orderMapper.updateById(order);
// 修改订单详情
OrderDetail orderDetail = order.getOrderDetail();
if (ObjectUtil.isNull(orderDetail)) {
return;
}
orderDetail.setId(orderId);
boolean existInsertOrderDetail = orderDetailService.ifDoesNotExistInsertOrderDetail(orderId);
if (existInsertOrderDetail) {
handleReplenishOrderDetail(order.getOrderDetail());
orderDetailMapper.updateById(orderDetail);
}
}
private void handleReplenishOrderDetail(OrderDetail orderDetail) {
if (ObjectUtil.isNull(orderDetail)) {
return;
}
orderDetail.setOrderScore(null);
orderDetail.setOrderEvaluation(null);
orderDetail.setOrderEvaluationTime(null);
}
private void handleReplenishOrder(Order order) {
order.setSessionId(null);
order.setSessionNow(false);
order.setSessionOverTime(null);
order.setIsFill(EmergencyConstants.ORDER_IS_FILL_1);
}
private void insertReplenishOrder(Order order) {
// 应急单信息
handleReplenishOrder(order);
orderMapper.insert(order);
// 应急单子详情
String orderId = order.getId();
OrderDetail orderDetail = order.getOrderDetail();
if (ObjectUtil.isNull(orderDetail)) {
return;
}
orderDetail.setId(orderId);
handleReplenishOrderDetail(orderDetail);
// insert
orderDetailMapper.insert(orderDetail);
}
private boolean existOrderSendRecord(String orderId, String stationUserId) {
LambdaQueryWrapper<OrderSendRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrderSendRecord::getOrderId, orderId)
.eq(OrderSendRecord::getStatus, CommonConstant.STATUS_1)
.eq(OrderSendRecord::getDelFlag, CommonConstant.DEL_FLAG_0);
//.eq(OrderSendRecord::getStationUserId,stationUserId);
List<OrderSendRecord> list = orderSendRecordMapper.selectList(queryWrapper);
//是否接单(0:待处理 1:已接单 2:已拒单)
//long count = list.stream().filter(f -> !"2".equals(f.getAccept())).count();
long count = list.stream().filter(f -> "1".equals(f.getAccept())).count();
return count >= 1;
}
private LambdaQueryWrapper<Order> getQueryWrapper(String personType, List<String> orderStatus) {
// personType 人员类型 (0:操作人 1:专业人 3:发起人/救助人 4:驻场人)
LoginUser loginUser = GlobalUtils.getLoginUser();
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
// 时间倒叙
queryWrapper.orderByDesc(Order::getCreateTime);
switch (personType) {
case EmergencyConstants.OPERATION:
queryWrapper.eq(Order::getOperationUserId, loginUser.getId()).in(Order::getOrderStatus, orderStatus);
break;
case EmergencyConstants.MAJOR:
queryWrapper.eq(Order::getMajorUserId, loginUser.getId()).in(Order::getOrderStatus, orderStatus);
break;
case EmergencyConstants.STATION:
queryWrapper.eq(Order::getStationUserId, loginUser.getId())
.eq(Order::getIsDispatch, EmergencyConstants.ORDER_SEND_STATUS_2)
.in(Order::getOrderStatus, orderStatus);
break;
case EmergencyConstants.INITIATOR:
case EmergencyConstants.SALVAGE:
queryWrapper.eq(Order::getInitiatorUserId, loginUser.getId())
.or()
.eq(Order::getSalvageUserId, loginUser.getId())
.in(Order::getOrderStatus, orderStatus);
break;
default:
}
return queryWrapper;
}
private IPage<OrderSimple> handleOrders(Page<Order> orders) {
if (CollectionUtils.isEmpty(orders.getRecords())) {
return new Page<>();
}
IPage<OrderSimple> result = new Page<>();
List<OrderSimple> list = new ArrayList<>();
for (Order order : orders.getRecords()) {
OrderSimple simpleLetter = new OrderSimple();
simpleLetter.setUserName(order.getInitiatorUserName());
simpleLetter.setAge(order.getInitiatorUserAge());
simpleLetter.setSex(order.getInitiatorUserSex());
simpleLetter.setAvatar(order.getInitiatorUserAvatar());
simpleLetter.setSecondDepart(getSecondDepartName(order.getInitiatorUserDepart()));
simpleLetter.setOrderId(order.getId());
simpleLetter.setSessionId(order.getSessionId());
simpleLetter.setSessionNow(order.getSessionNow());
simpleLetter.setLongitude(order.getInitiatorLongitude());
simpleLetter.setLatitude(order.getInitiatorLatitude());
simpleLetter.setCreateTime(order.getCreateTime());
simpleLetter.setOrderStatus(order.getOrderStatus());
simpleLetter.setHospital(order.getSendOrderHospital());
simpleLetter.setSalvageOpinion(order.getInfoDesc());
/* simpleLetter.setResTime(order.getOperationResponseTime());
simpleLetter.setSalvageTime(order.getCreateTime());
simpleLetter.setSalvage(handleOrder(order, EmergencyConstants.SALVAGE));
simpleLetter.setOperation(handleOrder(order, EmergencyConstants.OPERATION));
simpleLetter.setMajor(handleOrder(order, EmergencyConstants.MAJOR));
//派单时间
simpleLetter.setSendOrderTime(order.getOperationSendOrderTime());
// 是否派单
simpleLetter.setSendOrder(order.getIsDispatch());
simpleLetter.setSendOrderType(order.getStationBusiness());
// 小结标题
simpleLetter.setThrough(order.getDetailTitle());
*/
list.add(simpleLetter);
}
result.setRecords(list);
return result;
}
private String getSecondDepartName(String orgCode) {
SysDepart userSecondDepart = emergencyCacheManager.getUserSecondDepart(orgCode);
return userSecondDepart.getDepartName();
}
private EmergencyUser handleOrder(Order order, String type) {
EmergencyUser user = new EmergencyUser();
if (EmergencyConstants.OPERATION.equals(type)) {
user.setUserId(order.getOperationUserId());
user.setUserName(order.getOperationUserName());
user.setUserSex(order.getOperationUserSex());
}
if (EmergencyConstants.MAJOR.equals(type)) {
user.setUserId(order.getMajorUserId());
user.setUserName(order.getMajorUserName());
user.setUserSex(order.getMajorUserSex());
}
if (EmergencyConstants.SALVAGE.equals(type)) {
user.setUserId(order.getSalvageUserId());
user.setUserName(order.getSalvageUserName());
user.setUserSex(order.getSalvageUserSex());
}
return user;
}
private List<String> getOrderStatus(String orderType, String personType) {
if (EmergencyConstants.ORDER_STATUS_5_NEW.equals(orderType)) {
return Collections.singletonList(EmergencyConstants.ORDER_STATUS_5_NEW);
}
if (EmergencyConstants.STATION.equals(personType)) {
return Collections.singletonList(EmergencyConstants.ORDER_STATUS_1_NEW);
} else {
return Arrays.asList(EmergencyConstants.ORDER_STATUS_0_NEW, EmergencyConstants.ORDER_STATUS_1_NEW);
}
}
private Page<Order> listOrderByType(Page<Order> page, LambdaQueryWrapper<Order> queryWrapper) {
Page<Order> orders = orderMapper.selectPage(page, queryWrapper);
if (CollectionUtils.isEmpty(orders.getRecords())) {
return new Page<>();
}
return orders;
}
}
@@ -0,0 +1,30 @@
package com.renkang.emergency.api.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.api.service.EmergencyOrderSendRecordApiService;
import com.renkang.emergency.entity.OrderSendRecord;
import com.renkang.emergency.mapper.OrderSendRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author Junqiang Zhu
* @date 2023-04-27 17:32
*/
@Service("emergencyOrderSendRecordApiService")
public class EmergencyOrderSendRecordApiServiceImpl implements EmergencyOrderSendRecordApiService {
@Autowired
private OrderSendRecordMapper orderSendRecordMapper;
@Override
public IPage<OrderSendRecord> pageRecord(Page<OrderSendRecord> page, String orderId) {
LambdaQueryWrapper<OrderSendRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrderSendRecord::getOrderId, orderId)
.eq(OrderSendRecord::getAccept, false);
return orderSendRecordMapper.selectPage(page, queryWrapper);
}
}
@@ -0,0 +1,204 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.api.service.EmergencyResourceApiService;
import com.renkang.emergency.bean.common.ResourceExt;
import com.renkang.emergency.bean.response.ResourceHome;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.EmergencyResourceDO;
import com.renkang.emergency.entity.Order;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.manager.EmergencyCloudManager;
import com.renkang.emergency.manager.ResourceManager;
import com.renkang.emergency.mapper.OrderMapper;
import com.renkang.emergency.mapper.ResourceMapper;
import com.renkang.emergency.util.ResourceUtils;;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.global.GlobalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Point;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Junqiang Zhu
* @date 2023-04-25 13:07
*/
@Service("emergencyResourceApiService")
public class EmergencyResourceApiServiceImpl implements EmergencyResourceApiService {
@Autowired
private EmergencyCloudManager emergencyCloudManager;
@Autowired
private ResourceManager resourceManager;
@Autowired
private OrderMapper orderMapper;
@Autowired
private ResourceMapper resourceMapper;
@Autowired
private ISysBaseAPI sysBaseAPI;
@Override
public ResourceHome listResourceByType(String type, Double longitude, Double latitude) {
if (StrUtil.isBlank(type)) {
type = EmergencyConstants.RESOURCE_ALL;
}
ResourceHome home = new ResourceHome();
// 是否有正在进行的会话
String sessionId = sessionNow(null);
if (StrUtil.isNotBlank(sessionId)) {
home.setSessionId(sessionId);
// 前端页面返回需要数据 继续查数据
//return home;
}
// 字典数据
List<DictModel> dictItems = emergencyCloudManager.getDictItems(EmergencyConstants.EMERGENCY_RESOURCE_TYPE_DICT);
if (ObjectUtils.isEmpty(longitude) || ObjectUtils.isEmpty(latitude)) {
home.setDicts(dictItems);
List<ResourceExt> list = this.listResource(type);
List<ResourceExt> resources = new ArrayList<>();
if("3".equals(type) || "0".equals(type)){
resources = this.selectResourceByLongitudeLatitude(null,null,null);
}
list.addAll(resources);
home.setResources(list);
return home;
}
// 资源数据
Point point = new Point(longitude, latitude);
List<ResourceExt> resources = resourceManager.geoSearch(point, 100000, type);
List<ResourceExt> resourcesLL = new ArrayList<>();
if("3".equals(type) || "0".equals(type)){
resourcesLL = this.selectResourceByLongitudeLatitude(100000D,longitude,latitude);
}
resources.addAll(resourcesLL);
home.setDicts(dictItems);
home.setResources(resources);
return home;
}
@Override
public String sessionNow(String userId) {
if (StrUtil.isBlank(userId)) {
userId = GlobalUtils.getLoginUser().getId();
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getInitiatorUserId, userId)
.eq(Order::getSessionNow, true);
List<Order> orders = orderMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(orders)) {
return StrUtil.EMPTY;
}
return orders.get(0).getSessionId();
}
@Override
public Result<List<EmergencyResourceDO>> selectHospitalList() {
List<String> resourcrList = resourceMapper.selectHospitalList();
List<String> stationList = sysBaseAPI.selectStationHospitalList();
List<EmergencyResourceDO> list = new ArrayList<>();
if (CollectionUtils.isNotEmpty(resourcrList) && CollectionUtils.isNotEmpty(stationList)) {
List<String> resultList = resourcrList.stream().filter(stationList::contains).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(resultList)) {
List<EmergencyResourceDO> resourceDOList = resourceMapper.selectHospitalListByIds(String.join(",", resultList));
return Result.OK(resourceDOList);
}
}
return Result.OK(list);
}
public Order sessionNowSession(String userId) {
if (StrUtil.isBlank(userId)) {
userId = GlobalUtils.getLoginUser().getId();
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Order::getInitiatorUserId, userId)
.eq(Order::getSessionNow, true);
List<Order> orders = orderMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(orders)) {
return null;
}
return orders.get(0);
}
private List<ResourceExt> listResource(String type) {
if("3".equals(type)){
return Collections.emptyList();
}
LambdaQueryWrapper<Resource> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
if (!EmergencyConstants.RESOURCE_ALL.equals(type)) {
queryWrapper.eq(Resource::getType, type);
queryWrapper.ne(Resource::getType, "3");
}
List<Resource> resources = resourceMapper.selectList(queryWrapper);
List<ResourceExt> result = new ArrayList<>();
if (CollectionUtils.isNotEmpty(resources)) {
for (Resource resource : resources) {
ResourceExt resourceExt = new ResourceExt();
BeanUtil.copyProperties(resource, resourceExt);
result.add(resourceExt);
}
}
return result;
}
public List<ResourceExt> selectResourceByLongitudeLatitude(Double distance,Double longitude,Double latitude){
List<ResourceExt> resourceExtList = new ArrayList<>();
/* Point point = new Point(longitude, latitude);
List<MedicalResource> list = medicalCenterApi.selectResourceByLongitudeLatitude(distance, longitude, latitude).getResult();
for (MedicalResource medicalResource : list) {
ResourceExt resourceExt = convertToResourcesExt(medicalResource);
Point geoPoint = new Point(medicalResource.getLongitude().doubleValue(), medicalResource.getLatitude().doubleValue());
resourceExt.setType("3");
resourceExt.setDistance(ResourceUtils.geoDistance(point, geoPoint));
resourceExtList.add(resourceExt);
}*/
return resourceExtList;
}
/* private static ResourceExt convertToResourcesExt(MedicalResource resource) {
if (Objects.isNull(resource)) {
return null;
}
ResourceExt resourceExt = new ResourceExt();
BeanUtil.copyProperties(resource, resourceExt);
return resourceExt;
}*/
}
@@ -0,0 +1,267 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.api.service.EmergencyScheduleApiService;
import com.renkang.emergency.bean.response.ScheduleDay;
import com.renkang.emergency.bean.response.ScheduleMonth;
import com.renkang.emergency.bean.response.ScheduleRecordShow;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.ScheduleCustom;
import com.renkang.emergency.entity.ScheduleDefault;
import com.renkang.emergency.entity.ScheduleRecord;
import com.renkang.emergency.mapper.ScheduleCustomMapper;
import com.renkang.emergency.mapper.ScheduleDefaultMapper;
import com.renkang.emergency.mapper.ScheduleRecordMapper;
import com.renkang.emergency.util.DateUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.jeecg.global.GlobalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Junqiang Zhu
* @date 2023-04-25 13:07
*/
@Service("emergencyScheduleApiService")
public class EmergencyScheduleApiServiceImpl implements EmergencyScheduleApiService {
@Autowired
private ScheduleRecordMapper scheduleRecordMapper;
@Autowired
private ScheduleCustomMapper scheduleCustomMapper;
@Autowired
private ScheduleDefaultMapper scheduleDefaultMapper;
@Override
public ScheduleRecordShow scheduleRecord(String year, String month, String userId) {
if (StrUtil.isBlank(year)) {
throw new RuntimeException("参数缺失 year");
}
if (StrUtil.isBlank(userId)) {
userId = GlobalUtils.getLoginUser().getId();
}
// return
ScheduleRecordShow show = new ScheduleRecordShow();
show.setYear(Integer.valueOf(year));
show.setMonths(new ArrayList<>());
List<ScheduleRecord> scheduleRecords = scheduleRecordMapper.scheduleRecord(year, month, userId);
if (CollectionUtils.isEmpty(scheduleRecords)) {
return show;
}
handleMonths(scheduleRecords, show);
return show;
}
@Override
public ScheduleRecordShow scheduleShow(Integer year, Integer month, String userId) {
if (ObjectUtil.isNull(year)) {
throw new RuntimeException("参数缺失 year");
}
if (StrUtil.isBlank(userId)) {
userId = GlobalUtils.getLoginUser().getId();
}
// return
ScheduleRecordShow show = new ScheduleRecordShow();
show.setYear(year);
if (ObjectUtil.isNull(month)) {
month = getThisMonth();
}
// 过往月
if (month < getThisMonth()) {
return this.scheduleRecord(String.valueOf(year), String.valueOf(month), userId);
}
// 未来月
if (month > getThisMonth()) {
ScheduleMonth futureMonth = getFutureMonth(year, month, userId);
show.setMonths(Collections.singletonList(futureMonth));
return show;
}
// 当前月
ScheduleMonth months = getCurrentMonth(year, month, userId);
show.setMonths(Collections.singletonList(months));
return show;
}
private ScheduleMonth getFutureMonth(Integer year, Integer month, String userId) {
// 默认排班
List<ScheduleDefault> scheduleDefaults = listScheduleDefault(userId);
// 自定义排班
List<ScheduleCustom> customList = listScheduleCustom(year, month, userId);
return convertDefaultToMonth(year, month, scheduleDefaults, customList);
}
private ScheduleMonth getCurrentMonth(Integer year, Integer month, String userId) {
// 值班记录
List<ScheduleMonth> months = this.scheduleRecord(String.valueOf(year), String.valueOf(month), userId).getMonths();
ScheduleMonth recordMonth = new ScheduleMonth();
recordMonth.setMonth(month);
recordMonth.setDays(new ArrayList<>());
if (CollectionUtils.isNotEmpty(months)) {
recordMonth = months.get(0);
}
// 未来/当天值班
ScheduleMonth futureMonth = getFutureMonth(year, month, userId);
// 将 list2 中不存在于 list1 的元素添加到 list1
for (ScheduleDay day2 : futureMonth.getDays()) {
boolean exists = false;
for (ScheduleDay day1 : recordMonth.getDays()) {
if (day1.getDay().equals(day2.getDay())) {
exists = true;
break;
}
}
if (!exists) {
recordMonth.getDays().add(day2);
}
}
return recordMonth;
}
private ScheduleMonth convertDefaultToMonth(int year, int month, List<ScheduleDefault> scheduleDefaults, List<ScheduleCustom> customList) {
ScheduleMonth result = new ScheduleMonth();
result.setMonth(month);
if (CollectionUtils.isEmpty(scheduleDefaults) && CollectionUtils.isEmpty(customList)) {
result.setDays(Collections.emptyList());
return result;
}
List<ScheduleDay> dayList = new ArrayList<>();
Map<Integer, List<ScheduleDefault>> collect = scheduleDefaults.parallelStream().collect(Collectors.groupingBy(ScheduleDefault::getWeek));
collect.forEach((week, defaults) -> {
List<Integer> days = DateUtils.monthAllDayOfTheWeek(year, month, week);
days.forEach(dayOfMonth -> {
long am = defaults.parallelStream().filter(f -> EmergencyConstants.AM.equals(f.getType())).count();
long pm = defaults.parallelStream().filter(f -> EmergencyConstants.PM.equals(f.getType())).count();
ScheduleDay day = new ScheduleDay();
day.setDay(dayOfMonth);
day.setAm(am >= 1);
day.setPm(pm >= 1);
dayList.add(day);
});
});
// 自定义替换默认
handleDefaultCustom(dayList, customList);
result.setDays(dayList);
return result;
}
private void handleDefaultCustom(List<ScheduleDay> dayList, List<ScheduleCustom> customList) {
if (CollectionUtils.isEmpty(customList)) {
return;
}
// 自定义
List<ScheduleDay> dayCustom = new ArrayList<>();
Map<Date, List<ScheduleCustom>> collect = customList.parallelStream().collect(Collectors.groupingBy(ScheduleCustom::getScheduleTime));
collect.forEach((date, scheduleCustoms) -> {
ScheduleDay custom = new ScheduleDay();
long am = scheduleCustoms.parallelStream().filter(f -> EmergencyConstants.AM.equals(f.getType())).count();
long pm = scheduleCustoms.parallelStream().filter(f -> EmergencyConstants.PM.equals(f.getType())).count();
custom.setDay(DateUtil.dayOfMonth(date));
custom.setAm(am >= 1);
custom.setPm(pm >= 1);
dayCustom.add(custom);
});
// 替换或添加元素到 list1
for (ScheduleDay day2 : dayCustom) {
boolean replaced = false;
for (int i = 0; i < dayList.size(); i++) {
ScheduleDay day1 = dayList.get(i);
if (day1.getDay().equals(day2.getDay())) {
dayList.set(i, day2);
replaced = true;
break;
}
}
if (!replaced) {
dayList.add(day2);
}
}
}
private List<ScheduleDefault> listScheduleDefault(String userId) {
// 默认值班
LambdaQueryWrapper<ScheduleDefault> queryWrapper = GlobalUtils.getLambdaQueryWrapper();
queryWrapper.select(ScheduleDefault::getUserId,
ScheduleDefault::getType,
ScheduleDefault::getWeek)
.eq(ScheduleDefault::getUserId, userId);
return scheduleDefaultMapper.selectList(queryWrapper);
}
private List<ScheduleCustom> listScheduleCustom(int year, int month, String userId) {
// 自定义值班
return scheduleCustomMapper.listScheduleByMonth(year, month, userId);
}
private int getThisMonth() {
return DateUtil.thisMonth() + 1;
}
private int getThisDay() {
return DateUtil.dayOfMonth(new Date());
}
private void handleMonths(List<ScheduleRecord> list, ScheduleRecordShow show) {
if (CollectionUtils.isEmpty(list)) {
return;
}
// 月数据
List<ScheduleMonth> months = new ArrayList<>();
Map<String, List<ScheduleRecord>> monthMap = list.parallelStream().collect(Collectors.groupingBy(ScheduleRecord::getMonth));
monthMap.forEach((month, list1) -> {
ScheduleMonth scheduleMonth = new ScheduleMonth();
scheduleMonth.setMonth(Integer.parseInt(month));
scheduleMonth.setDays(handleDays(list1));
months.add(scheduleMonth);
});
show.setMonths(months);
}
private List<ScheduleDay> handleDays(List<ScheduleRecord> list) {
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
List<ScheduleDay> days = new ArrayList<>();
Map<String, List<ScheduleRecord>> dayMap = list.parallelStream().collect(Collectors.groupingBy(ScheduleRecord::getDay));
dayMap.forEach((day, list1) -> {
ScheduleDay scheduleDay = new ScheduleDay();
long am = list1.parallelStream().filter(f -> EmergencyConstants.AM.equals(f.getType())).count();
long pm = list1.parallelStream().filter(f -> EmergencyConstants.PM.equals(f.getType())).count();
scheduleDay.setDay(Integer.valueOf(day));
scheduleDay.setAm(am >= 1);
scheduleDay.setPm(pm >= 1);
days.add(scheduleDay);
});
return days;
}
}
@@ -0,0 +1,79 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.renkang.emergency.api.service.IEmergencySeriousDiseaseService;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.EmergencySeriousDiseaseDO;
import com.renkang.emergency.mapper.EmergencySeriousDiseaseMapper;
import org.apache.commons.compress.utils.Lists;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.vo.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @Description: 大病就医
* @Author: jeecg-boot
* @Date: 2023-04-23
* @Version: V1.0
*/
@Service
public class EmergencySeriousDiseaseServiceImpl extends ServiceImpl<EmergencySeriousDiseaseMapper, EmergencySeriousDisease> implements IEmergencySeriousDiseaseService {
@Autowired
private EmergencySeriousDiseaseMapper emergencySeriousDiseaseMapper;
@Override
public Result<String> appointmentSeeDoctor(EmergencySeriousDiseaseDO emergencySeriousDiseaseDO) {
return null;
}
@Override
public IPage<EmergencySeriousDisease> pageList(Page<EmergencySeriousDisease> page, EmergencySeriousDisease emergencySeriousDisease) {
return emergencySeriousDiseaseMapper.pageList(page, emergencySeriousDisease);
}
@Override
public List<EmergencySeriousDiseaseDO> selectEmergencySeriousDiseaseListByState(Integer pageNo, Integer pageSize, String state) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Page<EmergencySeriousDisease> page = new Page<EmergencySeriousDisease>(pageNo, pageSize);
List<EmergencySeriousDisease> list = emergencySeriousDiseaseMapper.selectEmergencySeriousDiseaseListByState(page, state, sysUser.getId());
List<EmergencySeriousDiseaseDO> res = Lists.newArrayList();
if (CollectionUtil.isNotEmpty(list)) {
if (CollectionUtil.isNotEmpty(list)) {
for (EmergencySeriousDisease emergencySeriousDisease : list) {
EmergencySeriousDiseaseDO aa = BeanUtil.toBean(emergencySeriousDisease, EmergencySeriousDiseaseDO.class);
res.add(aa);
}
}
}
return res;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void expireEmergencySeriousDiseaseList() {
emergencySeriousDiseaseMapper.updateEmergencyStateOne();
emergencySeriousDiseaseMapper.updateEmergencyStateTeo();
}
public int selectEmergencyExist(String userId){
return emergencySeriousDiseaseMapper.selectEmergencyExist(userId);
}
}
@@ -0,0 +1,503 @@
package com.renkang.emergency.api.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.bean.request.CenterOpenTime;
import com.renkang.emergency.bean.request.EmergencySocket;
import com.renkang.emergency.entity.EmergencyCenter;
import com.renkang.emergency.entity.TblBaseHospitalVo;
import com.renkang.emergency.entity.TblUserHelp;
import com.renkang.emergency.service.EmergencyCenterOpenTimeService;
import com.renkang.emergency.service.IEmergencyCenterService;
import com.renkang.emergency.service.ISysNotifySmsPhoneService;
import com.renkang.emergency.service.ITblAmbulanceGpsService;
import com.renkang.emergency.util.CodeConstant;
import com.renkang.emergency.websocket.WebSocket;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.jeecg.bean.request.ListUser;
import org.jeecg.common.api.dto.message.BusTemplateMessageDTO;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.system.vo.LoginUserNew;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 大屏相关
*/
@Slf4j
@RequiredArgsConstructor
@Service("largeScreenService")
public class LargeScreenImpl {
private final IEmergencyCenterService centerService;
private final ITblAmbulanceGpsService tblAmbulanceGpsService;
private final EmergencyCenterOpenTimeService centerOpenTimeService;
private final ISysBaseAPI sysBaseAPI;
private final ISysNotifySmsPhoneService sysNotifySmsPhoneService;
private final ISysCache sysCache;
private final WebSocket webSocket;
private static final String UNKNOWN_USER = "UNKNOWN_";
/**
* 紧急求助大屏推送(应急就医与120)
*
* @param socket 推送信息
* @param longitude 经纬度
* @param latitude 经纬度
* @param busId busId
*/
public void orderPush(EmergencySocket socket, Double longitude, Double latitude, String busId) {
log.info("获取应急中心... 执行时间: {}", System.currentTimeMillis());
EmergencyCenter center = this.getCenter(socket);
socket.setCenterId(center.getId());
log.info("构建应急求助推送消息... 执行时间: {}", System.currentTimeMillis());
this.setPushMsg(socket, center, longitude, latitude);
// 开始推送
this.startPush(socket, busId, center,0);
}
/**
* 七陌电话大屏推送
*/
public void qimoPush(TblUserHelp userHelp) {
log.info("根据坐席号获取应急中心... 执行时间: {}", System.currentTimeMillis());
EmergencySocket socket = new EmergencySocket();
socket.setPopType(2);
socket.setQueue(userHelp.getQueue());
socket.setNoticeId(userHelp.getNoticeId());
socket.setCenterId(userHelp.getCenterId());
EmergencyCenter center = this.getCenter(socket);
LoginUserNew sysUser;
if (userHelp.getUserId().startsWith(UNKNOWN_USER)) {
sysUser = null;
} else {
// 查询用户相关信息
List<LoginUserNew> loginUserNews = sysBaseAPI.listUserByIds(new ListUser(Collections.singletonList(userHelp.getUserId())));
sysUser = CollectionUtils.isEmpty(loginUserNews) ? null : loginUserNews.get(0);
}
log.info("构建七陌电话推送消息... 执行时间: {}", System.currentTimeMillis());
this.setQimoPushMsg(socket, sysUser, userHelp);
// 开始推送
this.startPush(socket, userHelp.getId(), center, 1);
}
/**
* 开始推送
*
* @param socket 推送信息
* @param busId busId
* @param center 应急中心
* @param type 0:应急就医 1:七陌电话
* Ps:新增type
*/
private void startPush(EmergencySocket socket, String busId, EmergencyCenter center,Integer type) {
// 根据 center.getDefaultCenter() 状态 走不同逻辑 true:旧版逻辑 false:新版逻辑
if (center.getDefaultCenter()) {
this.defaultLargeScreenPush(socket);
this.defaultSmsPush(socket, busId, center, type);
} else {
log.info("新版大屏推送... 执行时间: {}", System.currentTimeMillis());
webSocket.pushMessageBase(socket);
this.newSmsPush(socket, busId, center, type);
}
}
/**
* 旧版大屏推送
*
* @param socket 推送信息
*/
private void defaultLargeScreenPush(EmergencySocket socket) {
if (StrUtil.isNotEmpty(socket.getOrgCode()) && socket.getOrgCode().contains("A01A59")) {
log.info("银川大屏推送... 执行时间: {}", System.currentTimeMillis());
webSocket.pushMessageYc(socket);
} else {
log.info("西安大屏推送... 执行时间: {}", System.currentTimeMillis());
webSocket.pushMessageXn(socket);
}
}
/**
* 旧版短信推送
*
* @param socket 推送信息
* @param busId busId
*/
private void defaultSmsPush(EmergencySocket socket, String busId, EmergencyCenter center, Integer type) {
log.info("旧版短信推送开始... 执行时间: {}", System.currentTimeMillis());
Set<String> mobiles = new HashSet<>();
this.setPhonePush(socket, mobiles);
// 发送短信
this.sendSms(new ArrayList<>(mobiles), socket, busId, center, type);
log.info("旧版短信推送结束... 执行时间: {}", System.currentTimeMillis());
}
/**
* 新版短信推送
*
* @param socket 推送信息
* @param busId busId
*/
private void newSmsPush(EmergencySocket socket, String busId, EmergencyCenter center,Integer type) {
log.info("新版短信推送开始... 执行时间: {}", System.currentTimeMillis());
String mobiles = setSmsDataNew(center, findPhone(socket.getOrgCode()));
if (StrUtil.isNotEmpty(mobiles)) {
List<String> phoneList = Arrays.asList(mobiles.split(","));
// 发送短信
this.sendSms(phoneList, socket, busId, center, type);
}
log.info("新版短信推送结束... 执行时间: {}", System.currentTimeMillis());
}
/**
* 发送短信
*
* @param phoneList 手机号列表
* @param socket 推送信息
* @param busId busId
* Ps: type==0 时发送的是应急就医(应急中心 和 120 电话)的短信 type==1 时发送的是七陌电话的短信
*/
private void sendSms(List<String> phoneList, EmergencySocket socket, String busId, EmergencyCenter center, Integer type) {
if (CollUtil.isNotEmpty(phoneList)) {
phoneList.forEach(phone -> {
if (StrUtil.isBlank(phone)) {
return;
}
if (type==0){
Map<String, String> data = new HashMap<String, String>();
data.put("userName", socket.getRealName());
data.put("departName", socket.getDepartName());
data.put("secondDepartName", socket.getOrgName());
data.put("mobile", socket.getPhone());
String code = "";
if ("0".equals(socket.getType())) {
log.info("拨打120,准备发送短信给【{}】", phone);
code = "noticeUserHelp_120";
}
if ("1".equals(socket.getType())) {
log.info("应急就医,准备发送短信给【{}】", phone);
code = "noticeUserHelp_emer";
}
if (StrUtil.isNotEmpty(code)) {
sysBaseAPI.sendBusSms(new BusTemplateMessageDTO("admin", phone, data, code, code, busId));
}
}
if (type == 1){
String noticeContent = String.format("[%s] %s (%s-%s)", StrUtil.isEmpty(socket.getQueue()) ? center.getCenterName() : socket.getQueue(),
socket.getRealName(), socket.getDepartName(), socket.getDepartName());
Map<String, String> data = new HashMap<>(2);
data.put("noticeContent", noticeContent);
data.put("mobile", socket.getPhone());
String templateCode = "qimoNotice";
String busType = "emergency_qimo";
sysBaseAPI.sendBusSms(new BusTemplateMessageDTO("qimo", phone, data, templateCode, busType, socket.getNoticeId()));
}
});
}
}
/**
* 构建紧急求助推送消息
*
* @param socket 消息对象
* @param center 应急中心
* @param longitude 经纬度
* @param latitude 经纬度
*/
private void setPushMsg(EmergencySocket socket, EmergencyCenter center, Double longitude, Double latitude) {
LoginUser sysUser = GlobalUtils.getLoginUser();
socket.setPopType(1);
socket.setUserId(sysUser.getId());
socket.setRealName(sysUser.getRealname());
socket.setAge(sysUser.getAge());
socket.setSex(sysUser.getSex());
socket.setPhone(sysUser.getPhone());
this.setDepartmentInfo(socket, sysUser.getOrgCode());
// 获取所有资源
List<TblBaseHospitalVo> allList = tblAmbulanceGpsService.getAllList(String.valueOf(center.getLatitude()), String.valueOf(center.getLongitude()), null, null);
socket.setLon(longitude);
socket.setLat(latitude);
List<TblBaseHospitalVo> hospitalSocketVoList = new ArrayList<>();
if (CollUtil.isNotEmpty(allList)) {
List<TblBaseHospitalVo> threeNearestHospitals = findThreeNearestHospitals(allList, socket.getLon(), socket.getLat());
threeNearestHospitals.forEach(item -> {
TblBaseHospitalVo hospitalSocketVo = new TblBaseHospitalVo();
hospitalSocketVo.setName(item.getName());
hospitalSocketVo.setLon(item.getLon());
hospitalSocketVo.setLat(item.getLat());
hospitalSocketVoList.add(hospitalSocketVo);
});
}
socket.setHospitalList(hospitalSocketVoList);
}
private void setQimoPushMsg(EmergencySocket socket, LoginUserNew sysUser, TblUserHelp userHelp) {
if (sysUser != null) {
socket.setUserId(sysUser.getId());
socket.setRealName(sysUser.getRealname());
socket.setAge(sysUser.getAge());
socket.setSex(sysUser.getSex());
socket.setPhone(sysUser.getPhone());
// 设置部门信息
this.setDepartmentInfo(socket,sysUser.getOrgCode());
} else {
// 设置默认信息
socket.setUserId(null);
socket.setRealName("未知");
socket.setDepartCode("未知");
socket.setDepartName("未知");
socket.setOrgCode("未知");
socket.setOrgName("未知");
socket.setPhone(userHelp.getOutMobile());
}
// 获取所有资源 电话没有经纬度
// List<TblBaseHospitalVo> allList = tblAmbulanceGpsService.getAllList(String.valueOf(center.getLatitude()), String.valueOf(center.getLongitude()), null, null);
// if (userHelp.getLon()!=null){
// socket.setLon(userHelp.getLon().doubleValue());
// }
// if (userHelp.getLat()!=null){
// socket.setLat(userHelp.getLat().doubleValue());
// }
// List<TblBaseHospitalVo> hospitalSocketVoList = new ArrayList<>();
// if (CollUtil.isNotEmpty(allList)) {
// List<TblBaseHospitalVo> threeNearestHospitals = findThreeNearestHospitals(allList, socket.getLon(), socket.getLat());
// threeNearestHospitals.forEach(item -> {
// TblBaseHospitalVo hospitalSocketVo = new TblBaseHospitalVo();
// hospitalSocketVo.setName(item.getName());
// hospitalSocketVo.setLon(item.getLon());
// hospitalSocketVo.setLat(item.getLat());
// hospitalSocketVoList.add(hospitalSocketVo);
// });
// }
// socket.setHospitalList(hospitalSocketVoList);
}
/**
* 根据单位与部门code查询应急中心(如果都没找到则查询默认应急中心)
*
* @param socket 推送信息
* @return 应急中心
*/
private EmergencyCenter getCenter(EmergencySocket socket) {
EmergencyCenter center;
if (StrUtil.isNotBlank(socket.getCenterId())) {
center = centerService.getById(socket.getCenterId());
} else {
// 所有的应急中心
List<EmergencyCenter> emergencyCenters = centerService.list(new LambdaQueryWrapper<EmergencyCenter>()
.eq(EmergencyCenter::getStatus, CommonConstant.STATUS_0));
center = emergencyCenters.stream()
.filter(currentCenter -> matchOrgCode(socket.getOrgCode(), currentCenter.getServiceScope()))
.findFirst()
.orElse(null);
if (ObjectUtil.isNull(center)) {
center = emergencyCenters.stream()
.filter(EmergencyCenter::getDefaultCenter)
.findAny()
.orElseGet(() -> {
EmergencyCenter defaultCenter = new EmergencyCenter();
defaultCenter.setDefaultCenter(true);
defaultCenter.setId("1000000000000000000");
defaultCenter.setLatitude(BigDecimal.valueOf(34.327286));
defaultCenter.setLongitude(BigDecimal.valueOf(108.945167));
return defaultCenter;
});
}
}
if (ObjectUtil.isNotNull(center)) {
center.setOpenTimes(centerOpenTimeService.findTime(center.getId()));
}
return center;
}
private Boolean matchOrgCode(String orgCode, String serviceScope) {
if (StrUtil.isBlank(serviceScope)) {
return false;
}
for (String scope : serviceScope.split(",")) {
if (orgCode.startsWith(scope)) {
return true;
}
}
return false;
}
/**
* 构建需要推送短信的电话(旧版)
*
* @param mobiles 电话列表
*/
private void setPhonePush(EmergencySocket socket, Set<String> mobiles) {
List<SysDepart> departChildrenByCode = sysCache.getDepartChildrenByCode(socket.getOrgCode());
if (CollUtil.isNotEmpty(departChildrenByCode)) {
// 获取健康管理员
List<SysUser> healtherList = sysBaseAPI.selectUserByRoleCode("healther").getResult();
if (CollUtil.isNotEmpty(healtherList)) {
mobiles.addAll(healtherList.stream().map(SysUser::getPhone).filter(Validator::isMobile).collect(Collectors.toList()));
}
// 获取事务站站长
List<SysUser> stationList = sysBaseAPI.selectUserByRoleCode("station").getResult();
if (CollUtil.isNotEmpty(stationList)) {
mobiles.addAll(stationList.stream().map(SysUser::getPhone).filter(Validator::isMobile).collect(Collectors.toList()));
}
}
//健康科 王娜 李翎,应急电话
Set<String> phoneNumbers = sysNotifySmsPhoneService.getPhoneNumbers(CodeConstant.NOTIFY_SMS_CENTER, CodeConstant.NOTIFY_SMS_XIAN);
mobiles.addAll(phoneNumbers.stream().filter(Validator::isMobile).collect(Collectors.toList()));
}
/**
* 查找健康管理员电话
*
* @param orgCode 机构编码
* @return 部门
*/
private String findPhone(String orgCode) {
if (!StrUtil.startWith(orgCode, "A01")) {
return "";
}
String orgCodeForLoop = orgCode;
SysDepart depart;
while (true) {
depart = sysCache.getDepartByOrgCode(orgCodeForLoop);
if (ObjectUtil.isNull(depart) || StrUtil.isBlank(depart.getHealthManageUserMobile())) {
if (orgCodeForLoop.length() >= 6) {
orgCodeForLoop = orgCodeForLoop.substring(0, orgCodeForLoop.length() - 3);
continue;
} else {
return "";
}
}
return depart.getHealthManageUserMobile();
}
}
/**
* 非值班时间内的异常向值班电话发送短信 向健康管理员字段追加中心值班电话逻辑
*
* @param center 应急中心
* @param mobiles 电话(,分隔)
* @return 电话(, 分隔)
*/
public String setSmsDataNew(EmergencyCenter center, String mobiles) {
StringBuilder updatedMobiles = new StringBuilder(mobiles);
if (ObjectUtil.isNotEmpty(center.getOpenTimes())) {
if (!isCurrentTimeInOpenTimes(center.getOpenTimes())) {
if (ObjectUtil.isNotEmpty(center.getDutyPhone())) {
String dutyPhone = center.getDutyPhone();
if (updatedMobiles.length() > 0) {
updatedMobiles.append(",");
}
updatedMobiles.append(dutyPhone);
}
}
}
return updatedMobiles.toString();
}
/**
* 设置部门信息
* @param socket socket
* @param orgCode 部门编码
*/
private void setDepartmentInfo(EmergencySocket socket, String orgCode) {
SysDepart secondDepart = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(orgCode));
Optional<SysDepart> optionalSecondDepart = Optional.ofNullable(secondDepart);
socket.setDepartCode(optionalSecondDepart.map(SysDepart::getOrgCode).orElse(""));
socket.setDepartName(optionalSecondDepart.map(SysDepart::getDepartName).orElse(""));
SysDepart thirdDepart = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(orgCode));
Optional<SysDepart> optionalThirdDepart = Optional.ofNullable(thirdDepart);
socket.setOrgCode(optionalThirdDepart.map(SysDepart::getOrgCode).orElse(""));
socket.setOrgName(optionalThirdDepart.map(SysDepart::getDepartName).orElse(""));
}
/**
* 判断当前时间是否在值班时间段内
*/
public boolean isCurrentTimeInOpenTimes(List<CenterOpenTime> openTimes) {
DateTime now = DateUtil.date();
String format = "HH:mm";
for (CenterOpenTime openTime : openTimes) {
DateTime start = DateUtil.parse(openTime.getOpenTimeStart(), format);
DateTime end = DateUtil.parse(openTime.getOpenTimeStart(), format);
if (now.isAfterOrEquals(start) && now.isBeforeOrEquals(end)) {
return true;
}
}
return false;
}
/**
* 获取最近的医院
*
* @param allList 所有医院
* @param lon 经纬度
* @param lat 经纬度
* @return 最近的医院列表
*/
public List<TblBaseHospitalVo> findThreeNearestHospitals(List<TblBaseHospitalVo> allList, final Double lon, final Double lat) {
if (allList == null || allList.size() < 3) {
return allList; // 如果列表中没有足够的点,则返回全部点
}
// 先对整个列表进行排序
allList.sort(new Comparator<TblBaseHospitalVo>() {
@Override
public int compare(TblBaseHospitalVo h1, TblBaseHospitalVo h2) {
double dist1 = distance(lat, lon, h1.getLat().doubleValue(), h1.getLon().doubleValue());
double dist2 = distance(lon, lat, h2.getLat().doubleValue(), h2.getLon().doubleValue());
return Double.compare(dist1, dist2);
}
});
// 选择前三个最近的点
return new ArrayList<>(allList.subList(0, 3));
}
/**
* 计算两点之间的距离
*
* @param lat1 经纬度1
* @param lon1 经纬度1
* @param lat2 经纬度2
* @param lon2 经纬度2
* @return 距离
*/
private static double distance(double lat1, double lon1, double lat2, double lon2) {
// 地球半径(单位:千米)
final int R = 6371;
double latDistance = Math.toRadians(lat2 - lat1);
double lonDistance = Math.toRadians(lon2 - lon1);
double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
+ Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
// 将距离转化为米
return R * c * 1000;
}
}
@@ -0,0 +1,35 @@
package com.renkang.emergency.archives.controller;
import com.renkang.emergency.archives.model.vo.EmergencyCenterInfo;
import com.renkang.emergency.archives.service.ArchivesEmergencyCenterService;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author stan
* @since 2024-12-23 10:23
*/
@RestController
@RequestMapping("archives/emergency")
public class ArchivesEmergencyCenterController {
@Autowired
private ArchivesEmergencyCenterService archivesEmergencyCenterService;
/**
* 所有的应急中心
* @return list
*/
@GetMapping("centers")
public Result<List<EmergencyCenterInfo>> centers() {
return Result.ok(archivesEmergencyCenterService.centers());
}
}
@@ -0,0 +1,50 @@
package com.renkang.emergency.archives.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.archives.model.dto.ResourceArchivesPageParam;
import com.renkang.emergency.archives.model.vo.YearsStatistic;
import com.renkang.emergency.archives.model.vo.ResourceArchivesInfo;
import com.renkang.emergency.archives.service.ArchivesResourceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @Description: 档案模块-机构信息-应急医院控制器
* @Author: feng
* @Date: 2024-11-20
* @Version: V1.0
*/
@Tag(name = "档案/机构信息/应急医院")
@RestController
@RequestMapping("/archives")
@RequiredArgsConstructor
public class ArchivesResourceController {
private final ArchivesResourceService archivesResourceService;
@GetMapping("/page")
@Operation(summary = "应急医院列表数据", description = "应急医院列表数据")
public Result<IPage<ResourceArchivesInfo>> medicalResourceArchivesPage(ResourceArchivesPageParam pageParam) {
return Result.OK(archivesResourceService.resourceArchivesPage(pageParam));
}
@GetMapping("/geo")
@Operation(summary = "应急医院地图数据", description = "应急医院地图数据")
public Result<List<ResourceArchivesInfo>> medicalResourceArchivesMap(ResourceArchivesPageParam param) {
return Result.OK(archivesResourceService.resourceArchivesMap(param));
}
@GetMapping("/years-statistic")
@Operation(summary = "历年服务人数变化", description = "历年服务人次变化")
public Result<List<YearsStatistic>> yearsDiagnosisStatistic(@RequestParam(name = "id") @Parameter(description = "医院ID") String id) {
return Result.OK(archivesResourceService.yearsStatistic(id));
}
}
@@ -0,0 +1,29 @@
package com.renkang.emergency.archives.model.dto;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jeecg.base.Criteria;
import org.jeecg.base.PageInfo;
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(title = "档案应急医院列表参数", description = "档案应急医院列表参数")
public class ResourceArchivesPageParam extends PageInfo<Resource> {
@Schema(description = "应急医院名称")
@Criteria(value = Criteria.Mode.LIKE, property = "name")
private String resourceName;
@Schema(description = "查询类型(默认油田 1:油田医院 2:合作医院)")
private Integer type;
public Integer getType(){
return this.type==null?1:this.type;
}
@Schema(description = "医院等级")
private Integer level;
@Schema(description = "查询年份(默认当年)")
private Integer year;
}
@@ -0,0 +1,28 @@
package com.renkang.emergency.archives.model.vo;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @author stan
* @since 2024-12-24 13:18
*/
@Getter
@Setter
public class EmergencyCenterInfo {
private String centerId;
private String centerName;
private BigDecimal longitude;
private BigDecimal latitude;
private String address;
// 操作人员数量
private Integer opNum;
// 专业人员数量
private Integer majNum;
// 当年应急人次
private Integer thisYearNum;
// 累计应急人次
private Integer totalYearNum;
}
@@ -0,0 +1,17 @@
package com.renkang.emergency.archives.model.vo;
import lombok.Getter;
import lombok.Setter;
/**
* @author stan
* @since 2024-12-24 14:12
*/
@Getter
@Setter
public class EmergencyNum {
// 应急中心id
private String id;
// 发起应急的数量
private Integer num;
}
@@ -0,0 +1,66 @@
package com.renkang.emergency.archives.model.vo;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jeecg.common.aspect.annotation.Dict;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "档案应急医院列表数据模型", description = "档案应急医院列表数据模型")
public class ResourceArchivesInfo {
/**医院ID*/
@Schema(title = "医院ID")
private String id;
/**名称*/
@Schema(title = "医院名称")
private String name;
/**等级*/
@Schema(title = "医院等级")
@Dict(dicCode = "hospital_level")
private String level;
/**地址*/
@Schema(title = "详细地址")
private String address;
/**电话*/
@Schema(title = "联系电话")
private String mobile;
/**类型*/
@Schema(title = "类型(默认油田 1:油田医院 2:合作医院)")
private String type;
/**经度*/
@Schema(title = "经度")
private BigDecimal longitude;
/**纬度*/
@Schema(title = "纬度")
private BigDecimal latitude;
/**图片*/
@Schema(title = "图片")
private String img;
/**当年诊疗人次*/
@Schema(title = "当年服务人次")
private Integer thisYearSum;
/**当年诊疗人次年份*/
@Schema(title = "当年服务人次年份")
private Integer year;
/**累积诊疗人次*/
@Schema(title = "累积服务人次")
private Integer allSum;
public ResourceArchivesInfo(Resource resource) {
this.id = resource.getId();
this.name = resource.getName();
this.address = resource.getAddress();
this.type = resource.getType();
this.level = resource.getLevel();
this.mobile = resource.getMobile();
this.longitude = resource.getLongitude();
this.latitude = resource.getLatitude();
this.img = resource.getImg();
}
}
@@ -0,0 +1,13 @@
package com.renkang.emergency.archives.model.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResourceStatisticVo {
private String resourceId;
private Integer sums;
}
@@ -0,0 +1,14 @@
package com.renkang.emergency.archives.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title = "档案应急医院趋势数据模型", description = "档案应急医院趋势数据模型")
public class YearsStatistic {
@Schema(title = "当年服务人次")
private Integer sums;
@Schema(title = "年份")
private Integer year;
}
@@ -0,0 +1,13 @@
package com.renkang.emergency.archives.service;
import com.renkang.emergency.archives.model.vo.EmergencyCenterInfo;
import java.util.List;
/**
* @author stan
* @since 2024-12-24
*/
public interface ArchivesEmergencyCenterService {
List<EmergencyCenterInfo> centers();
}
@@ -0,0 +1,33 @@
package com.renkang.emergency.archives.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.archives.model.dto.ResourceArchivesPageParam;
import com.renkang.emergency.archives.model.vo.YearsStatistic;
import com.renkang.emergency.archives.model.vo.ResourceArchivesInfo;
import java.util.List;
/**
* @Description: 档案模块-机构信息-一线医疗service
* @Author: feng
* @Date: 2024-11-20
* @Version: V1.0
*/
public interface ArchivesResourceService {
/**
* 应急医院列表数据
*/
IPage<ResourceArchivesInfo> resourceArchivesPage(ResourceArchivesPageParam pageParam);
/**
*应急医院地图数据
*/
List<ResourceArchivesInfo> resourceArchivesMap(ResourceArchivesPageParam param);
/**
*历年诊疗人数变化
* @param id
* @return
*/
List<YearsStatistic> yearsStatistic(String id);
}
@@ -0,0 +1,108 @@
package com.renkang.emergency.archives.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.archives.model.vo.EmergencyCenterInfo;
import com.renkang.emergency.archives.model.vo.EmergencyNum;
import com.renkang.emergency.archives.service.ArchivesEmergencyCenterService;
import com.renkang.emergency.entity.EmergencyCenter;
import com.renkang.emergency.entity.EmergencyProfessionUser;
import com.renkang.emergency.mapper.EmergencyCenterMapper;
import com.renkang.emergency.mapper.EmergencyProfessionUserMapper;
import com.renkang.emergency.mapper.OrderMapper;
import org.jeecg.global.GlobalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author stan
* @since 2024-12-24
*/
@Service
public class ArchivesEmergencyCenterServiceImpl implements ArchivesEmergencyCenterService {
@Autowired
private EmergencyCenterMapper emergencyCenterMapper;
@Autowired
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
@Autowired
private OrderMapper orderMapper;
@Override
public List<EmergencyCenterInfo> centers() {
List<String> managedCodes = GlobalUtils.getManagedCodes(null);
if (CollUtil.isEmpty(managedCodes) || managedCodes.contains("A99")) {
return Collections.emptyList();
}
LambdaQueryWrapper<EmergencyCenter> queryWrapper = new LambdaQueryWrapper<>();
// 权限过滤
queryWrapper.or(andWrapper -> {
for (int i = 0; i < managedCodes.size(); i++) {
if (i != 0) {
andWrapper.or();
}
andWrapper.likeRight(EmergencyCenter::getOrgCode, managedCodes.get(i));
}
});
// 如果后续涉及到操作人员 专业人员查看的需求 这里的方法替换成 IEmergencyCenterService.allCenter()接口
List<EmergencyCenter> emergencyCenters = emergencyCenterMapper.selectList(queryWrapper);
if (CollUtil.isEmpty(emergencyCenters)) {
return Collections.emptyList();
}
// 应急中心ids
List<String> centerIds = emergencyCenters.stream().map(EmergencyCenter::getId).collect(Collectors.toList());
// 操作人员 专业人员数量
List<EmergencyProfessionUser> userNum = emergencyProfessionUserMapper.findUserNum();
// 当年应急 累计应急
List<EmergencyNum> emergencyThisYear = orderMapper.emergencyNum(centerIds, "0");
List<EmergencyNum> emergencyTotal = orderMapper.emergencyNum(centerIds, "1");
List<EmergencyCenterInfo> infos = new ArrayList<>();
emergencyCenters.forEach(center -> {
EmergencyCenterInfo info = new EmergencyCenterInfo();
info.setCenterId(center.getId());
info.setCenterName(center.getCenterName());
info.setAddress(center.getAddress());
info.setLongitude(center.getLongitude());
info.setLatitude(center.getLatitude());
info.setOpNum(userNum.stream()
.filter(user -> center.getId().equals(user.getCenterId()))
.map(EmergencyProfessionUser::getOperatorNum)
.findFirst()
.orElse(0)
);
info.setMajNum(userNum.stream()
.filter(user -> center.getId().equals(user.getCenterId()))
.map(EmergencyProfessionUser::getProfessionNum)
.findFirst()
.orElse(0)
);
info.setThisYearNum(emergencyThisYear.stream()
.filter(year -> center.getId().equals(year.getId()))
.map(EmergencyNum::getNum)
.findFirst()
.orElse(0)
);
info.setTotalYearNum(emergencyTotal.stream()
.filter(year -> center.getId().equals(year.getId()))
.map(EmergencyNum::getNum)
.findFirst()
.orElse(0)
);
infos.add(info);
});
return infos;
}
}
@@ -0,0 +1,123 @@
package com.renkang.emergency.archives.service.impl;
import cn.hutool.core.date.DatePattern;
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.renkang.emergency.archives.model.dto.ResourceArchivesPageParam;
import com.renkang.emergency.archives.model.vo.YearsStatistic;
import com.renkang.emergency.archives.model.vo.ResourceArchivesInfo;
import com.renkang.emergency.archives.model.vo.ResourceStatisticVo;
import com.renkang.emergency.archives.service.ArchivesResourceService;
import com.renkang.emergency.entity.Order;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.mapper.OrderMapper;
import com.renkang.emergency.mapper.ResourceMapper;
import lombok.RequiredArgsConstructor;
import org.jeecg.util.WrapperUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
/**
* @Description: 档案模块-机构信息-一线医疗serviceimpl
* @Author: feng
* @Date: 2024-11-20
* @Version: V1.0
*/
@Service
@RequiredArgsConstructor
public class ArchivesResourceServiceImpl implements ArchivesResourceService {
private static final Logger log = LoggerFactory.getLogger(ArchivesResourceServiceImpl.class);
private final ResourceMapper resourceMapper;
private final OrderMapper orderMapper;
@Override
public IPage<ResourceArchivesInfo> resourceArchivesPage(ResourceArchivesPageParam pageParam) {
IPage<ResourceArchivesInfo> resultPage = new Page<>();
LambdaQueryWrapper<Resource> wrapper = WrapperUtils.initLambdaWrapper(pageParam);
wrapper.like(StrUtil.isNotEmpty(pageParam.getResourceName()),Resource::getName,pageParam.getResourceName());
wrapper.eq(ObjectUtil.isNotEmpty(pageParam.getType()),Resource::getType,pageParam.getType());
wrapper.eq(ObjectUtil.isNotEmpty(pageParam.getLevel()), Resource::getLevel, pageParam.getLevel());
IPage<Resource> resourceIPage = resourceMapper.selectPage(new Page<>(pageParam.getPageNo(),pageParam.getPageSize()),wrapper);
BeanUtils.copyProperties(resourceIPage, resultPage, "records");
if(ObjectUtil.isNotEmpty(resourceIPage.getRecords())){
List<ResourceArchivesInfo> archivesInfos = resourceIPage.getRecords().stream().map(ResourceArchivesInfo::new).collect(Collectors.toList());
Integer year = ObjectUtil.isNull(pageParam.getYear())? DateUtil.thisYear() : pageParam.getYear();
disposeMedicalResourceStaticData(archivesInfos,year);
resultPage.setRecords(archivesInfos);
}
return resultPage;
}
@Override
public List<ResourceArchivesInfo> resourceArchivesMap(ResourceArchivesPageParam param) {
LambdaQueryWrapper<Resource> wrapper = WrapperUtils.initLambdaWrapper(param);
wrapper.eq(ObjectUtil.isNotEmpty(param.getType()),Resource::getType,param.getType());
List<Resource> resourceList = resourceMapper.selectList(wrapper);
List<ResourceArchivesInfo> archivesInfos = resourceList.stream().map(ResourceArchivesInfo::new).collect(Collectors.toList());
if(ObjectUtil.isNotEmpty(archivesInfos)){
Integer year = ObjectUtil.isNull(param.getYear())? DateUtil.thisYear() : param.getYear();
disposeMedicalResourceStaticData(archivesInfos,year);
}
return archivesInfos;
}
private void disposeMedicalResourceStaticData(List<ResourceArchivesInfo> archivesInfos, Integer year){
Set<String> resourceIds = archivesInfos.stream().map(ResourceArchivesInfo::getId).collect(Collectors.toSet());
//统计当年服务人数
CompletableFuture<Map<String,Integer>> completableFutureThisYearSum = CompletableFuture.supplyAsync(() -> selectThisYearSum(resourceIds,year));
//统计历年服务人数
CompletableFuture<Map<String,Integer>> completableFutureAllDiagnosisSum = CompletableFuture.supplyAsync(() -> selectAllSum(resourceIds));
CompletableFuture.allOf(completableFutureThisYearSum, completableFutureAllDiagnosisSum).join();
try {
Map<String,Integer> allSumMap = completableFutureAllDiagnosisSum.get();
Map<String,Integer> thisYearDiagnosisSumMap = completableFutureThisYearSum.get();
for (ResourceArchivesInfo info : archivesInfos){
info.setYear(year);
info.setAllSum(Optional.ofNullable(allSumMap.get(info.getId())).orElse(0));
info.setThisYearSum(Optional.ofNullable(thisYearDiagnosisSumMap.get(info.getId())).orElse(0));
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private Map<String,Integer> selectThisYearSum(Set<String> medicalResourceIds,Integer year){
MPJLambdaWrapper<Order> queryWrapper = new MPJLambdaWrapper<>();
Date yearDate =new DateTime(year.toString(), DatePattern.NORM_YEAR_PATTERN);
queryWrapper.between(Order::getOrderOverTime,DateUtil.beginOfYear(yearDate),DateUtil.endOfYear(yearDate));
return commonStatistic(queryWrapper, orderMapper, medicalResourceIds);
}
private Map<String,Integer> selectAllSum(Set<String> medicalResourceIds){
MPJLambdaWrapper<Order> queryWrapper = new MPJLambdaWrapper<>();
return commonStatistic(queryWrapper, orderMapper, medicalResourceIds);
}
private <T> Map<String,Integer> commonStatistic(MPJLambdaWrapper<T> queryWrapper, MPJBaseMapper<T> mapper, Set<String> medicalResourceIds){
queryWrapper.selectAs("resource_id", ResourceStatisticVo::getResourceId);
queryWrapper.selectCount("id", ResourceStatisticVo::getSums);
queryWrapper.in("resource_id",medicalResourceIds);
queryWrapper.groupBy("resource_id");
List<ResourceStatisticVo> list = mapper.selectJoinList(ResourceStatisticVo.class,queryWrapper);
return list.stream().collect(Collectors.toMap(ResourceStatisticVo::getResourceId, ResourceStatisticVo::getSums,(k1, k2) -> k1));
}
@Override
public List<YearsStatistic> yearsStatistic(String medicalCenterId) {
return resourceMapper.yearsStatistic(medicalCenterId);
}
}
@@ -0,0 +1,235 @@
package com.renkang.emergency.async;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.query.MPJLambdaQueryWrapper;
import com.renkang.emergency.entity.EmergencyGrouped;
import com.renkang.emergency.entity.TblQimoNotice;
import com.renkang.emergency.entity.dto.CallLogDTO;
import com.renkang.emergency.entity.vo.CallLogExportVO;
import com.renkang.emergency.mapper.EmergencyGroupedMapper;
import com.renkang.emergency.service.IEmergencyGroupedService;
import com.renkang.emergency.service.ITbQimoNoticeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.MyUploadUtil;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.exports.entity.CommonExportsInfo;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.bean.UserEmployee;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.export.styler.ExcelExportStylerBorderImpl;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
public class AsyncImportService {
@Resource
private ISysBaseAPI sysBaseAPI;
@Resource
private ISysCache sysCache;
@Value("${jeecg.path.upload}")
private String upLoadPath;
@Resource
private ITbQimoNoticeService tbQimoNoticeService;
@Resource
private IEmergencyGroupedService groupedService;
@Resource
private EmergencyGroupedMapper groupedMapper;
@Async
@Transactional(rollbackFor = Exception.class)
public void asyncExport(CallLogDTO dto, CommonExportsInfo info, String empFinish, String errCode, String sheetName, String fileName) {
LambdaQueryWrapper<TblQimoNotice> queryWrapper = new LambdaQueryWrapper<>();
// 基础信息查询
if (StrUtil.isNotEmpty(dto.getRealName())||StrUtil.isNotEmpty(dto.getOrgCode())) {
Result<Page<UserEmployee>> pageResult = sysBaseAPI.feignQueryPageList(dto.getRealName(), null, dto.getOrgCode(), null, null, null, 1, 999999);
if (pageResult.isSuccess()) {
List<UserEmployee> records = pageResult.getResult().getRecords();
List<String> phoneList = records.stream().map(SysUser::getPhone).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(phoneList)){
queryWrapper.in(TblQimoNotice::getCallNo, phoneList);
}else {
queryWrapper.eq(TblQimoNotice::getCallNo, "0");
}
}
}
// 应急中心
if (StrUtil.isNotEmpty(dto.getCenterId())) {
LambdaQueryWrapper<EmergencyGrouped> groupedWrapper = new LambdaQueryWrapper<>();
groupedWrapper.eq(EmergencyGrouped::getCenterId, dto.getCenterId());
List<EmergencyGrouped> list = groupedService.list(groupedWrapper);
List<String> seatIdList = list.stream().map(EmergencyGrouped::getSeatId).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(seatIdList)) {
queryWrapper.in(TblQimoNotice::getExten, seatIdList);
}else {
queryWrapper.eq(TblQimoNotice::getExten, "0");
}
}
// 坐席工号
if (StrUtil.isNotEmpty(dto.getSeatId())) {
queryWrapper.eq(TblQimoNotice::getExten, dto.getSeatId());
}
List<TblQimoNotice> list = tbQimoNoticeService.list(queryWrapper);
info.setExportMsg("通话记录导出中");
info.setHandleMsg("0/" + list.size());
info.setHandleEndTime(new Date());
GlobalUtils.setFeignToken();
sysBaseAPI.updateExportsInfo(info);
List<CallLogExportVO> exports = new ArrayList<>();
if (CollUtil.isNotEmpty(list)) {
// 工号list
List<String> seatIdList = list.stream().map(TblQimoNotice::getExten).filter(ObjectUtil::isNotEmpty).distinct().collect(Collectors.toList());
// 坐席组map
Map<String, EmergencyGrouped> groupedMap = getGroupedMapBySeatIdList(seatIdList);
// 手机号list
List<String> phoneList = list.stream().map(TblQimoNotice::getCallNo).filter(ObjectUtil::isNotEmpty).distinct().collect(Collectors.toList());
Map<String, SysUser> userMap = getUserMapByPhoneList(phoneList);
for (TblQimoNotice tblQimoNotice : list) {
CallLogExportVO exportVO = new CallLogExportVO();
SysUser user = userMap.get(tblQimoNotice.getCallNo());
// 设置单位信息
String orgName = Optional.ofNullable(user).map(u -> {
SysDepart secondDepart = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(u.getOrgCode()));
return Optional.ofNullable(secondDepart).map(SysDepart::getDepartName).orElse("");
}).orElse("");
exportVO.setOrgName(orgName);
// 设置部门信息
String departName = Optional.ofNullable(user).map(u -> {
SysDepart thirdDepart = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(u.getOrgCode()));
return Optional.ofNullable(thirdDepart).map(SysDepart::getDepartName).orElse("");
}).orElse("");
exportVO.setDepartName(departName);
// 设置用户信息
if (user != null) {
exportVO.setRealName(user.getRealname());
exportVO.setSex(user.getSex());
} else {
exportVO.setRealName("未知用户_" + tblQimoNotice.getCallNo());
}
// 设置其他字段
exportVO.setCenterName(Optional.ofNullable(groupedMap.get(tblQimoNotice.getExten())).map(EmergencyGrouped::getCenterName).orElse(""));
exportVO.setSeatId(tblQimoNotice.getExten());
exportVO.setPhone(tblQimoNotice.getCallNo());
Optional.ofNullable(tblQimoNotice.getBegin())
.ifPresent(begin -> Optional.ofNullable(tblQimoNotice.getEnd()).ifPresent(end -> {
exportVO.setCallDuration(String.valueOf(end.getTime() - begin.getTime()));
}));
exportVO.setCallTime(Optional.ofNullable(tblQimoNotice.getBegin())
.map(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)::format).orElse(""));
exports.add(exportVO);
}
}
// 导出设置
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
// 此处设置的filename无效 ,前端会重新更新设置一下
String encode = null;
try {
encode = URLEncoder.encode(sheetName, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error("导出文件名编码异常", e);
}
// 配置导出参数
ExportParams exportParams = new ExportParams(sheetName + "报表", "导出人:" + sysUser.getRealname(), sheetName);
exportParams.setStyle(ExcelExportStylerBorderImpl.class);
exportParams.setImageBasePath(upLoadPath);
// 设置导出的数据
mv.addObject(NormalExcelConstants.FILE_NAME, encode);
mv.addObject(NormalExcelConstants.CLASS, CallLogExportVO.class);
mv.addObject(NormalExcelConstants.PARAMS, exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exports);
// 记录条数
info.setHandleMsg(exports.size()+ "/" + exports.size());
// 生成 Workbook 对象并修改
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, CallLogExportVO.class, exports);
Sheet sheet = workbook.getSheetAt(0);
try {
// 将 Workbook 写入 ByteArrayOutputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
workbook.write(out);
byte[] workbookBytes = out.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(workbookBytes);
// 上传 FTP
String suffixName = ".xlsx";
in.reset();
String url = MyUploadUtil.upload(in, MyUploadUtil.IMPORT_BIZ, fileName + suffixName);
info.setExportUrl(url);
// 关闭流
in.close();
out.close();
} catch (Exception e) {
log.error("导出异常", e);
} finally {
// 数据导入完成
info.setExportStatus(empFinish);
info.setExportMsg("医护人员导出完成");
info.setHandleEndTime(new Date());
GlobalUtils.setFeignToken();
sysBaseAPI.updateExportsInfo(info);
}
}
/**
* 获取坐席组map
* @param seatIdList 工号list
* @return 坐席组list
*/
private Map<String, EmergencyGrouped> getGroupedMapBySeatIdList(List<String> seatIdList) {
MPJLambdaQueryWrapper<EmergencyGrouped> seatWrapper = new MPJLambdaQueryWrapper<>();
seatWrapper.selectAll(EmergencyGrouped.class);
seatWrapper.in(EmergencyGrouped::getSeatId, seatIdList);
List<EmergencyGrouped> groupedList = groupedService.list(seatWrapper);
return groupedList.stream().collect(Collectors.toMap(EmergencyGrouped::getSeatId, item -> item));
}
/**
* 批量根据手机号获取用户map
* @param phoneList
* @return
*/
private Map<String, SysUser> getUserMapByPhoneList(List<String> phoneList) {
Result<List<SysUser>> userByPhoneList = sysBaseAPI.getUserByPhoneList(phoneList);
return userByPhoneList.getResult().stream()
.collect(Collectors.toMap(
SysUser::getPhone,
item -> item,
(existing, replacement) -> existing // 如果有重复,保留现有项
));
}
}
@@ -0,0 +1,114 @@
package com.renkang.emergency.beanvalidator;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Validator;
import java.util.*;
/**
* JSR303 Validator(Hibernate Validator)工具类.
* <p>
* ConstraintViolation中包含propertyPath, message 和invalidValue等信息.
* 提供了各种convert方法,适合不同的i18n需求:
* 1.List<String>, String内容为message
* 2.List<String>, String内容为propertyPath + separator + message
* 3.Map<propertyPath, message>
*/
public class BeanValidators {
/**
* 调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException.
*/
public static void validateWithException(Validator validator,
Object object, Class<?>... groups)
throws ConstraintViolationException {
Set constraintViolations = validator.validate(object, groups);
if (!constraintViolations.isEmpty()) {
throw new ConstraintViolationException(constraintViolations);
}
}
/**
* 辅助方法,
* 转换ConstraintViolationException中的Set<ConstraintViolations>中为List<message>.
*/
public static List<String> extractMessage(ConstraintViolationException e) {
return extractMessage(e.getConstraintViolations());
}
/**
* 辅助方法, 转换Set<ConstraintViolation>为List<message>
*/
public static List<String> extractMessage(
Set<? extends ConstraintViolation> constraintViolations) {
List<String> errorMessages = new ArrayList<String>();
for (ConstraintViolation violation : constraintViolations) {
errorMessages.add(violation.getMessage());
}
return errorMessages;
}
/**
* 辅助方法,
* 转换ConstraintViolationException中的Set<ConstraintViolations>为Map<property,
* message>.
*/
public static Map<String, String> extractPropertyAndMessage(
ConstraintViolationException e) {
return extractPropertyAndMessage(e.getConstraintViolations());
}
/**
* 辅助方法, 转换Set<ConstraintViolation>为Map<property, message>.
*/
public static Map<String, String> extractPropertyAndMessage(
Set<? extends ConstraintViolation> constraintViolations) {
Map<String, String> errorMessages = new HashMap<String, String>();
for (ConstraintViolation violation : constraintViolations) {
errorMessages.put(violation.getPropertyPath().toString(),
violation.getMessage());
}
return errorMessages;
}
/**
* 辅助方法, 转换ConstraintViolationException中的Set<ConstraintViolations>为List<
* propertyPath message>.
*/
public static List<String> extractPropertyAndMessageAsList(
ConstraintViolationException e) {
return extractPropertyAndMessageAsList(e.getConstraintViolations(), " ");
}
/**
* 辅助方法, 转换Set<ConstraintViolations>为List<propertyPath message>.
*/
public static List<String> extractPropertyAndMessageAsList(
Set<? extends ConstraintViolation> constraintViolations) {
return extractPropertyAndMessageAsList(constraintViolations, " ");
}
/**
* 辅助方法, 转换ConstraintViolationException中的Set<ConstraintViolations>为List<
* propertyPath +separator+ message>.
*/
public static List<String> extractPropertyAndMessageAsList(
ConstraintViolationException e, String separator) {
return extractPropertyAndMessageAsList(e.getConstraintViolations(),
separator);
}
/**
* 辅助方法, 转换Set<ConstraintViolation>为List<propertyPath +separator+ message>.
*/
public static List<String> extractPropertyAndMessageAsList(
Set<? extends ConstraintViolation> constraintViolations,
String separator) {
List<String> errorMessages = new ArrayList<String>();
for (ConstraintViolation violation : constraintViolations) {
errorMessages.add(violation.getPropertyPath() + separator
+ violation.getMessage());
}
return errorMessages;
}
}
@@ -0,0 +1,255 @@
package com.renkang.emergency.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Aed;
import com.renkang.emergency.manager.AedCacheManager;
import com.renkang.emergency.manager.AedManger;
import com.renkang.emergency.service.IAedService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @Description: aed
* @Author: jeecg-boot
* @Date: 2023-12-12
* @Version: V1.0
*/
@Tag(name = "aed")
@RestController
@RequestMapping("/emergency/aed")
@Slf4j
public class AedController extends JeecgController<Aed, IAedService> {
@Autowired
private IAedService aedService;
@Autowired
private AedManger aedManger;
@Autowired
private AedCacheManager aedCacheManager;
@Autowired
private ISysCache sysCache;
/**
* 分页列表查询
*
* @param aed
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "aed-分页列表查询")
@Operation(summary = "aed-分页列表查询", description = "aed-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<Aed>> queryPageList(Aed aed,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<Aed> queryWrapper = QueryGenerator.initQueryWrapper(aed, req.getParameterMap());
Page<Aed> page = new Page<Aed>(pageNo, pageSize);
IPage<Aed> pageList = aedService.page(page, queryWrapper);
handleDepartName(pageList.getRecords());
return Result.OK(pageList);
}
private void handleDepartName(List<Aed> list) {
if (CollectionUtil.isEmpty(list)) {
return;
}
list.forEach(aed -> {
// 单位
SysDepart sysDepart = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(aed.getDepartCode()));
if (sysDepart != null) {
aed.setSecondDepartName(sysDepart.getDepartName());
}
// 部门
if (StrUtil.isNotBlank(aed.getDepartCode()) && aed.getDepartCode().length() > 6) {
SysDepart secondDepart = sysCache.getDepartByOrgCode(aed.getDepartCode());
if (secondDepart != null) {
aed.setDepartName(secondDepart.getDepartName());
}
}
// 管理部门
SysDepart manageDepart = sysCache.getDepartByOrgCode(aed.getManageDepartCode());
if (manageDepart != null) {
aed.setManageDepartName(manageDepart.getDepartName());
}
});
}
/**
* 添加
*
* @param aed
* @return
*/
@AutoLog(value = "aed-添加")
@Operation(summary = "aed-添加", description = "aed-添加")
// @RequiresPermissions("emergency:aed:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody Aed aed) {
if (ObjectUtil.isNotNull(aed.getLongitude())) {
if (aed.getLongitude().compareTo(EmergencyConstants.LONGITUDE_START) < 0
|| aed.getLongitude().compareTo(EmergencyConstants.LONGITUDE_END) > 0) {
return Result.error("经度范围正常值为:" + EmergencyConstants.LONGITUDE_START + "--" + EmergencyConstants.LONGITUDE_END);
}
}
if (ObjectUtil.isNotNull(aed.getLatitude())) {
if (aed.getLatitude().compareTo(EmergencyConstants.LATITUDE_START) < 0
|| aed.getLatitude().compareTo(EmergencyConstants.LATITUDE_END) > 0) {
return Result.error("维度范围正常值为:" + EmergencyConstants.LATITUDE_START + "--" + EmergencyConstants.LATITUDE_END);
}
}
// 数据保存
aedService.save(aed);
// 添加redis geo
aedManger.addGeo(aed);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param aed
* @return
*/
@AutoLog(value = "aed-编辑")
@Operation(summary = "aed-编辑", description = "aed-编辑")
// @RequiresPermissions("emergency:aed:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody Aed aed) {
if (ObjectUtil.isNotNull(aed.getLongitude())) {
if (aed.getLongitude().compareTo(EmergencyConstants.LONGITUDE_START) < 0
|| aed.getLongitude().compareTo(EmergencyConstants.LONGITUDE_END) > 0) {
return Result.error("经度范围正常值为:" + EmergencyConstants.LONGITUDE_START + "--" + EmergencyConstants.LONGITUDE_END);
}
}
if (ObjectUtil.isNotNull(aed.getLatitude())) {
if (aed.getLatitude().compareTo(EmergencyConstants.LATITUDE_START) < 0
|| aed.getLatitude().compareTo(EmergencyConstants.LATITUDE_END) > 0) {
return Result.error("维度范围正常值为:" + EmergencyConstants.LATITUDE_START + "--" + EmergencyConstants.LATITUDE_END);
}
}
// 编辑数据
aedService.updateById(aed);
// 删除旧数据缓存
aedCacheManager.deleteCache(aed.getId());
// 编辑redis geo
aedManger.updateGeo(aed);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "aed-通过id删除")
@Operation(summary = "aed-通过id删除", description = "aed-通过id删除")
// @RequiresPermissions("emergency:aed:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) Integer id) {
aedService.removeById(id);
// redis geo
aedManger.removeGeo(id);
// 删除缓存
aedCacheManager.deleteCache(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "aed-批量删除")
@Operation(summary = "aed-批量删除", description = "aed-批量删除")
// @RequiresPermissions("emergency:aed:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
List<String> list = Arrays.asList(ids.split(","));
if (CollectionUtil.isEmpty(list)) {
return Result.error("参数为空!");
}
// 删除数据
this.aedService.removeByIds(list);
list.forEach(id -> {
Integer cacheId = Integer.valueOf(id);
aedManger.removeGeo(cacheId);
aedCacheManager.deleteCache(cacheId);
});
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "aed-通过id查询")
@Operation(summary = "aed-通过id查询", description = "aed-通过id查询")
@GetMapping(value = "/queryById")
public Result<Aed> queryById(@RequestParam(name = "id") Integer id) {
Aed aed = aedCacheManager.getOne(id);
if (aed == null) {
return Result.error("未找到对应数据");
}
return Result.OK(aed);
}
/**
* 导出excel
*
* @param request
* @param aed
*/
@RequiresPermissions("emergency:aed:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, Aed aed) {
return super.exportXls(request, aed, Aed.class, "aed");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:aed:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, Aed.class);
}
}
@@ -0,0 +1,154 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.entity.AedLatest;
import com.renkang.emergency.service.IAedLatestService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
* @Description: aed_latest
* @Author: jeecg-boot
* @Date: 2023-12-12
* @Version: V1.0
*/
@Tag(name = "aed_latest")
@RestController
@RequestMapping("/emergency/aedLatest")
@Slf4j
public class AedLatestController extends JeecgController<AedLatest, IAedLatestService> {
@Autowired
private IAedLatestService aedLatestService;
/**
* 分页列表查询
*
* @param aedLatest
* @param pageNo
* @param pageSize
* @return
*/
//@AutoLog(value = "aed_latest-分页列表查询")
@Operation(summary = "aed_latest-分页列表查询", description = "aed_latest-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<AedLatest>> queryPageList(AedLatest aedLatest,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
return Result.OK(aedLatestService.pageCustom(aedLatest,pageNo,pageSize));
}
/**
* 添加
*
* @param aedLatest
* @return
*/
@AutoLog(value = "aed_latest-添加")
@Operation(summary = "aed_latest-添加", description = "aed_latest-添加")
@RequiresPermissions("emergency:aed_latest:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody AedLatest aedLatest) {
aedLatestService.save(aedLatest);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param aedLatest
* @return
*/
@AutoLog(value = "aed_latest-编辑")
@Operation(summary = "aed_latest-编辑", description = "aed_latest-编辑")
@RequiresPermissions("emergency:aed_latest:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody AedLatest aedLatest) {
aedLatestService.updateById(aedLatest);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "aed_latest-通过id删除")
@Operation(summary = "aed_latest-通过id删除", description = "aed_latest-通过id删除")
@RequiresPermissions("emergency:aed_latest:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
aedLatestService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "aed_latest-批量删除")
@Operation(summary = "aed_latest-批量删除", description = "aed_latest-批量删除")
@RequiresPermissions("emergency:aed_latest:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.aedLatestService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "aed_latest-通过id查询")
@Operation(summary = "aed_latest-通过id查询", description = "aed_latest-通过id查询")
@GetMapping(value = "/queryById")
public Result<AedLatest> queryById(@RequestParam(name = "id", required = true) String id) {
AedLatest aedLatest = aedLatestService.getById(id);
if (aedLatest == null) {
return Result.error("未找到对应数据");
}
return Result.OK(aedLatest);
}
/**
* 导出excel
*
* @param request
* @param aedLatest
*/
@RequiresPermissions("emergency:aed_latest:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, AedLatest aedLatest) {
return super.exportXls(request, aedLatest, AedLatest.class, "aed_latest");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:aed_latest:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, AedLatest.class);
}
}
@@ -0,0 +1,81 @@
package com.renkang.emergency.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.entity.AedWarnInfo;
import com.renkang.emergency.service.IAedWarnInfoService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.global.GlobalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: aed_warn_info
* @Author: jeecg-boot
* @Date: 2023-12-12
* @Version: V1.0
*/
@Tag(name = "aed_warn_info")
@RestController
@RequestMapping("/emergency/aedWarnInfo")
@Slf4j
public class AedWarnInfoController extends JeecgController<AedWarnInfo, IAedWarnInfoService> {
@Autowired
private IAedWarnInfoService aedWarnInfoService;
/**
* 自定义分页列表
* @param aedWarnInfo 条件
* @param pageNo 页码
* @param pageSize 条数
* @return page
*/
@GetMapping(value = "/listCustom")
public Result<IPage<AedWarnInfo>> listCustom(AedWarnInfo aedWarnInfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
return Result.OK(aedWarnInfoService.pageCustom(pageNo,pageSize, aedWarnInfo));
}
/**
* 修改处理信息
* @param id id
* @param warnInfo 报警信息
* @return boolean
*/
@GetMapping(value = "/updateHandleInfo")
public Result<String> updateHandleInfo(@RequestParam Integer id,@RequestParam String warnInfo) {
if (ObjectUtil.isNull(id) || StrUtil.isBlank(warnInfo)) {
return Result.error("参数缺失");
}
boolean b = aedWarnInfoService.updateHandleInfo(id, warnInfo);
return GlobalUtils.getResult(b, b ? "成功" : "失败",null);
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "aed_warn_info-通过id查询")
@Operation(summary = "aed_warn_info-通过id查询", description = "aed_warn_info-通过id查询")
@GetMapping(value = "/queryById")
public Result<AedWarnInfo> queryById(@RequestParam(name="id",required=true) String id) {
AedWarnInfo aedWarnInfo = aedWarnInfoService.getById(id);
if(aedWarnInfo==null) {
return Result.error("未找到对应数据");
}
return Result.OK(aedWarnInfo);
}
}
@@ -0,0 +1,113 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.bean.request.AddBatchAdmin;
import com.renkang.emergency.entity.EmergencyCenterAdmin;
import com.renkang.emergency.service.IEmergencyCenterAdminService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.system.entity.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @Name EmergencyCenterController
* @Author YangYuanChen
* @Data 20242024/8/21下午3:02
*/
@Tag(name = "emergency_center_list")
@RestController
@RequestMapping("/emergency/center/admin")
@Slf4j
public class EmergencyCenterAdminController extends JeecgController<EmergencyCenterAdmin, IEmergencyCenterAdminService> {
@Autowired
private IEmergencyCenterAdminService emergencyCenterAdminService;
/**
* 管理员列表接口
*
* @param realName 真实姓名
* @param centerId 中心id
* @param type 类型 0:管理员 1:大屏管理员
* @param pageNo 页码
* @param pageSize 条数
* @return page
*/
@GetMapping("list")
public Result<IPage<EmergencyCenterAdmin>> page(@RequestParam(required = false) String realName,
@RequestParam String centerId,
@RequestParam String type,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
return Result.ok(emergencyCenterAdminService.customPage(centerId, type, realName, pageNo, pageSize));
}
/**
* 添加大屏管理员
*
* @param admin data
* @return string
*/
@PostMapping("addCenterAdmin")
public Result<String> addCenterAdmin(@RequestBody @Validated EmergencyCenterAdmin admin) {
emergencyCenterAdminService.addCenterAdmin(admin);
return Result.ok("添加成功");
}
/**
* 添加大屏管理员批量
*
* @param admins data
* @return string
*/
@PostMapping("addBatchCenterAdmin")
public Result<String> addBatchCenterAdmin(@RequestBody @Validated AddBatchAdmin admins) {
emergencyCenterAdminService.addBatchCenterAdmin(admins);
return Result.ok("添加成功");
}
/**
* 修改管理员 只能修改姓名
*
* @param admin data
* @return string
*/
@PostMapping("updateAdmin")
public Result<String> updateAdmin(@RequestBody EmergencyCenterAdmin admin) {
emergencyCenterAdminService.updateAdmin(admin);
return Result.ok("修改成功");
}
/**
* 删除管理员
*
* @param admin data
* @return string
*/
@PostMapping("delAdmin")
public Result<String> delAdmin(@RequestBody EmergencyCenterAdmin admin) {
emergencyCenterAdminService.delAdmin(admin);
return Result.ok("删除成功");
}
/**
* 选择用户
*
* @param filter data
* @return page
*/
@GetMapping("chooseUser")
public Result<?> chooseUser(SysUser filter,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
return Result.ok(emergencyCenterAdminService.chooseUser(filter, pageNo, pageSize));
}
}
@@ -0,0 +1,172 @@
package com.renkang.emergency.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.bean.response.SimpleCenter;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.EmergencyCenter;
import com.renkang.emergency.service.IEmergencyCenterService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Name EmergencyCenterController
* @Author YangYuanChen
* @Data 20242024/8/21下午3:02
*/
@Tag(name = "emergency_center_list")
@RestController
@RequestMapping("/emergency/center")
@Slf4j
public class EmergencyCenterController extends JeecgController<EmergencyCenter, IEmergencyCenterService> {
@Autowired
private IEmergencyCenterService centerListService;
/**
* 新增急救中心数据
*/
@Operation(summary = "emergency_center-新增急救中心数据", description = "emergency_center-新增急救中心数据")
@PostMapping("/addCenter")
public Result<String> addCenter(@Validated @RequestBody EmergencyCenter emergencyGrouped) {
centerListService.customSave(emergencyGrouped);
return Result.OK("新增数据成功");
}
/**
* 分页查询急救中心列表数据
*/
@Operation(summary = "emergency_center-分页查询急救中心列表数据", description = "emergency_center-分页查询急救中心列表数据")
@GetMapping("/list")
public Result<IPage<EmergencyCenter>> pageList(@RequestParam(required = false) String name,
@RequestParam(required = false) String orgCode,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
IPage<EmergencyCenter> pageList = centerListService.customPage(name, orgCode, pageNo, pageSize);
return Result.OK(pageList);
}
/**
* 所有的应急中心
*/
@GetMapping("/allCenter")
public Result<List<SimpleCenter>> allCenter() {
return Result.ok(centerListService.allCenter());
}
/**
* 删除中心
*
* @param center data
* @return string
*/
@PostMapping("delCenter")
public Result<String> delCenter(@RequestBody EmergencyCenter center) {
// todo 删除中心 人员是否删除?
centerListService.delCenter(center);
return Result.OK("删除成功");
}
/**
* 修改中心
*
* @param center data
* @return string
*/
@PostMapping("updateCenter")
public Result<String> updateCenter(@RequestBody @Validated EmergencyCenter center) {
centerListService.customUpdate(center);
return Result.OK("修改成功");
}
/**
* 开启关闭
*
* @param center data
* @return string
*/
@PostMapping("updateCenterStatus")
public Result<String> updateCenterStatus(@RequestBody EmergencyCenter center) {
if (StrUtil.isBlank(center.getId()) || StrUtil.isBlank(center.getStatus())) {
return Result.error("未知参数");
}
if (!(EmergencyConstants.CENTER_STATUS_0.equals(center.getStatus()) || EmergencyConstants.CENTER_STATUS_1.equals(center.getStatus()))) {
return Result.error("修改状态异常");
}
// 关闭中心
if (EmergencyConstants.CENTER_STATUS_1.equals(center.getStatus())) {
// 默认应急中心不能关闭
EmergencyCenter byId = centerListService.getById(center.getId());
if (byId.getDefaultCenter()) {
return Result.error("默认中心不能关闭");
}
}
EmergencyCenter update = new EmergencyCenter();
update.setId(center.getId());
update.setStatus(center.getStatus());
centerListService.updateById(update);
return Result.OK("修改成功");
}
/**
* 数据导出
*
* @param name 姓名
* @param orgCode 单位code
* @return excel
*/
@GetMapping("export")
public Result<String> export(@RequestParam(required = false) String name,
@RequestParam(required = false) String orgCode) {
centerListService.export(name, orgCode);
return Result.ok("导出成功,请在导出记录查看");
}
/**
* 设置默认中心
*
* @param centerId 中心id
* @param defaultCenter true/false
* @return string
*/
@GetMapping("settingDefaultCenter")
public Result<String> settingDefaultCenter(@RequestParam String centerId,
@RequestParam Boolean defaultCenter) {
centerListService.settingDefaultCenter(centerId, defaultCenter);
return Result.ok("设置成功");
}
@GetMapping("getCenterDetail")
@Operation(summary = "获取登录人应急中心数据", description = "获取登录人应急中心数据")
public Result<EmergencyCenter> getCenterDetail() {
return Result.OK(centerListService.getCenterDetail());
}
@GetMapping("/getOrgCodesByCenterId")
public Result<String> getOrgCodesByCenterId(@RequestParam(name = "centerId") String centerId) {
EmergencyCenter center = centerListService.getById(centerId);
if (ObjectUtil.isNotEmpty(center)) {
return Result.ok(center.getServiceScope());
}
return Result.ok("");
}
@GetMapping("/getCenterIdByOrgCodeList")
public Result<EmergencyCenter> getCenterIdByOrgCodeList(@RequestParam(name = "userOrgCode") String userOrgCode) {
return Result.ok(centerListService.getCenterIdByOrgCodeList(userOrgCode));
}
}
@@ -0,0 +1,229 @@
package com.renkang.emergency.controller;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.EmergencyCenterResource;
import com.renkang.emergency.service.IEmergencyCenterResourceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 应急医疗点
* @Author: jeecg-boot
* @Date: 2024-09-19
* @Version: V1.0
*/
@Tag(name="应急医疗点")
@RestController
@RequestMapping("/emergency/emergencyCenterResource")
@Slf4j
public class EmergencyCenterResourceController extends JeecgController<EmergencyCenterResource, IEmergencyCenterResourceService> {
@Autowired
private IEmergencyCenterResourceService emergencyCenterResourceService;
/**
* 分页列表查询
*
* @param emergencyCenterResource
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "应急医疗点-分页列表查询")
//@Operation(summary="应急医疗点-分页列表查询", description="应急医疗点-分页列表查询")
//@PostMapping(value = "/list")
/*public Result<Page<MedicalResource>> queryPageList(@RequestBody EmergencyCenterResource emergencyCenterResource,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
List<EmergencyCenterResource> medicalResourceIds = emergencyCenterResourceService.lambdaQuery()
.eq(EmergencyCenterResource::getEmergencyCenterId, emergencyCenterResource.getEmergencyCenterId())
.select(EmergencyCenterResource::getMedicalResourceId)
.list();
if(CollectionUtil.isEmpty(medicalResourceIds)){
return Result.ok();
}
List<String> medicals = medicalResourceIds.stream() // 流处理
.map(EmergencyCenterResource::getMedicalResourceId) // 获取 medicalResourceId
.collect(Collectors.toList());
Result<Page<MedicalResource>> pageList = medicalCenterApi.selectResourceByHospitalBack(medicals,emergencyCenterResource.getOrgCode(),emergencyCenterResource.getName(),pageNo,pageSize);
return pageList;
}*/
/**
* 添加
*
* @param emergencyCenterResource
* @return
*/
@AutoLog(value = "应急医疗点-添加")
@Operation(summary="应急医疗点-添加", description="应急医疗点-添加")
// @RequiresPermissions("emergency:emergency_center_resource:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody EmergencyCenterResource emergencyCenterResource) {
List<String> resources = emergencyCenterResource.getResources();
for (String resource : resources) {
LambdaQueryWrapper<EmergencyCenterResource> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(EmergencyCenterResource::getEmergencyCenterId,emergencyCenterResource.getEmergencyCenterId());
lambdaQueryWrapper.eq(EmergencyCenterResource::getMedicalResourceId,resource);
long existData = emergencyCenterResourceService.count(lambdaQueryWrapper);
if(existData > 0){
continue;
}
EmergencyCenterResource emergencyCenterResourceOnly = new EmergencyCenterResource();
emergencyCenterResourceOnly.setEmergencyCenterId(emergencyCenterResource.getEmergencyCenterId());
emergencyCenterResourceOnly.setMedicalResourceId(resource);
emergencyCenterResourceService.save(emergencyCenterResourceOnly);
}
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param emergencyCenterResource
* @return
*/
@AutoLog(value = "应急医疗点-编辑")
@Operation(summary="应急医疗点-编辑", description="应急医疗点-编辑")
@RequiresPermissions("emergency:emergency_center_resource:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody EmergencyCenterResource emergencyCenterResource) {
LambdaQueryWrapper<EmergencyCenterResource> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(EmergencyCenterResource::getEmergencyCenterId,emergencyCenterResource.getEmergencyCenterId());
lambdaQueryWrapper.eq(EmergencyCenterResource::getMedicalResourceId,emergencyCenterResource.getMedicalResourceId());
lambdaQueryWrapper.ne(EmergencyCenterResource::getId,emergencyCenterResource.getId());
long existData = emergencyCenterResourceService.count(lambdaQueryWrapper);
if(existData > 0){
return Result.error("医疗点已存在");
}
emergencyCenterResourceService.updateById(emergencyCenterResource);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "应急医疗点-通过id删除")
@Operation(summary="应急医疗点-通过id删除", description="应急医疗点-通过id删除")
@RequiresPermissions("emergency:emergency_center_resource:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="emergencyCenterId",required=true) String emergencyCenterId,
@RequestParam(name="medicalResourceId",required=true) String medicalResourceId) {
emergencyCenterResourceService.lambdaUpdate().eq(EmergencyCenterResource::getEmergencyCenterId,emergencyCenterId).eq(EmergencyCenterResource::getMedicalResourceId,medicalResourceId).remove();
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "应急医疗点-批量删除")
@Operation(summary="应急医疗点-批量删除", description="应急医疗点-批量删除")
@RequiresPermissions("emergency:emergency_center_resource:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="emergencyCenterId",required=true) String emergencyCenterIds,
@RequestParam(name="emergencyCenterId",required=true) String emergencyCenterId) {
String[] idList = emergencyCenterIds.split(",");
for (String s : idList) {
emergencyCenterResourceService.lambdaUpdate().eq(EmergencyCenterResource::getEmergencyCenterId,emergencyCenterId).eq(EmergencyCenterResource::getMedicalResourceId,s).remove();
}
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "应急医疗点-通过id查询")
@Operation(summary="应急医疗点-通过id查询", description="应急医疗点-通过id查询")
@GetMapping(value = "/queryById")
public Result<EmergencyCenterResource> queryById(@RequestParam(name="id",required=true) String id) {
EmergencyCenterResource emergencyCenterResource = emergencyCenterResourceService.getById(id);
if(emergencyCenterResource==null) {
return Result.error("未找到对应数据");
}
return Result.OK(emergencyCenterResource);
}
/**
* 导出excel
*
* @param request
* @param emergencyCenterResource
*/
@RequiresPermissions("emergency:emergency_center_resource:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, EmergencyCenterResource emergencyCenterResource) {
return super.exportXls(request, emergencyCenterResource, EmergencyCenterResource.class, "应急医疗点");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_center_resource:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, EmergencyCenterResource.class);
}
@AutoLog(value = "应急医疗点-通过id删除")
@Operation(summary="应急医疗点-通过id删除", description="应急医疗点-通过id删除")
@RequiresPermissions("emergency:emergency_center_resource:delete")
@DeleteMapping(value = "/deleteResource")
public Result<String> deleteResource(@RequestParam(name="id",required=true) String id) {
boolean removed = emergencyCenterResourceService.lambdaUpdate()
.eq(EmergencyCenterResource::getId,id)
.remove();
return Result.OK("删除成功!");
}
}
@@ -0,0 +1,205 @@
package com.renkang.emergency.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.EmergencyGrouped;
import com.renkang.emergency.entity.TblQimoNotice;
import com.renkang.emergency.entity.dto.EmergencyGroupedDTO;
import com.renkang.emergency.entity.dto.TblQimoNoticeDTO;
import com.renkang.emergency.entity.vo.EmergencyGroupedVO;
import com.renkang.emergency.entity.vo.TblQimoNoticeVO;
import com.renkang.emergency.service.IEmergencyGroupedService;
import com.renkang.emergency.service.ITbQimoNoticeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 分组管理表
* @Author: jeecg-boot
* @Date: 2024-09-09
* @Version: V1.0
*/
@Tag(name="分组管理表")
@RestController
@RequestMapping("/emergency/emergencyGrouped")
@Slf4j
public class EmergencyGroupedController extends JeecgController<EmergencyGrouped, IEmergencyGroupedService> {
@Autowired
private IEmergencyGroupedService emergencyGroupedService;
@Autowired
private ITbQimoNoticeService noticeService;
/**
* 分页列表查询
*
* @param dto
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "分组管理表-分页列表查询")
@Operation(summary="分组管理表-分页列表查询", description="分组管理表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<EmergencyGrouped>> queryPageList(EmergencyGroupedDTO dto,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Page<EmergencyGrouped> page = new Page<EmergencyGrouped>(pageNo, pageSize);
IPage<EmergencyGrouped> pageList = emergencyGroupedService.queryPageList(page, dto);
return Result.OK(pageList);
}
/**
* 通话记录-分页列表查询
*
* @param dto
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "通话记录-分页列表查询")
@Operation(summary="通话记录-分页列表查询", description="通话记录-分页列表查询")
@GetMapping(value = "/callList")
public Result<IPage<TblQimoNoticeVO>> queryCallPageList(TblQimoNoticeDTO dto,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Page<TblQimoNotice> page = new Page<TblQimoNotice>(pageNo, pageSize);
IPage<TblQimoNoticeVO> pageList = emergencyGroupedService.queryCallPageList(page, dto);
return Result.OK(pageList);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "通话记录-通过id删除通话记录")
@Operation(summary="通话记录-通过id删除通话记录", description="通话记录-通过id删除通话记录")
@DeleteMapping(value = "/callDelete")
public Result<String> callDelete(@RequestParam(name="id",required=true) String id) {
noticeService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 添加
*
* @param emergencyGrouped
* @return
*/
@AutoLog(value = "分组管理表-添加")
@Operation(summary="分组管理表-添加", description="分组管理表-添加")
@RequiresPermissions("emergency:emergency_grouped:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody EmergencyGrouped emergencyGrouped) {
emergencyGroupedService.saveData(emergencyGrouped);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param emergencyGrouped
* @return
*/
@AutoLog(value = "分组管理表-编辑")
@Operation(summary="分组管理表-编辑", description="分组管理表-编辑")
@RequiresPermissions("emergency:emergency_grouped:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody EmergencyGrouped emergencyGrouped) {
emergencyGroupedService.updateData(emergencyGrouped);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "分组管理表-通过id删除")
@Operation(summary="分组管理表-通过id删除", description="分组管理表-通过id删除")
@RequiresPermissions("emergency:emergency_grouped:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
emergencyGroupedService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "分组管理表-批量删除")
@Operation(summary="分组管理表-批量删除", description="分组管理表-批量删除")
@RequiresPermissions("emergency:emergency_grouped:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.emergencyGroupedService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "分组管理表-通过id查询")
@Operation(summary="分组管理表-通过id查询", description="分组管理表-通过id查询")
@GetMapping(value = "/queryById")
public Result<EmergencyGrouped> queryById(@RequestParam(name="id",required=true) String id) {
EmergencyGrouped emergencyGrouped = emergencyGroupedService.getById(id);
if(emergencyGrouped==null) {
return Result.error("未找到对应数据");
}
return Result.OK(emergencyGrouped);
}
/**
* 导出excel
*
* @param request
* @param emergencyGrouped
*/
@RequiresPermissions("emergency:emergency_grouped:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, EmergencyGrouped emergencyGrouped) {
return super.exportXls(request, emergencyGrouped, EmergencyGrouped.class, "分组管理表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_grouped:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, EmergencyGrouped.class);
}
}
@@ -0,0 +1,82 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.entity.EmergencyProfessionUser;
import com.renkang.emergency.service.EmergencyProfessionUserService;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* (EmergencyProfessionUser)表控制层
*
* @author stan
* @since 2024-09-12 09:38:00
*/
@RestController
@RequestMapping("/emergency/profession/user")
@Slf4j
public class EmergencyProfessionUserController {
@Autowired
private EmergencyProfessionUserService emergencyProfessionUserService;
/**
* 分页列表
* @param name 姓名
* @param centerId 中心id
* @param type 人员类型 5:操作 6:专业
* @param pageNo 页码
* @param pageSize 条数
* @return page 分页数据
*/
@GetMapping("/list")
public Result<IPage<EmergencyProfessionUser>> list(@RequestParam(required = false) String name,
@RequestParam(required = false) String centerId,
@RequestParam(name = "type", defaultValue = "5") Integer type,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
IPage<EmergencyProfessionUser> pageList = emergencyProfessionUserService.customPage(name, centerId, type, pageNo, pageSize);
return Result.OK(pageList);
}
/**
* 新增数据
*
* @param emergencyProfessionUser 新增数据
* @return String
*/
@PostMapping("/add")
public Result<String> add(@RequestBody @Validated EmergencyProfessionUser emergencyProfessionUser) {
emergencyProfessionUserService.customAdd(emergencyProfessionUser);
return Result.OK("添加成功!");
}
/**
* 编辑数据
*
* @param data 编辑数据
* @return String
*/
@PostMapping("/edit")
public Result<String> edit(@RequestBody EmergencyProfessionUser data) {
emergencyProfessionUserService.customEdit(data);
return Result.OK("编辑成功!");
}
/**
* 批量删除数据
*
* @param ids 主键ids
* @return String
*/
@PostMapping("/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids") String ids) {
emergencyProfessionUserService.customRemove(ids);
return Result.OK("删除成功!");
}
}
@@ -0,0 +1,163 @@
package com.renkang.emergency.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.EmergencySchedules;
import com.renkang.emergency.entity.dto.EmergencySchedulesDTO;
import com.renkang.emergency.entity.vo.EmergencySchedulesVO;
import com.renkang.emergency.service.IEmergencySchedulesNewService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 排班表
* @Author: jeecg-boot
* @Date: 2024-09-09
* @Version: V1.0
*/
@Tag(name="排班表")
@RestController
@RequestMapping("/emergency/emergencySchedulesNew")
@Slf4j
public class EmergencySchedulesNewController extends JeecgController<EmergencySchedules, IEmergencySchedulesNewService> {
@Autowired
private IEmergencySchedulesNewService emergencySchedulesNewService;
/**
* 分页列表查询
*
* @param dto
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "排班表-分页列表查询")
@Operation(summary="排班表-分页列表查询", description="排班表-分页列表查询")
@GetMapping(value = "/list")
public Result<EmergencySchedulesVO> queryList(EmergencySchedulesDTO dto,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
return Result.OK(emergencySchedulesNewService.queryList(dto));
}
/**
* 添加
*
* @param dto
* @return
*/
@AutoLog(value = "排班表-添加")
@Operation(summary="排班表-添加", description="排班表-添加")
// @RequiresPermissions("emergency:emergency_schedules_new:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody EmergencySchedulesDTO dto) {
emergencySchedulesNewService.save(dto);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param emergencySchedulesNew
* @return
*/
@AutoLog(value = "排班表-编辑")
@Operation(summary="排班表-编辑", description="排班表-编辑")
@RequiresPermissions("emergency:emergency_schedules_new:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody EmergencySchedules emergencySchedulesNew) {
emergencySchedulesNewService.updateById(emergencySchedulesNew);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "排班表-通过id删除")
@Operation(summary="排班表-通过id删除", description="排班表-通过id删除")
@RequiresPermissions("emergency:emergency_schedules_new:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
emergencySchedulesNewService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "排班表-批量删除")
@Operation(summary="排班表-批量删除", description="排班表-批量删除")
@RequiresPermissions("emergency:emergency_schedules_new:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.emergencySchedulesNewService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "排班表-通过id查询")
@Operation(summary="排班表-通过id查询", description="排班表-通过id查询")
@GetMapping(value = "/queryById")
public Result<EmergencySchedules> queryById(@RequestParam(name="id",required=true) String id) {
EmergencySchedules emergencySchedulesNew = emergencySchedulesNewService.getById(id);
if(emergencySchedulesNew==null) {
return Result.error("未找到对应数据");
}
return Result.OK(emergencySchedulesNew);
}
/**
* 导出excel
*
* @param request
* @param emergencySchedulesNew
*/
@RequiresPermissions("emergency:emergency_schedules_new:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, EmergencySchedules emergencySchedulesNew) {
return super.exportXls(request, emergencySchedulesNew, EmergencySchedules.class, "排班表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_schedules_new:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, EmergencySchedules.class);
}
}
@@ -0,0 +1,162 @@
package com.renkang.emergency.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.EmergencySchedulesItem;
import com.renkang.emergency.service.IEmergencySchedulesNewItemService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 排班子表
* @Author: jeecg-boot
* @Date: 2024-09-09
* @Version: V1.0
*/
@Tag(name="排班子表")
@RestController
@RequestMapping("/emergency/emergencySchedulesNewItem")
@Slf4j
public class EmergencySchedulesNewItemController extends JeecgController<EmergencySchedulesItem, IEmergencySchedulesNewItemService> {
@Autowired
private IEmergencySchedulesNewItemService emergencySchedulesNewItemService;
/**
* 分页列表查询
*
* @param emergencySchedulesNewItem
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "排班子表-分页列表查询")
@Operation(summary="排班子表-分页列表查询", description="排班子表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<EmergencySchedulesItem>> queryPageList(EmergencySchedulesItem emergencySchedulesNewItem,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<EmergencySchedulesItem> queryWrapper = QueryGenerator.initQueryWrapper(emergencySchedulesNewItem, req.getParameterMap());
Page<EmergencySchedulesItem> page = new Page<EmergencySchedulesItem>(pageNo, pageSize);
IPage<EmergencySchedulesItem> pageList = emergencySchedulesNewItemService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param emergencySchedulesNewItem
* @return
*/
@AutoLog(value = "排班子表-添加")
@Operation(summary="排班子表-添加", description="排班子表-添加")
@RequiresPermissions("emergency:emergency_schedules_new_item:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody EmergencySchedulesItem emergencySchedulesNewItem) {
emergencySchedulesNewItemService.save(emergencySchedulesNewItem);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param emergencySchedulesNewItem
* @return
*/
@AutoLog(value = "排班子表-编辑")
@Operation(summary="排班子表-编辑", description="排班子表-编辑")
@RequiresPermissions("emergency:emergency_schedules_new_item:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody EmergencySchedulesItem emergencySchedulesNewItem) {
emergencySchedulesNewItemService.updateById(emergencySchedulesNewItem);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "排班子表-通过id删除")
@Operation(summary="排班子表-通过id删除", description="排班子表-通过id删除")
@RequiresPermissions("emergency:emergency_schedules_new_item:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
emergencySchedulesNewItemService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "排班子表-批量删除")
@Operation(summary="排班子表-批量删除", description="排班子表-批量删除")
@RequiresPermissions("emergency:emergency_schedules_new_item:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.emergencySchedulesNewItemService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "排班子表-通过id查询")
@Operation(summary="排班子表-通过id查询", description="排班子表-通过id查询")
@GetMapping(value = "/queryById")
public Result<EmergencySchedulesItem> queryById(@RequestParam(name="id",required=true) String id) {
EmergencySchedulesItem emergencySchedulesNewItem = emergencySchedulesNewItemService.getById(id);
if(emergencySchedulesNewItem==null) {
return Result.error("未找到对应数据");
}
return Result.OK(emergencySchedulesNewItem);
}
/**
* 导出excel
*
* @param request
* @param emergencySchedulesNewItem
*/
@RequiresPermissions("emergency:emergency_schedules_new_item:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, EmergencySchedulesItem emergencySchedulesNewItem) {
return super.exportXls(request, emergencySchedulesNewItem, EmergencySchedulesItem.class, "排班子表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("com.renkang.emergency:emergency_schedules_new_item:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, EmergencySchedulesItem.class);
}
}
@@ -0,0 +1,353 @@
package com.renkang.emergency.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.api.service.IEmergencySeriousDiseaseService;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.AgeCalculateUtil;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.SysCacheImpl;
import org.jeecg.modules.system.entity.SysDepart;
import org.parboiled.common.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* @Description: 大病就医
* @Author: jeecg-boot
* @Date: 2023-04-23
* @Version: V1.0
*/
@Tag(name = "大病就医")
@RestController
@RequestMapping("/emergency/emergencySeriousDisease")
@Slf4j
public class EmergencySeriousDiseaseController extends JeecgController<EmergencySeriousDisease, IEmergencySeriousDiseaseService> {
@Autowired
private IEmergencySeriousDiseaseService emergencySeriousDiseaseService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private SysCacheImpl sysCache;
@Autowired
private ISysBaseAPI sysBaseAPI;
/**
* 分页列表查询
*
* @param emergencySeriousDisease
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "大病就医-分页列表查询")
@Operation(summary = "大病就医-分页列表查询", description = "大病就医-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<EmergencySeriousDisease>> queryPageList(EmergencySeriousDisease emergencySeriousDisease,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Page<EmergencySeriousDisease> page = new Page<EmergencySeriousDisease>(pageNo, pageSize);
IPage<EmergencySeriousDisease> pageList = emergencySeriousDiseaseService.pageList(page, emergencySeriousDisease);
List<EmergencySeriousDisease> list = pageList.getRecords();
list.forEach(x -> {
String userDepart = x.getUserDepart();
if (StringUtils.isNotEmpty(userDepart)) {
SysDepart secondDepartOrgCode = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(userDepart));
SysDepart thridDepartOrgCode = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(userDepart));
x.setUserDepart("");
if (secondDepartOrgCode != null && thridDepartOrgCode != null) {
x.setUserDepart(secondDepartOrgCode.getDepartName() + "-" + thridDepartOrgCode.getDepartName());
}
}
});
return Result.OK(pageList);
}
/**
* 大病就医-分页列表查询 操作人员
*
* @param emergencySeriousDisease
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@Operation(summary = "大病就医-分页列表查询 操作人员", description = "大病就医-分页列表查询 操作人员")
@GetMapping(value = "/operatorList")
public Result<IPage<EmergencySeriousDisease>> operatorList(EmergencySeriousDisease emergencySeriousDisease,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Page<EmergencySeriousDisease> page = new Page<EmergencySeriousDisease>(pageNo, pageSize);
emergencySeriousDisease.setOperatorId(sysUser.getId());
IPage<EmergencySeriousDisease> pageList = emergencySeriousDiseaseService.pageList(page, emergencySeriousDisease);
List<EmergencySeriousDisease> list = pageList.getRecords();
list.forEach(x -> {
String userDepart = x.getUserDepart();
if (StringUtils.isNotEmpty(userDepart)) {
SysDepart secondDepartOrgCode = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(userDepart));
SysDepart thridDepartOrgCode = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(userDepart));
x.setUserDepart("");
if (secondDepartOrgCode != null && thridDepartOrgCode != null) {
x.setUserDepart(secondDepartOrgCode.getDepartName() + "-" + thridDepartOrgCode.getDepartName());
}
}
});
return Result.OK(pageList);
}
/**
* 添加
*
* @param emergencySeriousDisease
* @return
*/
@AutoLog(value = "大病就医-添加")
@Operation(summary = "大病就医-添加", description = "大病就医-添加")
@RequiresPermissions("emergency:emergency_serious_disease:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody EmergencySeriousDisease emergencySeriousDisease) {
LoginUser loginUser = sysBaseAPI.getUserById(emergencySeriousDisease.getUserId());
if (loginUser == null) {
return Result.error("用户不存在");
}
Date date = new Date();
if (date.getTime() >= emergencySeriousDisease.getDesireTime().getTime()) {
return Result.error("预约时间必须大于当前时间");
}
emergencySeriousDisease.setUserDepart(loginUser.getOrgCode());
emergencySeriousDisease.setState("1");
emergencySeriousDisease.setIsFill(EmergencyConstants.ORDER_IS_FILL_0);
emergencySeriousDisease.setCreateTime(date);
emergencySeriousDisease.setReservationNo(String.valueOf(IdWorker.getId()));
emergencySeriousDisease.setRealname(loginUser.getRealname());
String idCard = loginUser.getIdCard();
if (!com.alibaba.druid.util.StringUtils.isEmpty(idCard)) {
emergencySeriousDisease.setAge(AgeCalculateUtil.countAge(idCard));
}
emergencySeriousDisease.setTelPhone(loginUser.getPhone());
emergencySeriousDisease.setSex(loginUser.getSex());
emergencySeriousDisease.setIdNo(idCard);
emergencySeriousDiseaseService.save(emergencySeriousDisease);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param emergencySeriousDisease
* @return
*/
@AutoLog(value = "大病就医-编辑")
@Operation(summary = "大病就医-编辑", description = "大病就医-编辑")
@RequiresPermissions("emergency:emergency_serious_disease:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody EmergencySeriousDisease emergencySeriousDisease) {
LoginUser loginUser = sysBaseAPI.getUserById(emergencySeriousDisease.getUserId());
if (loginUser == null) {
return Result.error("用户不存在");
}
emergencySeriousDisease.setUserDepart(loginUser.getOrgCode());
emergencySeriousDisease.setState("1");
emergencySeriousDisease.setIsFill(EmergencyConstants.ORDER_IS_FILL_0);
emergencySeriousDisease.setUpdateTime(new Date());
emergencySeriousDisease.setReservationNo(String.valueOf(IdWorker.getId()));
emergencySeriousDisease.setRealname(loginUser.getRealname());
String idCard = loginUser.getIdCard();
if (!com.alibaba.druid.util.StringUtils.isEmpty(idCard)) {
emergencySeriousDisease.setAge(AgeCalculateUtil.countAge(idCard));
}
emergencySeriousDisease.setTelPhone(loginUser.getPhone());
emergencySeriousDisease.setSex(loginUser.getSex());
emergencySeriousDisease.setIdNo(idCard);
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "大病就医-通过id删除")
@Operation(summary = "大病就医-通过id删除", description = "大病就医-通过id删除")
@RequiresPermissions("emergency:emergency_serious_disease:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
emergencySeriousDiseaseService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "大病就医-批量删除")
@Operation(summary = "大病就医-批量删除", description = "大病就医-批量删除")
@RequiresPermissions("emergency:emergency_serious_disease:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.emergencySeriousDiseaseService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "大病就医-通过id查询")
@Operation(summary = "大病就医-通过id查询", description = "大病就医-通过id查询")
@GetMapping(value = "/queryById")
public Result<EmergencySeriousDisease> queryById(@RequestParam(name = "id", required = true) String id) {
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getById(id);
if (emergencySeriousDisease == null) {
return Result.error("未找到对应数据");
}
String userDepart = emergencySeriousDisease.getUserDepart();
if (StringUtils.isNotEmpty(userDepart)) {
SysDepart secondDepartOrgCode = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(userDepart));
SysDepart thridDepartOrgCode = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(userDepart));
emergencySeriousDisease.setUserDepart("");
if (secondDepartOrgCode != null && thridDepartOrgCode != null) {
emergencySeriousDisease.setUserDepart(secondDepartOrgCode.getDepartName() + "-" + thridDepartOrgCode.getDepartName());
}
}
return Result.OK(emergencySeriousDisease);
}
/**
* 导出excel
*
* @param request
* @param emergencySeriousDisease
*/
@RequiresPermissions("emergency:emergency_serious_disease:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, EmergencySeriousDisease emergencySeriousDisease) {
return super.exportXls(request, emergencySeriousDisease, EmergencySeriousDisease.class, "大病就医");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_serious_disease:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, EmergencySeriousDisease.class);
}
@Operation(summary = "操作人员派单", description = "操作人员派单")
// @RequiresPermissions("emergency:emergency_serious_disease:dispatchStation")
@GetMapping(value = "/dispatchStation")
public Result<String> dispatchStation(@RequestParam(name = "id", required = true) String id,
@RequestParam(name = "stationUserId", required = true) String stationUserId) {
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getById(id);
if (emergencySeriousDisease == null) {
return Result.error("该数据不存在!");
}
String state = emergencySeriousDisease.getState();
if (!"1".equals(state) && !"7".equals(state)) {
return Result.error("该订单暂时无法派单!");
}
emergencySeriousDisease.setStationUserId(stationUserId);
LoginUser loginUser = sysBaseAPI.getUserById(stationUserId);
if(loginUser != null){
emergencySeriousDisease.setStationUserName(loginUser.getRealname());
}
emergencySeriousDisease.setSendOrderTime(new Date());
emergencySeriousDisease.setState("4");
emergencySeriousDisease.setReservationTime(emergencySeriousDisease.getDesireTime());
emergencySeriousDisease.setAcceptStationTime(new Date());
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.OK("派单成功!");
}
@Operation(summary = "操作人员驳回", description = "操作人员驳回")
// @RequiresPermissions("emergency:emergency_serious_disease:operatorReject")
@GetMapping(value = "/operatorReject")
public Result<String> operatorReject(@RequestParam(name = "id", required = true) String id,
@RequestParam(name = "rejectionReason", required = true) String rejectionReason) {
EmergencySeriousDisease emergencySeriousDisease = emergencySeriousDiseaseService.getById(id);
if (emergencySeriousDisease == null) {
return Result.error("该数据不存在!");
}
String state = emergencySeriousDisease.getState();
if ("6".equals(state)) {
return Result.error("该订单无法驳回!");
}
emergencySeriousDisease.setRejectionReason(rejectionReason);
emergencySeriousDisease.setRejectionTime(new Date());
emergencySeriousDisease.setState("6");
emergencySeriousDiseaseService.updateById(emergencySeriousDisease);
return Result.OK("驳回成功!");
}
}
@@ -0,0 +1,76 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.TblUserHelp;
import com.renkang.emergency.entity.dto.*;
import com.renkang.emergency.service.ITbUserHelpMacService;
import com.renkang.emergency.service.ITblAmbulanceGpsService;
import com.renkang.emergency.service.YcLargeScreenService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.jeecg.common.api.dto.YcMedicalCenterFakerData;
import org.jeecg.common.api.dto.YcUserHealthFakerData;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/emergency/LargeScreenNew")
public class LargeScreenNewController {
@Resource
private ITbUserHelpMacService tbUserHelpMacService;
@Resource
private YcLargeScreenService ycLargeScreenService;
@Resource
private ITblAmbulanceGpsService tblAmbulanceGpsService;
/**
* 服务详情数据-24.09.19 新版大屏接口
*/
@PostMapping("/statisticsNew")
@Operation(summary = "服务详情数据", description = "服务详情数据")
public Result<?> statisticsNew(@RequestBody StatisticsDTO dto) {
return Result.OK(tbUserHelpMacService.statisticsNew(dto));
}
/**
* 获取云坐席列表数据-24.09.19 新版大屏接口
*/
@PostMapping("/phoneListNew")
@Operation(summary = "获取云坐席列表数据", description = "获取云坐席列表数据")
public Result<?> getPhoneListNew(@RequestBody PhoneListDTO dto) {
return Result.ok(tbUserHelpMacService.getPhoneListNew(dto));
}
/**
* 一线医疗点每日工作动态-24.09.19 新版大屏接口
*/
@PostMapping("/medicalCenterNew")
@Operation(summary = "一线医疗点每日工作动态", description = "一线医疗点每日工作动态")
public Result<List<YcMedicalCenterFakerData>> medicalCenterNew(@RequestBody MedicalCenterDTO dto) {
return Result.ok(ycLargeScreenService.medicalCenterNew(dto));
}
/**
* 员工队伍健康状况数据-24.09.19 新版大屏接口
*/
@PostMapping("/userHealthCenterNew")
@Operation(summary = "员工队伍健康状况数据", description = "员工队伍健康状况数据")
public Result<YcUserHealthFakerData> userHealthCenterNew(@RequestBody UserHealthCenterDTO dto) {
return Result.ok(ycLargeScreenService.userHealthCenterNew(dto));
}
/**
* 获取所有资源-24.09.19 新版大屏接口
*/
@PostMapping("/getAllListNew")
@Operation(summary = "获取所有资源", description = "获取所有资源")
public Result<?> getAllListNew(@RequestBody ResourcesAllDTO dto) {
return Result.OK(tblAmbulanceGpsService.getAllListNew(dto));
}
}
@@ -0,0 +1,237 @@
package com.renkang.emergency.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.Order;
import com.renkang.emergency.entity.OrderDetail;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.manager.EmergencyCacheManager;
import com.renkang.emergency.manager.EmergencyCloudManager;
import com.renkang.emergency.service.IOrderDetailService;
import com.renkang.emergency.service.IOrderService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.vo.LoginUserNew;
import org.jeecg.modules.system.entity.SysDepart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
/**
* @Description: emergency_order
* @Author: jeecg-boot
* @Date: 2023-04-26
* @Version: V1.0
*/
@Tag(name = "emergency_order")
@RestController
@RequestMapping("/emergency/order")
@Slf4j
public class OrderController extends JeecgController<Order, IOrderService> {
@Autowired
private IOrderService orderService;
@Autowired
private EmergencyCacheManager emergencyCacheManager;
@Autowired
private IOrderDetailService orderDetailService;
@Autowired
private EmergencyCloudManager emergencyCloudManager;
/**
* 分页列表查询
*
* @param order
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_order-分页列表查询")
@Operation(summary = "emergency_order-分页列表查询", description = "emergency_order-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<Order>> queryPageList(Order order,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Page<Order> page = new Page<Order>(pageNo, pageSize);
IPage<Order> pageList = orderService.pageCustom(page, order, req);
return Result.OK(pageList);
}
/**
* 专业人员订单列表
*/
@GetMapping(value = "/listOrderMajor")
public Result<IPage<Order>> listOrderMajor(Order order,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<Order> page = new Page<>(pageNo, pageSize);
IPage<Order> pageList = orderService.listOrderMajor(page, order);
return Result.OK(pageList);
}
@Operation(summary = "修改被救助人", description = "修改被救助人")
@GetMapping(value = "/changeSalvageUserId")
public Result<String> changeSalvageUserId(@RequestParam(name = "id", required = true) String id,
@RequestParam(name = "salvageUserId", required = true) String salvageUserId) {
Order order = orderService.getById(id);
if (order == null) {
return Result.error("数据不存在");
}
Map<String, LoginUserNew> map = emergencyCloudManager.listUser(Collections.singletonList(salvageUserId));
LoginUserNew loginUserNew = map.get(salvageUserId);
if (loginUserNew == null) {
return Result.error("用户不存在");
}
order.setSalvageUserId(salvageUserId);
order.setSalvageUserMobile(loginUserNew.getPhone());
order.setSalvageUserDepart(loginUserNew.getOrgCode());
order.setSalvageUserSex(loginUserNew.getSex().toString());
order.setSalvageUserName(loginUserNew.getRealname());
orderService.updateById(order);
return Result.ok("更换被救人成功");
}
/**
* 添加
*
* @param order
* @return
*/
@AutoLog(value = "emergency_order-添加")
@Operation(summary = "emergency_order-添加", description = "emergency_order-添加")
@RequiresPermissions("emergency:emergency_order:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody Order order) {
orderService.save(order);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param order
* @return
*/
@AutoLog(value = "emergency_order-编辑")
@Operation(summary = "emergency_order-编辑", description = "emergency_order-编辑")
@RequiresPermissions("emergency:emergency_order:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody Order order) {
orderService.updateById(order);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_order-通过id删除")
@Operation(summary = "emergency_order-通过id删除", description = "emergency_order-通过id删除")
@RequiresPermissions("emergency:emergency_order:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
orderService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_order-批量删除")
@Operation(summary = "emergency_order-批量删除", description = "emergency_order-批量删除")
@RequiresPermissions("emergency:emergency_order:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.orderService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_order-通过id查询")
@Operation(summary = "emergency_order-通过id查询", description = "emergency_order-通过id查询")
@GetMapping(value = "/queryById")
public Result<Order> queryById(@RequestParam(name = "id", required = true) String id) {
Order order = orderService.getById(id);
if (ObjectUtil.isNotNull(order)) {
OrderDetail detail = orderDetailService.getById(order.getId());
order.setOrderDetail(detail);
// 部门信息
// 发起人二级部门信息
SysDepart initUserDepart = emergencyCacheManager.getUserSecondDepart(order.getInitiatorUserDepart());
order.setInitiatorUserSecondDepart(initUserDepart.getDepartName());
// 救助人二级部门信息
SysDepart salvageUserDepart = emergencyCacheManager.getUserSecondDepart(order.getSalvageUserDepart());
order.setSalvageUserSecondDepart(salvageUserDepart.getDepartName());
if (StrUtil.isNotBlank(order.getResourceId())) {
Resource resource = emergencyCacheManager.getById(order.getResourceId());
if (ObjectUtil.isNotNull(resource)) {
order.setResourceName(resource.getName());
}
}
}
return Result.OK(order);
}
/**
* 导出excel
*
* @param request
* @param order
*/
@RequiresPermissions("emergency:emergency_order:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, Order order) {
return super.exportXls(request, order, Order.class, "emergency_order");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_order:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, Order.class);
}
}
@@ -0,0 +1,162 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.OrderDetail;
import com.renkang.emergency.service.IOrderDetailService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
* @Description: emergency_order_detail
* @Author: jeecg-boot
* @Date: 2023-05-17
* @Version: V1.0
*/
@Tag(name = "emergency_order_detail")
@RestController
@RequestMapping("/emergency/orderDetail")
@Slf4j
public class OrderDetailController extends JeecgController<OrderDetail, IOrderDetailService> {
@Autowired
private IOrderDetailService orderDetailService;
/**
* 分页列表查询
*
* @param orderDetail
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_order_detail-分页列表查询")
@Operation(summary = "emergency_order_detail-分页列表查询", description = "emergency_order_detail-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<OrderDetail>> queryPageList(OrderDetail orderDetail,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(orderDetail, req.getParameterMap());
Page<OrderDetail> page = new Page<OrderDetail>(pageNo, pageSize);
IPage<OrderDetail> pageList = orderDetailService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param orderDetail
* @return
*/
@AutoLog(value = "emergency_order_detail-添加")
@Operation(summary = "emergency_order_detail-添加", description = "emergency_order_detail-添加")
@RequiresPermissions("emergency:emergency_order_detail:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody OrderDetail orderDetail) {
orderDetailService.save(orderDetail);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param orderDetail
* @return
*/
@AutoLog(value = "emergency_order_detail-编辑")
@Operation(summary = "emergency_order_detail-编辑", description = "emergency_order_detail-编辑")
@RequiresPermissions("emergency:emergency_order_detail:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody OrderDetail orderDetail) {
orderDetailService.updateById(orderDetail);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_order_detail-通过id删除")
@Operation(summary = "emergency_order_detail-通过id删除", description = "emergency_order_detail-通过id删除")
@RequiresPermissions("emergency:emergency_order_detail:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
orderDetailService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_order_detail-批量删除")
@Operation(summary = "emergency_order_detail-批量删除", description = "emergency_order_detail-批量删除")
@RequiresPermissions("emergency:emergency_order_detail:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.orderDetailService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_order_detail-通过id查询")
@Operation(summary = "emergency_order_detail-通过id查询", description = "emergency_order_detail-通过id查询")
@GetMapping(value = "/queryById")
public Result<OrderDetail> queryById(@RequestParam(name = "id", required = true) String id) {
OrderDetail orderDetail = orderDetailService.getById(id);
if (orderDetail == null) {
return Result.error("未找到对应数据");
}
return Result.OK(orderDetail);
}
/**
* 导出excel
*
* @param request
* @param orderDetail
*/
@RequiresPermissions("emergency:emergency_order_detail:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OrderDetail orderDetail) {
return super.exportXls(request, orderDetail, OrderDetail.class, "emergency_order_detail");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_order_detail:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OrderDetail.class);
}
}
@@ -0,0 +1,162 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.OrderIntervene;
import com.renkang.emergency.service.IOrderInterveneService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
* @Description: emergency_order_intervene
* @Author: jeecg-boot
* @Date: 2023-09-25
* @Version: V1.0
*/
@Tag(name = "emergency_order_intervene")
@RestController
@RequestMapping("/emergency/orderIntervene")
@Slf4j
public class OrderInterveneController extends JeecgController<OrderIntervene, IOrderInterveneService> {
@Autowired
private IOrderInterveneService orderInterveneService;
/**
* 分页列表查询
*
* @param orderIntervene
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_order_intervene-分页列表查询")
@Operation(summary = "emergency_order_intervene-分页列表查询", description = "emergency_order_intervene-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<OrderIntervene>> queryPageList(OrderIntervene orderIntervene,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OrderIntervene> queryWrapper = QueryGenerator.initQueryWrapper(orderIntervene, req.getParameterMap());
Page<OrderIntervene> page = new Page<OrderIntervene>(pageNo, pageSize);
IPage<OrderIntervene> pageList = orderInterveneService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param orderIntervene
* @return
*/
@AutoLog(value = "emergency_order_intervene-添加")
@Operation(summary = "emergency_order_intervene-添加", description = "emergency_order_intervene-添加")
@RequiresPermissions("emergency:emergency_order_intervene:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody OrderIntervene orderIntervene) {
orderInterveneService.save(orderIntervene);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param orderIntervene
* @return
*/
@AutoLog(value = "emergency_order_intervene-编辑")
@Operation(summary = "emergency_order_intervene-编辑", description = "emergency_order_intervene-编辑")
@RequiresPermissions("emergency:emergency_order_intervene:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody OrderIntervene orderIntervene) {
orderInterveneService.updateById(orderIntervene);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_order_intervene-通过id删除")
@Operation(summary = "emergency_order_intervene-通过id删除", description = "emergency_order_intervene-通过id删除")
@RequiresPermissions("emergency:emergency_order_intervene:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
orderInterveneService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_order_intervene-批量删除")
@Operation(summary = "emergency_order_intervene-批量删除", description = "emergency_order_intervene-批量删除")
@RequiresPermissions("emergency:emergency_order_intervene:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.orderInterveneService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_order_intervene-通过id查询")
@Operation(summary = "emergency_order_intervene-通过id查询", description = "emergency_order_intervene-通过id查询")
@GetMapping(value = "/queryById")
public Result<OrderIntervene> queryById(@RequestParam(name="id",required=true) String id) {
OrderIntervene orderIntervene = orderInterveneService.getById(id);
if(orderIntervene==null) {
return Result.error("未找到对应数据");
}
return Result.OK(orderIntervene);
}
/**
* 导出excel
*
* @param request
* @param orderIntervene
*/
@RequiresPermissions("emergency:emergency_order_intervene:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OrderIntervene orderIntervene) {
return super.exportXls(request, orderIntervene, OrderIntervene.class, "emergency_order_intervene");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_order_intervene:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OrderIntervene.class);
}
}
@@ -0,0 +1,175 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.OrderSendRecord;
import com.renkang.emergency.service.IOrderSendRecordService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @Description: emergency_order_send_record
* @Author: jeecg-boot
* @Date: 2023-04-27
* @Version: V1.0
*/
@Tag(name = "emergency_order_send_record")
@RestController
@RequestMapping("/emergency/orderSendRecord")
@Slf4j
public class OrderSendRecordController extends JeecgController<OrderSendRecord, IOrderSendRecordService> {
@Autowired
private IOrderSendRecordService orderSendRecordService;
/**
* 分页列表查询
*
* @param orderSendRecord
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_order_send_record-分页列表查询")
@Operation(summary = "emergency_order_send_record-分页列表查询", description = "emergency_order_send_record-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<OrderSendRecord>> queryPageList(OrderSendRecord orderSendRecord,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OrderSendRecord> queryWrapper = QueryGenerator.initQueryWrapper(orderSendRecord, req.getParameterMap());
queryWrapper.lambda().orderByDesc(OrderSendRecord::getCreateTime);
Page<OrderSendRecord> page = new Page<OrderSendRecord>(pageNo, pageSize);
IPage<OrderSendRecord> pageList = orderSendRecordService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 获取应急单的所有派单记录
*
* @param orderId 订单id
* @return result
*/
@GetMapping(value = "/all")
public Result<List<OrderSendRecord>> all(@RequestParam String orderId) {
return Result.OK(orderSendRecordService.all(orderId));
}
/**
* 添加
*
* @param orderSendRecord
* @return
*/
@AutoLog(value = "emergency_order_send_record-添加")
@Operation(summary = "emergency_order_send_record-添加", description = "emergency_order_send_record-添加")
@RequiresPermissions("emergency:emergency_order_send_record:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody OrderSendRecord orderSendRecord) {
orderSendRecordService.save(orderSendRecord);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param orderSendRecord
* @return
*/
@AutoLog(value = "emergency_order_send_record-编辑")
@Operation(summary = "emergency_order_send_record-编辑", description = "emergency_order_send_record-编辑")
@RequiresPermissions("emergency:emergency_order_send_record:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody OrderSendRecord orderSendRecord) {
orderSendRecordService.updateById(orderSendRecord);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_order_send_record-通过id删除")
@Operation(summary = "emergency_order_send_record-通过id删除", description = "emergency_order_send_record-通过id删除")
@RequiresPermissions("emergency:emergency_order_send_record:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
orderSendRecordService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_order_send_record-批量删除")
@Operation(summary = "emergency_order_send_record-批量删除", description = "emergency_order_send_record-批量删除")
@RequiresPermissions("emergency:emergency_order_send_record:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.orderSendRecordService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_order_send_record-通过id查询")
@Operation(summary = "emergency_order_send_record-通过id查询", description = "emergency_order_send_record-通过id查询")
@GetMapping(value = "/queryById")
public Result<OrderSendRecord> queryById(@RequestParam(name = "id", required = true) String id) {
OrderSendRecord orderSendRecord = orderSendRecordService.getById(id);
if (orderSendRecord == null) {
return Result.error("未找到对应数据");
}
return Result.OK(orderSendRecord);
}
/**
* 导出excel
*
* @param request
* @param orderSendRecord
*/
@RequiresPermissions("emergency:emergency_order_send_record:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OrderSendRecord orderSendRecord) {
return super.exportXls(request, orderSendRecord, OrderSendRecord.class, "emergency_order_send_record");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_order_send_record:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OrderSendRecord.class);
}
}
@@ -0,0 +1,250 @@
package com.renkang.emergency.controller;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.bean.response.EmergencyHospital;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.manager.EmergencyCacheManager;
import com.renkang.emergency.manager.ResourceManager;
import com.renkang.emergency.service.IResourceService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @Description: 应急资源
* @Author: jeecg-boot
* @Date: 2023-04-24
* @Version: V1.0
*/
@Tag(name = "应急资源")
@RestController
@RequestMapping("/emergency/resource")
@Slf4j
public class ResourceController extends JeecgController<Resource, IResourceService> {
@Autowired
private IResourceService resourceService;
@Autowired
private ResourceManager resourceManager;
@Autowired
private EmergencyCacheManager emergencyCacheManager;
/**
* 所有的应急医院
*
* @return list hospital
*/
@GetMapping(value = "listCustom")
public Result<List<EmergencyHospital>> listCustom() {
return Result.OK(resourceService.listCustom());
}
/**
* 分页列表查询
*
* @param resource
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "应急资源-分页列表查询")
@Operation(summary = "应急资源-分页列表查询", description = "应急资源-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<Resource>> queryPageList(Resource resource,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<Resource> queryWrapper = QueryGenerator.initQueryWrapper(resource, req.getParameterMap());
Page<Resource> page = new Page<Resource>(pageNo, pageSize);
IPage<Resource> pageList = resourceService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param resource
* @return
*/
@AutoLog(value = "应急资源-添加")
@Operation(summary = "应急资源-添加", description = "应急资源-添加")
@RequiresPermissions("emergency:emergency_resource:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody Resource resource) {
if (ObjectUtil.isNull(resource.getLongitude()) || ObjectUtil.isNull(resource.getLatitude())) {
return Result.error("经纬度为空");
}
if (resource.getLongitude().compareTo(EmergencyConstants.LONGITUDE_START) < 0
|| resource.getLongitude().compareTo(EmergencyConstants.LONGITUDE_END) > 0) {
return Result.error("经度范围正常值为:" + EmergencyConstants.LONGITUDE_START + "--" + EmergencyConstants.LONGITUDE_END);
}
if (resource.getLatitude().compareTo(EmergencyConstants.LATITUDE_START) < 0
|| resource.getLatitude().compareTo(EmergencyConstants.LATITUDE_END) > 0) {
return Result.error("维度范围正常值为:" + EmergencyConstants.LATITUDE_START + "--" + EmergencyConstants.LATITUDE_END);
}
resourceService.save(resource);
// 添加redis geo
resourceManager.addOne(resource);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param resource
* @return
*/
@AutoLog(value = "应急资源-编辑")
@Operation(summary = "应急资源-编辑", description = "应急资源-编辑")
@RequiresPermissions("emergency:emergency_resource:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody Resource resource) {
if (ObjectUtil.isNotNull(resource.getLongitude())) {
if (resource.getLongitude().compareTo(EmergencyConstants.LONGITUDE_START) < 0
|| resource.getLongitude().compareTo(EmergencyConstants.LONGITUDE_END) > 0) {
return Result.error("经度范围正常值为:" + EmergencyConstants.LONGITUDE_START + "--" + EmergencyConstants.LONGITUDE_END);
}
}
if (ObjectUtil.isNotNull(resource.getLatitude())) {
if (resource.getLatitude().compareTo(EmergencyConstants.LATITUDE_START) < 0
|| resource.getLatitude().compareTo(EmergencyConstants.LATITUDE_END) > 0) {
return Result.error("维度范围正常值为:" + EmergencyConstants.LATITUDE_START + "--" + EmergencyConstants.LATITUDE_END);
}
}
// 旧数据
Resource old = resourceService.getById(resource.getId());
if (old == null) {
return Result.error("数据异常,不存在的数据");
}
// 编辑数据
resourceService.updateById(resource);
// 删除旧数据缓存
emergencyCacheManager.deleteCache(resource.getId());
// 修改redis geo
if (old.getLongitude() != null && old.getLatitude() != null && resource.getLongitude() != null && resource.getLatitude() != null) {
if (old.getLongitude().compareTo(resource.getLongitude()) != 0
|| old.getLatitude().compareTo(resource.getLatitude()) != 0) {
// 编辑redis geo
resourceManager.editOne(resource);
}
}
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "应急资源-通过id删除")
@Operation(summary = "应急资源-通过id删除", description = "应急资源-通过id删除")
@RequiresPermissions("emergency:emergency_resource:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
Resource resource = resourceService.getById(id);
if (ObjectUtil.isNull(resource)) {
return Result.OK("删除成功!");
}
resourceService.removeById(id);
// redis geo
resourceManager.delOne(resource);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "应急资源-批量删除")
@Operation(summary = "应急资源-批量删除", description = "应急资源-批量删除")
@RequiresPermissions("emergency:emergency_resource:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
// 删除redis geo 以及缓存
List<Resource> resources = resourceService.listByIds(Arrays.asList(ids.split(",")));
this.resourceService.removeByIds(Arrays.asList(ids.split(",")));
resourceManager.delBatch(resources);
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "应急资源-通过id查询")
@Operation(summary = "应急资源-通过id查询", description = "应急资源-通过id查询")
@GetMapping(value = "/queryById")
public Result<Resource> queryById(@RequestParam(name = "id", required = true) String id) {
Resource resource = resourceService.getById(id);
if (resource == null) {
return Result.error("未找到对应数据");
}
return Result.OK(resource);
}
/**
* 导出excel
*
* @param request
* @param resource
*/
@RequiresPermissions("emergency:emergency_resource:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, Resource resource) {
return super.exportXls(request, resource, Resource.class, "应急资源");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_resource:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, Resource.class);
}
@GetMapping(value = "/selectHostitalList")
public Result<List<Resource>> selectHostitalList() {
List<Resource> pageList = resourceService.selectHostitalList();
return Result.OK(pageList);
}
}
@@ -0,0 +1,210 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.bean.request.ScheduleCustomDetail;
import com.renkang.emergency.bean.response.ScheduleDefaultCustom;
import com.renkang.emergency.entity.ScheduleCustom;
import com.renkang.emergency.service.IScheduleCustomService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
* @Description: emergency_schedule_custom
* @Author: jeecg-boot
* @Date: 2023-04-26
* @Version: V1.0
*/
@Tag(name = "emergency_schedule_custom")
@RestController
@RequestMapping("/emergency/scheduleCustom")
@Slf4j
public class ScheduleCustomController extends JeecgController<ScheduleCustom, IScheduleCustomService> {
@Autowired
private IScheduleCustomService scheduleCustomService;
/**
* 分页列表查询
*
* @param scheduleCustom
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_schedule_custom-分页列表查询")
@Operation(summary = "emergency_schedule_custom-分页列表查询", description = "emergency_schedule_custom-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<ScheduleCustom>> queryPageList(ScheduleCustom scheduleCustom,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ScheduleCustom> queryWrapper = QueryGenerator.initQueryWrapper(scheduleCustom, req.getParameterMap());
queryWrapper.lambda().orderByDesc(ScheduleCustom::getScheduleTime);
Page<ScheduleCustom> page = new Page<ScheduleCustom>(pageNo, pageSize);
IPage<ScheduleCustom> pageList = scheduleCustomService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 分页数据
*
* @param amOrPm 0:上午 1:下午
* @param date 日期
* @param pageNo 页码
* @param pageSize 条数
* @return
*/
@GetMapping(value = "/listCustom")
public Result<IPage<ScheduleDefaultCustom>> listCustom(String amOrPm, String date,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<ScheduleDefaultCustom> page = new Page<>(pageNo, pageSize);
IPage<ScheduleDefaultCustom> pageList = scheduleCustomService.pageCustom(page, amOrPm, date);
return Result.OK(pageList);
}
/**
* 修改自定义排班
*
* @param detail 数据
* @return
*/
@PostMapping("/updateScheduleCustom")
public Result<Boolean> updateScheduleCustom(@RequestBody @Validated ScheduleCustomDetail detail) {
boolean result = scheduleCustomService.updateScheduleCustom(detail);
if (result) {
return Result.OK("修改成功");
}
return Result.OK("修改失败");
}
/**
* 删除自定义排班
*
* @param detail 数据
* @return
*/
@PostMapping("/delCustom")
public Result<String> delCustom(@RequestBody @Validated ScheduleCustomDetail detail) {
return scheduleCustomService.delCustom(detail);
}
/**
* 添加
*
* @param scheduleCustom
* @return
*/
@AutoLog(value = "emergency_schedule_custom-添加")
@Operation(summary = "emergency_schedule_custom-添加", description = "emergency_schedule_custom-添加")
@RequiresPermissions("emergency:emergency_schedule_custom:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody ScheduleCustom scheduleCustom) {
scheduleCustomService.save(scheduleCustom);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param scheduleCustom
* @return
*/
@AutoLog(value = "emergency_schedule_custom-编辑")
@Operation(summary = "emergency_schedule_custom-编辑", description = "emergency_schedule_custom-编辑")
@RequiresPermissions("emergency:emergency_schedule_custom:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody ScheduleCustom scheduleCustom) {
scheduleCustomService.updateById(scheduleCustom);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_schedule_custom-通过id删除")
@Operation(summary = "emergency_schedule_custom-通过id删除", description = "emergency_schedule_custom-通过id删除")
@RequiresPermissions("emergency:emergency_schedule_custom:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
scheduleCustomService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_schedule_custom-批量删除")
@Operation(summary = "emergency_schedule_custom-批量删除", description = "emergency_schedule_custom-批量删除")
@RequiresPermissions("emergency:emergency_schedule_custom:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.scheduleCustomService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_schedule_custom-通过id查询")
@Operation(summary = "emergency_schedule_custom-通过id查询", description = "emergency_schedule_custom-通过id查询")
@GetMapping(value = "/queryById")
public Result<ScheduleCustom> queryById(@RequestParam(name = "id", required = true) String id) {
ScheduleCustom scheduleCustom = scheduleCustomService.getById(id);
if (scheduleCustom == null) {
return Result.error("未找到对应数据");
}
return Result.OK(scheduleCustom);
}
/**
* 导出excel
*
* @param request
* @param scheduleCustom
*/
@RequiresPermissions("emergency:emergency_schedule_custom:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ScheduleCustom scheduleCustom) {
return super.exportXls(request, scheduleCustom, ScheduleCustom.class, "emergency_schedule_custom");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_schedule_custom:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, ScheduleCustom.class);
}
}
@@ -0,0 +1,172 @@
package com.renkang.emergency.controller;
import com.renkang.emergency.bean.request.ScheduleDetail;
import com.renkang.emergency.bean.response.ScheduleDefaultCustom;
import com.renkang.emergency.entity.ScheduleDefault;
import com.renkang.emergency.service.IScheduleDefaultService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @Description: emergency_schedule_default
* @Author: jeecg-boot
* @Date: 2023-04-26
* @Version: V1.0
*/
@Tag(name = "emergency_schedule_default")
@RestController
@RequestMapping("/emergency/scheduleDefault")
@Slf4j
public class ScheduleDefaultController extends JeecgController<ScheduleDefault, IScheduleDefaultService> {
@Autowired
private IScheduleDefaultService scheduleDefaultService;
/**
* 分页列表查询
*
* @param scheduleDefault
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_schedule_default-分页列表查询")
@Operation(summary = "emergency_schedule_default-分页列表查询", description = "emergency_schedule_default-分页列表查询")
@GetMapping(value = "/list")
public Result<List<ScheduleDefaultCustom>> list() {
return Result.OK(scheduleDefaultService.listCustom());
}
/**
* 修改自定义排班
*
* @param scheduleDetail 数据
* @return
*/
@PostMapping("/updateScheduleDefault")
public Result<Boolean> updateScheduleDefault(@RequestBody @Validated ScheduleDetail scheduleDetail) {
boolean result = scheduleDefaultService.updateScheduleDefault(scheduleDetail);
if (result) {
return Result.OK("修改成功");
}
return Result.OK("修改失败");
}
/**
* 添加
*
* @param scheduleDefault
* @return
*/
@AutoLog(value = "emergency_schedule_default-添加")
@Operation(summary = "emergency_schedule_default-添加", description = "emergency_schedule_default-添加")
@RequiresPermissions("emergency:emergency_schedule_default:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody ScheduleDefault scheduleDefault) {
scheduleDefaultService.save(scheduleDefault);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param scheduleDefault
* @return
*/
@AutoLog(value = "emergency_schedule_default-编辑")
@Operation(summary = "emergency_schedule_default-编辑", description = "emergency_schedule_default-编辑")
@RequiresPermissions("emergency:emergency_schedule_default:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody ScheduleDefault scheduleDefault) {
scheduleDefaultService.updateById(scheduleDefault);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_schedule_default-通过id删除")
@Operation(summary = "emergency_schedule_default-通过id删除", description = "emergency_schedule_default-通过id删除")
@RequiresPermissions("emergency:emergency_schedule_default:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
scheduleDefaultService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_schedule_default-批量删除")
@Operation(summary = "emergency_schedule_default-批量删除", description = "emergency_schedule_default-批量删除")
@RequiresPermissions("emergency:emergency_schedule_default:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.scheduleDefaultService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_schedule_default-通过id查询")
@Operation(summary = "emergency_schedule_default-通过id查询", description = "emergency_schedule_default-通过id查询")
@GetMapping(value = "/queryById")
public Result<ScheduleDefault> queryById(@RequestParam(name = "id", required = true) String id) {
ScheduleDefault scheduleDefault = scheduleDefaultService.getById(id);
if (scheduleDefault == null) {
return Result.error("未找到对应数据");
}
return Result.OK(scheduleDefault);
}
/**
* 导出excel
*
* @param request
* @param scheduleDefault
*/
@RequiresPermissions("emergency:emergency_schedule_default:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ScheduleDefault scheduleDefault) {
return super.exportXls(request, scheduleDefault, ScheduleDefault.class, "emergency_schedule_default");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_schedule_default:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, ScheduleDefault.class);
}
}
@@ -0,0 +1,181 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.bean.response.ScheduleDefaultCustom;
import com.renkang.emergency.entity.ScheduleRecord;
import com.renkang.emergency.service.IScheduleRecordService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
* @Description: emergency_schedule_record
* @Author: jeecg-boot
* @Date: 2023-05-25
* @Version: V1.0
*/
@Tag(name = "emergency_schedule_record")
@RestController
@RequestMapping("/emergency/scheduleRecord")
@Slf4j
public class ScheduleRecordController extends JeecgController<ScheduleRecord, IScheduleRecordService> {
@Autowired
private IScheduleRecordService scheduleRecordService;
/**
* 分页列表查询
*
* @param scheduleRecord
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "emergency_schedule_record-分页列表查询")
@Operation(summary = "emergency_schedule_record-分页列表查询", description = "emergency_schedule_record-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<ScheduleRecord>> queryPageList(ScheduleRecord scheduleRecord,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ScheduleRecord> queryWrapper = QueryGenerator.initQueryWrapper(scheduleRecord, req.getParameterMap());
Page<ScheduleRecord> page = new Page<ScheduleRecord>(pageNo, pageSize);
IPage<ScheduleRecord> pageList = scheduleRecordService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 自定义分页数据
*
* @param amOrPm 0:上午 1:下午
* @param date 日期
* @param pageNo 页码
* @param pageSize 条数
* @return
*/
@GetMapping(value = "/listCustom")
public Result<IPage<ScheduleDefaultCustom>> listCustom(String amOrPm, String date,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<ScheduleDefaultCustom> page = new Page<>(pageNo, pageSize);
IPage<ScheduleDefaultCustom> pageList = scheduleRecordService.pageCustom(page, amOrPm, date);
return Result.OK(pageList);
}
/**
* 添加
*
* @param scheduleRecord
* @return
*/
@AutoLog(value = "emergency_schedule_record-添加")
@Operation(summary = "emergency_schedule_record-添加", description = "emergency_schedule_record-添加")
@RequiresPermissions("emergency:emergency_schedule_record:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody ScheduleRecord scheduleRecord) {
scheduleRecordService.save(scheduleRecord);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param scheduleRecord
* @return
*/
@AutoLog(value = "emergency_schedule_record-编辑")
@Operation(summary = "emergency_schedule_record-编辑", description = "emergency_schedule_record-编辑")
@RequiresPermissions("emergency:emergency_schedule_record:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody ScheduleRecord scheduleRecord) {
scheduleRecordService.updateById(scheduleRecord);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "emergency_schedule_record-通过id删除")
@Operation(summary = "emergency_schedule_record-通过id删除", description = "emergency_schedule_record-通过id删除")
@RequiresPermissions("emergency:emergency_schedule_record:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
scheduleRecordService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "emergency_schedule_record-批量删除")
@Operation(summary = "emergency_schedule_record-批量删除", description = "emergency_schedule_record-批量删除")
@RequiresPermissions("emergency:emergency_schedule_record:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.scheduleRecordService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "emergency_schedule_record-通过id查询")
@Operation(summary = "emergency_schedule_record-通过id查询", description = "emergency_schedule_record-通过id查询")
@GetMapping(value = "/queryById")
public Result<ScheduleRecord> queryById(@RequestParam(name = "id", required = true) String id) {
ScheduleRecord scheduleRecord = scheduleRecordService.getById(id);
if (scheduleRecord == null) {
return Result.error("未找到对应数据");
}
return Result.OK(scheduleRecord);
}
/**
* 导出excel
*
* @param request
* @param scheduleRecord
*/
@RequiresPermissions("emergency:emergency_schedule_record:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, ScheduleRecord scheduleRecord) {
return super.exportXls(request, scheduleRecord, ScheduleRecord.class, "emergency_schedule_record");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("emergency:emergency_schedule_record:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, ScheduleRecord.class);
}
}
@@ -0,0 +1,49 @@
package com.renkang.emergency.controller;
import com.renkang.emergency.service.ITblAmbulanceGpsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author TianZi
* @date 2023/11/30 17:14
*/
@Tag(name = "应急大屏/获取地图信息", description = "应急大屏/获取地图信息")
@RestController
@RequestMapping("/emergency/tblAmbulanceGps")
public class TblAmbulanceGpsController {
@Resource
private ITblAmbulanceGpsService tblAmbulanceGpsService;
/**
* 获取所有资源
* @return
*/
@GetMapping("/getAllList")
@Operation(summary = "获取所有资源", description = "获取所有资源")
public Result<?> getAllList(@Parameter(description = "纬度:34") @RequestParam(name = "lat") String lat,
@Parameter(description = "经度:108") @RequestParam(name = "lon") String lon,
@Parameter(description = "空串:全部资源,1:油田医院,2:合作医院,3:医疗点") @RequestParam(name = "type", required = false) String type,
@Parameter(description = "搜索关键字") @RequestParam(name = "keys", required = false) String keys) {
return Result.OK(tblAmbulanceGpsService.getAllList(lat,lon,type,keys));
}
/**
* 获取救护车gps信息
* @return
*/
@GetMapping("/getAmbulanceList")
public Result<?> getAmbulanceList() {
return Result.OK(tblAmbulanceGpsService.getAmbulanceList());
}
}
@@ -0,0 +1,33 @@
package com.renkang.emergency.controller;
import com.renkang.emergency.service.ITbHelpCenterService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author TianZi
* @date 2023/11/30 17:14
*/
@Tag(name = "应急大屏/主诉分类", description = "应急大屏/主诉分类")
@RestController
@RequestMapping("/emergency/tblHelpCenter")
public class TblHelpCenterController {
@Resource
private ITbHelpCenterService tbHelpCenterService;
@GetMapping("/sicknessTypeStatistic")
@Operation(summary = "主诉分类统计", description = "主诉分类统计")
public Result<?> sicknessTypeStatistic(@Parameter(description = "0:全部 1:女,2:男") @RequestParam(required = false) String sex, @Parameter(description = "部门id") @RequestParam(required = false) String depart) {
return Result.OK(tbHelpCenterService.sicknessTypeStatistic(sex,depart));
}
}
@@ -0,0 +1,252 @@
package com.renkang.emergency.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.api.service.impl.LargeScreenImpl;
import com.renkang.emergency.async.AsyncImportService;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.EmergencyGrouped;
import com.renkang.emergency.entity.QimoVo;
import com.renkang.emergency.entity.TblQimoNotice;
import com.renkang.emergency.entity.TblUserHelp;
import com.renkang.emergency.entity.dto.CallLogDTO;
import com.renkang.emergency.service.*;
import com.renkang.emergency.util.QimoVoUtil;
import com.renkang.emergency.websocket.WebSocket;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.exports.entity.CommonExportsInfo;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
/**
* @author Wang Hao
* @date 2024/05/13 09:14
*/
@Slf4j
@Tag(name = "应急大屏/云坐席")
@RestController
@RequestMapping("/api/qimo")
public class TblQimoNoticeController {
private static final Logger logger = LoggerFactory.getLogger(TblQimoNoticeController.class);
private static final String UNKNOWN_USER = "UNKNOWN_";
@Value("${qimo.notice:1}")
private String qimoNotice;
@Resource
private AsyncImportService asyncImportService;
@Resource
private ITbQimoNoticeService qimoNoticeService;
@Resource
private ISysNotifySmsPhoneService sysNotifySmsPhoneService;
@Resource
private ITbUserHelpMacService userHelpMacService;
@Resource
private IEmergencyGroupedService groupedService;
@Resource
private IEmergencyCenterService centerService;
@Resource
private ISysBaseAPI sysBaseAPI;
@Autowired
private ISysCache sysCache;
@Resource
private WebSocket webSocket;
@Autowired
private ITblAmbulanceGpsService tblAmbulanceGpsService;
@Autowired
private LargeScreenImpl largeScreen;
@Autowired
private RedisUtil redisUtil;
@RequestMapping(value = "/callback", method = RequestMethod.GET)
@ResponseBody
public String callback(QimoVo qimoVo) {
if (!checkCallBackType(qimoVo)) {
return "200";
}
GlobalUtils.setHttpFeignToken();
// 七陌重复推送处理,3分钟内同ID去重
if (redisUtil.get(qimoVo.getCallSheetID()) != null) {
return "200"; // 如果缓存中存在,直接返回
}
redisUtil.set(qimoVo.getCallSheetID(), qimoVo.getCalledNo(), 60 * 3);
TblQimoNotice notice = QimoVoUtil.copyToEntity(qimoVo);
if (!"1".equals(qimoNotice)) {
return "200"; // 不推送
}
logger.info("容联七陌开始推送信息=={}", notice.getCallNo());
if (!saveNotice(notice)) {
return "保存呼入信息失败";
}
// 保存用户求助表
TblUserHelp userHelp = saveUserHelp(notice);
// 20250427 新增需求 非当日数据 不推
if (!DateUtils.isSameDay(DateUtil.beginOfDay(new Date()), notice.getRing())) {
return "200";
}
// 大屏及短信推送
largeScreen.qimoPush(userHelp);
return "200";
}
private boolean checkCallBackType(QimoVo qimoVo) {
if ("dialout".equals(qimoVo.getCallType())) {
return false;
}
if ("1".equals(qimoVo.getCallNo())) {
return false;
}
return true;
}
/**
* 保存呼入信息
* @param notice 呼入信息
* @return 是否保存成功
*/
private boolean saveNotice(TblQimoNotice notice) {
try {
notice.setIsRead("0");
notice.setCreateBy("admin");
notice.setCreateDate(new Date());
qimoNoticeService.save(notice);
return true;
} catch (Exception e) {
logger.error("容联七陌保存呼入信息失败=={}", notice, e);
return false;
}
}
/**
* 保存用户求助表
* @param notice 呼入信息
* @return 用户求助信息
*/
private TblUserHelp saveUserHelp(TblQimoNotice notice) {
TblUserHelp userHelp = new TblUserHelp();
userHelp.setStatus("0");
userHelp.setTreatType("2");
userHelp.setType("3");
userHelp.setOutMobile(notice.getCallNo());
userHelp.setScreenStatus("1");
userHelp.setExten(notice.getExten());
userHelp.setQueue(notice.getQueue());
userHelp.setNoticeId(notice.getId());
userHelp.setCenterId(getCenterIdBySeatId(notice.getExten()));
if ("银川中心".equals(notice.getQueue())) {
userHelp.setScreenType("2");
} else {
userHelp.setScreenType("1");
}
SysUser user = null;
// 手机号校验
if (Validator.isMobile(notice.getCallNo())){
List<SysUser> userList = sysBaseAPI.userListByPhone(notice.getCallNo());
user = userList.stream()
.filter(item -> "1".equals(item.getPersonType()))
.findFirst()
.orElse(null);
}
if (ObjUtil.isNotNull(user)) {
userHelp.setUserId(user.getId());
userHelp.setSex(user.getSex());
userHelp.setRealName(user.getRealname());
userHelp.setOrgCode(user.getOrgCode());
} else {
userHelp.setUserId(UNKNOWN_USER + notice.getCallNo());
}
userHelpMacService.create(userHelp);
return userHelp;
}
/**
* 根据坐席工号查询应急中心
* @param seatId 坐席工号
* @return 应急中心
*/
private String getCenterIdBySeatId(String seatId) {
LambdaQueryWrapper<EmergencyGrouped> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(EmergencyGrouped::getSeatId, seatId)
.eq(EmergencyGrouped::getDelFlag, 0);
EmergencyGrouped emergencyGrouped = groupedService.getOne(wrapper, false);
if (ObjUtil.isNull(emergencyGrouped)) {
return "1000000000000000000";
}
return emergencyGrouped.getCenterId();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
@Operation(summary = "根据ID获取七陌推送信息信息", description = "根据ID获取七陌推送信息信息")
public Result<?> get(@Parameter(required = true, name = "id", description = "ID") @PathVariable("id") String id) {
TblQimoNotice task = qimoNoticeService.getById(id);
if (task == null) {
return Result.error("根据ID获取七陌推送信息信息为空");
}
return Result.OK(task);
}
/**
* 导出excel
*/
// @RequiresPermissions("emergency:callLog:exportXls")
@RequestMapping(value = "/exportXls")
public Result<?> callLogExportXls(HttpServletResponse response, HttpServletRequest request, CallLogDTO dto) {
Boolean flag = sysBaseAPI.getFinishFlagByCode(EmergencyConstants.EMERGENCY_CALL_LOG_CODE, EmergencyConstants.EMERGENCY_CALL_LOG_DOING);
if (!flag) {
return Result.error("已存在执行中的导出任务,请稍后导出或点击【查看导出任务】查看任务导出进度!");
}
String sheetName = "通话记录导出";
String fileName = sheetName + "_" + DateUtils.getDate("yyyyMMddHHmmss");
CommonExportsInfo info = new CommonExportsInfo();
info.setBatchNo(String.valueOf(System.currentTimeMillis()));
LoginUser loginUser = GlobalUtils.getLoginUser();
final String userId = loginUser.getId();
info.setHandleMsg("0/0");
info.setCreateBy(userId);
info.setCreateDate(new Date());
info.setExportMsg("通话记录导出中");
info.setTaskCode(EmergencyConstants.EMERGENCY_CALL_LOG_CODE);
//数据导出中
info.setExportStatus(EmergencyConstants.EMERGENCY_CALL_LOG_DOING);
info.setHandleStartTime(new Date());
CommonExportsInfo commonExportsInfo = sysBaseAPI.updateExportsInfo(info);
String id = commonExportsInfo.getId();
CommonExportsInfo info1 = sysBaseAPI.getExportsInfoById(id);
// 使用异步方法执行导出逻辑
asyncImportService.asyncExport(dto, info1, EmergencyConstants.EMERGENCY_CALL_LOG_FINISH, EmergencyConstants.EMERGENCY_CALL_LOG_CODE, sheetName, fileName);
return qimoNoticeService.callLogExportXls();
}
}
@@ -0,0 +1,52 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.entity.TblUserHelp;
import com.renkang.emergency.service.ITbUserHelpMacService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.jeecg.common.api.vo.Result;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author TianZi
* @date 2023/11/30 17:14
*/
@Tag(name = "应急大屏/服务详情数据", description = "应急大屏/服务详情数据")
@RestController
@RequestMapping("/emergency/tblUserHelp")
public class TblUserHelpController {
@Resource
private ITbUserHelpMacService tbUserHelpMacService;
@GetMapping("/statistics")
@Operation(summary = "服务详情数据", description = "服务详情数据")
public Result<?> statistics(@Parameter(description = "1:全部,2:年,3:月,4:周") @RequestParam(name = "condition", defaultValue = "1") String condition,
@Parameter(description = "1:西安 2:银川") @RequestParam(name = "dataType", defaultValue = "1") String dataType) {
return Result.OK(tbUserHelpMacService.statistics(condition, dataType));
}
@GetMapping("/phoneList")
@Operation(summary = "获取云坐席列表数据", description = "获取云坐席列表数据")
public Result<?> getPhoneList(@Parameter(description = "1:西安 2:银川") @RequestParam String dataType,
@Parameter(description = "0:呼入 1:受理 2:突发重大伤病应急 3:重大伤病应急") @RequestParam String phoneType,
@Parameter(description = "0:全部 1:女 2:男") @RequestParam String sex,
@Parameter(description = "0:默认 1:按部门") @RequestParam String showType,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<TblUserHelp> page = new Page<TblUserHelp>(pageNo, pageSize);
return Result.ok(tbUserHelpMacService.getPhoneList(dataType, phoneType, sex, showType, page));
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@Operation(summary = "创建用户求助信息")
public Result<?> create(@Parameter(name = "用户求助信息对象") @RequestBody TblUserHelp tblUserHelp) {
return tbUserHelpMacService.create(tblUserHelp);
}
}
@@ -0,0 +1,78 @@
package com.renkang.emergency.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.bean.response.YcAmbulanceStat;
import com.renkang.emergency.entity.ZyAmbulanceData;
import com.renkang.emergency.service.YcLargeScreenService;
import org.jeecg.common.api.dto.YcMedicalCenterFakerData;
import org.jeecg.common.api.dto.YcUserHealthFakerData;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 银川大屏controller
* @author Junqiang Zhu
* @since 2024-5-15
*/
@RestController
@RequestMapping("/emergency/ycLargeScreen")
public class YcLargeScreenController {
@Autowired
private YcLargeScreenService ycLargeScreenService;
/**
* 一线医疗点数据
*
* @return data
*/
@GetMapping("medicalCenter")
public Result<List<YcMedicalCenterFakerData>> medicalCenter() {
return Result.ok(ycLargeScreenService.medicalCenter());
}
/**
* 员工队伍健康数据
* @return data
*/
@GetMapping("userHealthCenter")
public Result<YcUserHealthFakerData> userHealthCenter() {
return Result.ok(ycLargeScreenService.userHealthCenter());
}
/**
* 救护车急救数据
*
* @param type 0:周 1:月 2:年
* @return data
*/
@GetMapping("ambulanceStat")
public Result<List<YcAmbulanceStat>> ambulanceStat(@RequestParam(name = "type", defaultValue = "0") String type) {
return Result.ok(ycLargeScreenService.ambulanceStat(type));
}
/**
* 救护车急救数据page
*
* @param pageNo 页码
* @param pageSize 条数
* @return data
*/
@GetMapping("ambulancePage")
public Result<Page<ZyAmbulanceData>> ambulancePage(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
return Result.ok(ycLargeScreenService.ambulancePage(pageNo, pageSize));
}
}
@@ -0,0 +1,58 @@
package com.renkang.emergency.data.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.data.model.dto.DiagnosisDataPageParam;
import com.renkang.emergency.data.model.vo.DiagnosisDataInfo;
import com.renkang.emergency.data.service.DataDiagnosisService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: 数据模块-就医数据-应急中心就医控制器
*/
@Tag(name = "数据/就医数据/应急中心就医")
@RestController
@RequestMapping("/data/diagnosis")
@RequiredArgsConstructor
public class DataDiagnosisController {
private final DataDiagnosisService dataDiagnosisService;
@GetMapping("page")
@Operation(summary = "应急中心就医列表数据", description = "应急中心就医列表数据")
public Result<IPage<DiagnosisDataInfo>> diagnosisDataPage(DiagnosisDataPageParam pageParam) {
return Result.OK(dataDiagnosisService.diagnosisDataPage(pageParam));
}
@Operation(summary = "库结构数据", description = "应急中心就医库结构数据")
@GetMapping("tableStructure")
public Result<TableInfo> tableStructure() {
return Result.ok(dataDiagnosisService.tableStructure());
}
@GetMapping("dict")
@Operation(summary = "应急中心就医数据字典", description = "应急中心就医数据字典")
public Result<BeanDictInfo> dict() {
return Result.ok(dataDiagnosisService.dict());
}
@Operation(summary = "应急中心就医列表数据导出", description = "应急中心就医列表数据导出")
@RequestMapping(value = "exportXls")
public Result<String> exportXls(DiagnosisDataPageParam pageParam) {
dataDiagnosisService.exportXls(pageParam);
return Result.ok("导出成功,请在导出记录查看");
}
@Operation(summary = "应急中心就医列表数据统计", description = "应急中心就医列表数据统计")
@GetMapping("statistics")
public Result<DiagnosisDataInfo> statistics(DiagnosisDataPageParam pageParam) {
return Result.OK(dataDiagnosisService.statistics(pageParam));
}
}
@@ -0,0 +1,43 @@
package com.renkang.emergency.data.controller;
import com.renkang.emergency.data.service.DataEmergencyService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author stan
* @since 2024-12-23 10:23
*/
@RestController
@RequestMapping("data/emergency")
public class DataEmergencyUserController {
@Autowired
private DataEmergencyService dataEmergencyService;
/**
* 表结构信息
* @return 表结构
*/
@GetMapping("tableStructure")
public Result<TableInfo> tableStructure() {
return Result.ok(dataEmergencyService.tableStructure());
}
/**
* 数据字典
* @return 字典信息
*/
@GetMapping("dict")
public Result<BeanDictInfo> dict() {
return Result.ok(dataEmergencyService.dict());
}
}
@@ -0,0 +1,58 @@
package com.renkang.emergency.data.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.data.model.dto.PhoneDataPageParam;
import com.renkang.emergency.data.model.vo.PhoneDataInfo;
import com.renkang.emergency.data.service.DataPhoneService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: 数据模块-就医数据-应急来电控制器
*/
@Tag(name = "数据/应急数据/应急来电")
@RestController
@RequestMapping("/data/phone")
@RequiredArgsConstructor
public class DataPhoneController {
private final DataPhoneService dataPhoneService;
@GetMapping("page")
@Operation(summary = "应急来电列表数据", description = "应急来电列表数据")
public Result<IPage<PhoneDataInfo>> phoneDataPage(PhoneDataPageParam pageParam) {
return Result.OK(dataPhoneService.phoneDataPage(pageParam));
}
@Operation(summary = "库结构数据", description = "库结构数据")
@GetMapping("tableStructure")
public Result<TableInfo> tableStructure() {
return Result.ok(dataPhoneService.tableStructure());
}
@GetMapping("dict")
@Operation(summary = "应急来电数据字典", description = "应急来电数据字典")
public Result<BeanDictInfo> dict() {
return Result.ok(dataPhoneService.dict());
}
@Operation(summary = "应急来电列表数据导出", description = "应急来电列表数据导出")
@RequestMapping(value = "exportXls")
public Result<String> exportXls(PhoneDataPageParam pageParam) {
dataPhoneService.exportXls(pageParam);
return Result.ok("导出成功,请在导出记录查看");
}
@Operation(summary = "应急来电列表数据统计", description = "应急来电列表数据统计")
@GetMapping("statistics")
public Result<PhoneDataInfo> statistics(PhoneDataPageParam pageParam) {
return Result.OK(dataPhoneService.statistics(pageParam));
}
}
@@ -0,0 +1,77 @@
package com.renkang.emergency.data.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.data.model.dto.ResourceDataPageParam;
import com.renkang.emergency.data.model.vo.ResourceDataInfo;
import com.renkang.emergency.data.service.DataResourceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: 档案模块-机构信息-应急医院控制器
* @Author: feng
* @Date: 2024-11-20
* @Version: V1.0
*/
@Tag(name = "数据/机构信息/应急医院")
@RestController
@RequestMapping("/data/hospital")
@RequiredArgsConstructor
public class DataResourceController {
private final DataResourceService dataResourceService;
@GetMapping("page")
@Operation(summary = "应急医院列表数据", description = "应急医院列表数据")
public Result<IPage<ResourceDataInfo>> resourceDataPage(ResourceDataPageParam pageParam) {
return Result.OK(dataResourceService.resourceDataPage(pageParam));
}
/**
* 库结构
*
* @return 结构体
*/
@Operation(summary = "应急医院库结构数据", description = "应急医院库结构数据")
@GetMapping("tableStructure")
public Result<TableInfo> tableStructure() {
return Result.ok(dataResourceService.tableStructure());
}
/**
* 列表字典数据
*
* @return map
*/
@GetMapping("dict")
@Operation(summary = "应急医院数据字典", description = "应急医院数据字典")
public Result<BeanDictInfo> dict() {
return Result.ok(dataResourceService.dict());
}
/**
* 应急医院列表数据导出
*/
@Operation(summary = "应急医院列表数据导出", description = "应急医院列表数据导出")
@RequestMapping(value = "exportXls")
public Result<String> exportXls(ResourceDataPageParam pageParam) {
dataResourceService.exportXls(pageParam);
return Result.ok("导出成功,请在导出记录查看");
}
/**
* 应急医院列表数据统计
*/
@Operation(summary = "应急医院列表数据统计", description = "应急医院列表数据统计")
@GetMapping("statistics")
public Result<ResourceDataInfo> statistics(ResourceDataPageParam pageParam) {
return Result.OK(dataResourceService.statistics(pageParam));
}
}
@@ -0,0 +1,84 @@
package com.renkang.emergency.data.model.dto;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jeecg.base.Criteria;
import org.jeecg.base.PageInfo;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(title = "数据应急中心就医列表参数", description = "数据应急中心就医列表参数")
public class DiagnosisDataPageParam extends PageInfo<EmergencySeriousDisease> {
@Schema(description = "单位 or 部门")
private String orgCode;
@Schema(description = "姓名")
private String realName;
@Schema(description = "员工编号")
private String workNo;
@Schema(description = "性别")
private Integer sex;
@Schema(description = "年龄")
private Integer age;
@Schema(description = "年龄范围参数b (当选择范围时使用)")
private Integer ageB;
@Schema(description = "年龄范围条件:'>', '<', '>=', '<=', '<>', '=', '!='")
private String ageCondition;
@Schema(description = "身份证号")
private String idCard;
@Schema(description = "预约医院")
private String hospitalId;
@Schema(title = "挂号类别 ")
private String registerCategory;
@Schema(title = "预约医生")
private String reservationDoctor;
public Date getAppointmentTimeStart() {
if (ObjUtil.isNotEmpty(appointmentTimeStart)) {
appointmentTimeStart = DateUtil.beginOfDay(appointmentTimeStart);
}
return appointmentTimeStart;
}
@Schema(description = "预约时间开始日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date appointmentTimeStart;
public Date getAppointmentTimeEnd() {
if (ObjUtil.isNotEmpty(appointmentTimeEnd)) {
appointmentTimeEnd = DateUtil.endOfDay(appointmentTimeEnd);
}
return appointmentTimeEnd;
}
@Schema(description = "预约时间结束日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date appointmentTimeEnd;
}
@@ -0,0 +1,38 @@
package com.renkang.emergency.data.model.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.TblQimoNotice;
import com.renkang.emergency.entity.TblUserHelp;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jeecg.base.PageInfo;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(title = "数据应急来电列表参数", description = "数据应急来电列表参数")
public class PhoneDataPageParam extends PageInfo<TblQimoNotice> {
@Schema(description = "单位 or 部门")
private String orgCode;
@Schema(description = "姓名")
private String realname;
@Schema(description = "性别")
private Integer sex;
@Schema(description = "呼叫中心")
private String centerId;
@Schema(description = "呼叫中心")
private String centerName;
@Schema(description = "坐席工号")
private String seatId;
}
@@ -0,0 +1,26 @@
package com.renkang.emergency.data.model.dto;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jeecg.base.Criteria;
import org.jeecg.base.PageInfo;
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(title = "数据应急医院列表参数", description = "数据应急医院列表参数")
public class ResourceDataPageParam extends PageInfo<Resource> {
@Schema(description = "应急医院名称")
@Criteria(value = Criteria.Mode.LIKE, property = "name")
private String resourceName;
@Schema(description = "查询类型(1:油田医院 2:合作医院)")
private Integer type;
@Schema(description = "医院等级")
private Integer level;
@Schema(description = "查询年份(默认当年)")
private Integer year;
}
@@ -0,0 +1,141 @@
package com.renkang.emergency.data.model.vo;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.annotation.DBColumnInfo;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.enums.DbColumnNameEnum;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class DiagnosisData {
private String id;
@Schema(description = "单位")
@DBColumnInfo(commonName = DbColumnNameEnum.USER_ORG)
private String departName;
@Schema(description = "部门")
@DBColumnInfo(commonName = DbColumnNameEnum.USER_DEPT)
private String orgName;
@Schema(description = "员工编号")
@DBColumnInfo(commonName = DbColumnNameEnum.WORK_NO)
private String workNo;
@Schema(title = "就医人员")
private String userId;
@Schema(title = "是否补单")
private Boolean isFill;
@Schema(title = "医院")
private String hospitalId;
@Schema(title = "就诊卡号")
private String medicalCardNo;
@Dict(dicCode = "category")
@Schema(title = "挂号类别 ")
private String registerCategory;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(title = "驻场人员预约到的时间")
private Date reservationTime;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(title = "患者填写的期望预约到的时间")
private Date desireTime;
@Schema(title = "预约科室")
private String reservationOffice;
@Schema(title = "患者预约医生")
private String reservationDoctor;
@Schema(title = "病情描述")
private String diseaseDescribe;
@Schema(title = "特殊要求")
private String specialRequirements;
@Dict(dicCode = "sex2")
@Schema(title = "性别")
@DBColumnInfo(commonName = DbColumnNameEnum.SEX)
private Integer sex;
@Schema(title = "真实姓名")
private String realname;
@Schema(title = "驻场人员")
private String stationUserId;
@Schema(title = "预约号")
private String reservationNo;
@Schema(title = "身份证号")
private String idNo;
@Schema(title = "手机号")
private String telPhone;
@Schema(title = "年龄")
private Integer age;
@Schema(title = "删除状态(0-正常,1-已删除)")
@TableLogic
private Integer delFlag;
@Dict(dicCode = "emergency_serious_state")
@Schema(title = "状态 1未派单 2已派单 3已完成 4已驳回 5申请转单 ")
private String state;
@Schema(title = "操作人员")
private String operatorId;
@Schema(title = "驳回原因")
private String rejectionReason;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(title = "驳回时间")
private Date rejectionTime;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(title = "派单时间")
private Date sendOrderTime;
@Schema(title = "部门")
private String userDepart;
@Schema(title = "职场驳回原因")
private String stationRejectionReason;
@Schema(title = "驻场驳回时间")
private Date stationRejectionTime;
@Schema(title = "驻场接单时间")
private Date acceptStationTime;
@Schema(title = "预约完成时间")
private Date desireFinishTime;
@Schema(title = "医院名称")
private String hospitalName;
@Schema(title = "驻场人员名称")
private String stationUserName;
@Schema(title = "医疗中心id")
private String centerId;
}
@@ -0,0 +1,139 @@
package com.renkang.emergency.data.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "数据就医数据应急中心就医列表数据模型", description = "数据就医数据应急中心就医列表数据模型")
public class DiagnosisDataInfo {
@Schema(description = "单位")
private String departName;
@Schema(description = "部门")
private String orgName;
@Schema(title = "就医人员")
private String userId;
@Schema(description = "姓名")
private String realName;
@Schema(description = "员工编号")
private String workNo;
@Schema(description = "性别")
@Dict(dicCode = "sex2")
private String sex;
@Schema(description = "年龄")
private String age;
public void setAge(String age) {
if (age.contains(".")) {
this.age = age.substring(0, age.indexOf("."));
} else {
this.age = age;
}
}
@Schema(description = "手机号码")
private String telPhone;
@Schema(description = "身份证号")
private String idNo;
@Schema(description = "预约医院")
private String hospitalId;
@Schema(description = "预约医院")
private String hospitalName;
@Schema(title = "挂号类别 ")
@Dict(dicCode = "category")
private String registerCategory;
@Schema(description = "预约科室")
private String reservationOffice;
@Schema(description = "预约医生")
private String reservationDoctor;
@Schema(description = "预约时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date reservationTime;
@Schema(description = "期望预约时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date desireTime;
@Schema(description = "病情描述")
private String diseaseDescribe;
@Schema(description = "状态")
@Dict(dicCode = "emergency_serious_state")
private String state;
@Schema(description = "驻场人员")
private String stationUserId;
@Schema(description = "驻场人员")
private String stationUserName;
@Schema(description = "就诊卡号")
private String medicalCardNo;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(title = "派单时间")
private Date sendOrderTime;
@Schema(title = "操作人员")
private String operatorId;
@Schema(title = "操作人员")
private String operatorName;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(title = "驳回时间")
private Date rejectionTime;
@Schema(title = "驳回原因")
private String rejectionReason;
public DiagnosisDataInfo(EmergencySeriousDisease disease) {
this.userId = disease.getUserId();
this.hospitalId = disease.getHospitalId();
this.hospitalName = disease.getHospitalName();
this.registerCategory = disease.getRegisterCategory();
this.reservationOffice = disease.getReservationOffice();
this.reservationDoctor = disease.getReservationDoctor();
this.reservationTime = disease.getReservationTime();
this.desireTime = disease.getDesireTime();
this.diseaseDescribe = disease.getDiseaseDescribe();
this.state = disease.getState();
this.stationUserId = disease.getStationUserId();
this.stationUserName = disease.getStationUserName();
this.medicalCardNo = disease.getMedicalCardNo();
this.sendOrderTime = disease.getSendOrderTime();
this.operatorId = disease.getOperatorId();
this.rejectionTime = disease.getRejectionTime();
}
}
@@ -0,0 +1,129 @@
package com.renkang.emergency.data.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class DiagnosisExport {
/**
* 序号
*/
@Excel(name = "序号", width = 15)
@Schema(title = "序号")
private String index;
@Excel(name = "单位", width = 15)
@Schema(description = "单位")
private String departName;
@Excel(name = "部门", width = 15)
@Schema(description = "部门")
private String orgName;
@Excel(name = "姓名", width = 15)
@Schema(description = "姓名")
private String realName;
@Excel(name = "员工编号", width = 15)
@Schema(description = "员工编号")
private String workNo;
@Excel(name = "性别", dicCode = "sex2", width = 15)
@Schema(description = "性别")
@Dict(dicCode = "sex2")
private Integer sex;
@Excel(name = "年龄", width = 15)
@Schema(description = "年龄")
private Integer age;
@Excel(name = "手机号码", width = 15)
@Schema(description = "手机号码")
private String telPhone;
@Excel(name = "身份证号", width = 15)
@Schema(description = "身份证号")
private String idNo;
@Excel(name = "预约医院", width = 15)
@Schema(description = "预约医院")
private String hospitalName;
@Excel(name = "挂号类别", dicCode = "category", width = 15)
@Schema(title = "挂号类别")
@Dict(dicCode = "category")
private String registerCategory;
@Excel(name = "预约科室", width = 15)
@Schema(description = "预约科室")
private String reservationOffice;
@Excel(name = "预约医生", width = 15)
@Schema(description = "预约医生")
private String reservationDoctor;
@Excel(name = "预约时间", format = "yyyy-MM-dd", width = 15)
@Schema(description = "预约时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date reservationTime;
@Excel(name = "期望预约时间", format = "yyyy-MM-dd", width = 15)
@Schema(description = "期望预约时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date desireTime;
@Excel(name = "病情描述", width = 15)
@Schema(description = "病情描述")
private String diseaseDescribe;
@Excel(name = "状态", replace = {"未派单_1","已派单_2","已完成_2","已驳回_4","申请转单_5"}, width = 15)
@Schema(description = "状态")
private String state;
@Excel(name = "操作人员", width = 15)
@Schema(description = "驻场人员")
private String stationUserName;
private List<DiagnosisExport> voList;
public DiagnosisExport() {
}
public DiagnosisExport(List<DiagnosisDataInfo> records) {
List<DiagnosisExport> voList = new ArrayList<>();
records.forEach(item->{
DiagnosisExport export = new DiagnosisExport();
export.setIndex(String.valueOf(records.indexOf(item) + 1));
export.setDepartName(item.getDepartName());
export.setOrgName(item.getOrgName());
export.setRealName(item.getRealName());
export.setWorkNo(item.getWorkNo());
export.setSex(Integer.valueOf(item.getSex()));
export.setAge(Integer.valueOf(item.getAge()));
export.setTelPhone(item.getTelPhone());
export.setIdNo(item.getIdNo());
export.setHospitalName(item.getHospitalName());
export.setRegisterCategory(item.getRegisterCategory());
export.setReservationOffice(item.getReservationOffice());
export.setReservationDoctor(item.getReservationDoctor());
export.setReservationTime(item.getReservationTime());
export.setDesireTime(item.getDesireTime());
export.setDiseaseDescribe(item.getDiseaseDescribe());
export.setState(item.getState());
export.setStationUserName(item.getStationUserName());
voList.add(export);
});
this.voList = voList;
}
}
@@ -0,0 +1,226 @@
package com.renkang.emergency.data.model.vo;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.annotation.DBColumnInfo;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.enums.DbColumnEnum;
import org.jeecg.enums.DbColumnNameEnum;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class PhoneData {
private String id;
@Schema(description = "单位")
@DBColumnInfo(commonName = DbColumnNameEnum.USER_ORG)
private String departName;
@Schema(description = "部门")
@DBColumnInfo(commonName = DbColumnNameEnum.USER_DEPT)
private String orgName;
@Schema(title = "用户id")
private String userId;
@Dict(dicCode = "sex2")
@Schema(title = "性别")
private Integer sex;
@Schema(title = "真实姓名")
private String realname;
@Schema(title = "手机号")
private String telPhone;
@Schema(title = "删除状态(0-正常,1-已删除)")
@TableLogic
private Integer delFlag;
@Schema(title = "中心id")
private String centerId;
@Schema(title = "中心名称")
private String centerName;
/**
* 主叫号码
*/
@Schema(title = "主叫号码", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "主叫号码", width = 15)
private String callNo;
/**
* 被叫号码
*/
@Schema(title = "被叫号码", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "被叫号码", width = 15)
private String calledNo;
/**
* 通话记录ID
*/
@Schema(title = "通话记录ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话记录ID", width = 15)
private String callSheetId;
/**
* 转接前通话的CallSheetID
*/
@Schema(title = "转接前通话的CallSheetID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "转接前通话的CallSheetID", width = 15)
private String refCallSheetid;
/**
* 通话ID
*/
@Schema(title = "通话ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话ID", width = 15)
private String callId;
/**
* 通话类型
*/
@Schema(title = "通话类型", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话类型", width = 15, dicCode = "qimo_call_type")
private String callType;
/**
* 通话振铃时间
*/
@Schema(title = "通话振铃时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话振铃时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
private java.util.Date ring;
/**
* 被叫振铃开始时间
*/
@Schema(title = "被叫振铃开始时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "被叫振铃开始时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
private java.util.Date ringingDate;
/**
* 被叫振铃开始时间
*/
@Schema(title = "被叫振铃开始时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@DBColumnInfo(diyName = "被叫振铃开始时间", columnType = DbColumnEnum.VARCHAR, len = 255)
private String ringingTimestamp;
/**
* 通话接通时间
*/
@Schema(title = "通话接通时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话接通时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
private java.util.Date begin;
/**
* 通话结束时间
*/
@Schema(title = "通话结束时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话结束时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
private java.util.Date end;
/**
* 来电进入技能组时间
*/
@Schema(title = "来电进入技能组时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "来电进入技能组时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
private java.util.Date queueTime;
/**
* 处理坐席的工号
*/
@Schema(title = "处理坐席的工号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "处理坐席的工号", width = 15)
private String agent;
/**
* 处理坐席的工号
*/
@Schema(title = "处理坐席的工号", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "处理坐席的工号", width = 15)
private String exten;
/**
* 处理坐席的姓名
*/
@Schema(title = "处理坐席的姓名", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "处理坐席的姓名", width = 15)
private String agentName;
/**
* 通话进入的技能组名称
*/
@Schema(title = "通话进入的技能组名称", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话进入的技能组名称", width = 15)
private String queue;
/**
* 接听状态
*/
@Schema(title = "接听状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Dict(dicCode = "qimo_state")
private String state;
/**
* 事件状态
*/
@Schema(title = "事件状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Dict(dicCode = "qimo_call_state")
private String callState;
/**
* 通过接口调用时
*/
@Schema(title = "通过接口调用时", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通过接口调用时", width = 15)
private String actionId;
/**
* 通过调用webcall接口
*/
@Schema(title = "通过调用webcall接口", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通过调用webcall接口", width = 15)
private String webcallActionId;
/**
* 通话录音文件名
*/
@Schema(title = "通话录音文件名", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话录音文件名", width = 15)
private String recordFile;
/**
* 录音服务器
*/
@Schema(title = "录音服务器", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "录音服务器", width = 15)
private String fileServer;
/**
* 目标号码的省
*/
@Schema(title = "目标号码的省", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "目标号码的省", width = 15)
private String province;
/**
* 目标号码的市
*/
@Schema(title = "目标号码的市", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "目标号码的市", width = 15)
private String district;
/**
* 通话在系统中选择的按键菜单
*/
@Schema(title = "通话在系统中选择的按键菜单", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "通话在系统中选择的按键菜单", width = 15)
private String ivrkey;
/**
* 账户编号字段
*/
@Schema(title = "账户编号字段", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "账户编号字段", width = 15)
private String accountId;
/**
* 账户名称字段
*/
@Schema(title = "账户名称字段", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "账户名称字段", width = 15)
private String accountName;
/**
* 操作人员ID
*/
@Schema(title = "操作人员ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "操作人员ID", width = 15)
private String receiveUserId;
/**
* 是否已读
*/
@Schema(title = "是否已读", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@Excel(name = "是否已读", width = 15)
private String isRead;
}
@@ -0,0 +1,67 @@
package com.renkang.emergency.data.model.vo;
import cn.hutool.core.util.ObjUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.TblQimoNotice;
import com.renkang.emergency.entity.TblUserHelp;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "数据应急数据应急来电列表数据模型", description = "数据应急数据应急来电列表数据模型")
public class PhoneDataInfo {
@Schema(description = "单位")
private String departName;
@Schema(description = "部门")
private String orgName;
@Schema(title = "用户id")
private String userId;
@Schema(description = "姓名")
private String realName;
@Schema(description = "性别")
@Dict(dicCode = "sex2")
private String sex;
@Schema(description = "呼叫中心")
private String centerId;
@Schema(description = "呼叫中心")
private String centerName;
@Schema(description = "坐席工号")
private String seatNo;
@Schema(description = "电话")
private String phone;
@Schema(description = "通话时长")
private String callDuration;
@Schema(description = "通话时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date callTime;
public PhoneDataInfo(TblQimoNotice tblQimoNotice) {
this.seatNo = tblQimoNotice.getExten();
this.phone = tblQimoNotice.getCallNo();
this.callTime = tblQimoNotice.getRing();
if (ObjUtil.isNotEmpty(tblQimoNotice.getBegin()) && ObjUtil.isNotEmpty(tblQimoNotice.getEnd())) {
this.callDuration = String.valueOf((tblQimoNotice.getEnd().getTime() - tblQimoNotice.getBegin().getTime()) / 1000);
}
}
}
@@ -0,0 +1,74 @@
package com.renkang.emergency.data.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class PhoneExport {
/**
* 序号
*/
@Excel(name = "序号", width = 15)
@Schema(title = "序号")
private String index;
@Excel(name = "单位", width = 15)
@Schema(description = "单位")
private String departName;
@Excel(name = "部门", width = 15)
@Schema(description = "部门")
private String orgName;
@Excel(name = "姓名", width = 15)
@Schema(description = "姓名")
private String realName;
@Excel(name = "性别", dicCode = "sex2", width = 15)
@Schema(description = "性别")
@Dict(dicCode = "sex2")
private Integer sex;
@Excel(name = "呼叫中心", width = 15)
@Schema(description = "呼叫中心")
private String centerName;
@Excel(name = "坐席工号", width = 15)
@Schema(description = "坐席工号")
private String exten;
@Excel(name = "电话", width = 15)
@Schema(description = "电话")
private String phone;
private List<PhoneExport> voList;
public PhoneExport() {
}
public PhoneExport(List<PhoneDataInfo> records) {
List<PhoneExport> voList = new ArrayList<>();
records.forEach(item->{
PhoneExport export = new PhoneExport();
export.setIndex(String.valueOf(records.indexOf(item) + 1));
export.setDepartName(item.getDepartName());
export.setOrgName(item.getOrgName());
export.setRealName(item.getRealName());
export.setSex(Integer.valueOf(item.getSex()));
export.setCenterName(item.getCenterName());
export.setExten(item.getSeatNo());
export.setPhone(item.getPhone());
voList.add(export);
});
this.voList = voList;
}
}
@@ -0,0 +1,115 @@
package com.renkang.emergency.data.model.vo;
import cn.hutool.core.collection.CollectionUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.annotation.DBColumnInfo;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.enums.DbColumnEnum;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ResourceData {
private String id;
/**
* 资源名称
*/
@Excel(name = "资源名称", width = 15)
@Schema(title = "资源名称")
private String name;
/**
* 详细地址
*/
@Excel(name = "详细地址", width = 15)
@Schema(title = "详细地址")
private String address;
/**
* 联系电话
*/
@Excel(name = "联系电话", width = 15)
@Schema(title = "联系电话")
private String mobile;
/**
* 经度
*/
@Excel(name = "经度", width = 15)
@Schema(title = "经度")
private BigDecimal longitude;
/**
* 纬度
*/
@Excel(name = "纬度", width = 15)
@Schema(title = "纬度")
private BigDecimal latitude;
/**
* 资源类型(1:油田医院 2:合作医院 3:医疗点 4: )
*/
@Excel(name = "资源类型(1:油田医院 2:合作医院 3:医疗点 4: )", width = 15)
@Schema(title = "资源类型(1:油田医院 2:合作医院 3:医疗点 4: )")
private String type;
/**
* 救治范围
*/
@Excel(name = "救治范围", width = 15)
@Schema(title = "救治范围")
@DBColumnInfo(diyName = "救治范围", columnType = DbColumnEnum.VARCHAR, len = 255)
private String aidrange;
/**
* 高德地图数据id
*/
@Excel(name = "高德地图数据id", width = 15)
@Schema(title = "高德地图数据id")
private String gdId;
/**
* 网址
*/
@Excel(name = "网址", width = 15)
@Schema(title = "网址")
private String url;
/**
* 省
*/
@Excel(name = "", width = 15)
@Schema(title = "")
private String province;
/**
* 市
*/
@Excel(name = "", width = 15)
@Schema(title = "")
private String city;
/**
* 区
*/
@Excel(name = "", width = 15)
@Schema(title = "")
private String area;
/**
* 医院等级
*/
@Excel(name = "医院等级", width = 15)
@Schema(title = "医院等级")
@Dict(dicCode = "hospital_level")
private String level;
/**
* 图片
*/
@Excel(name = "图片", width = 15)
@Schema(title = "图片")
private String img;
/**
* 简介
*/
@Excel(name = "简介", width = 15)
@Schema(title = "简介")
private String resourceDesc;
/**
* 状态(1-正常,2-冻结)
*/
@Excel(name = "状态(1-正常,2-冻结)", width = 15)
@Schema(title = "状态(1-正常,2-冻结)")
private Integer status;
}
@@ -0,0 +1,66 @@
package com.renkang.emergency.data.model.vo;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "数据应急医院列表数据模型", description = "数据应急医院列表数据模型")
public class ResourceDataInfo {
/**医院ID*/
@Schema(title = "医院ID")
private String id;
/**名称*/
@Schema(title = "医院名称")
private String name;
/**医院照片*/
@Schema(title = "医院照片")
private String img;
/**医院类别*/
@Schema(title = "医院类别(1:油田医院 2:合作医院)")
private String type;
/**详细地址*/
@Schema(title = "详细地址")
private String address;
/**医院级别*/
@Schema(title = "医院级别")
@Dict(dicCode = "hospital_level")
private String level;
/**联系电话*/
@Schema(title = "联系电话")
private String mobile;
/**简介*/
@Schema(title = "简介")
private String resourceDesc;
/**网址*/
@Schema(title = "网址")
private String url;
/**经度*/
@Schema(title = "经度")
private BigDecimal longitude;
/**纬度*/
@Schema(title = "纬度")
private BigDecimal latitude;
public ResourceDataInfo(Resource resource) {
this.id = resource.getId();
this.name = resource.getName();
this.address = resource.getAddress();
this.type = resource.getType();
this.level = resource.getLevel();
this.mobile = resource.getMobile();
this.img = resource.getImg();
this.resourceDesc = resource.getResourceDesc();
this.url = resource.getUrl();
this.longitude = resource.getLongitude();
this.latitude = resource.getLatitude();
}
}
@@ -0,0 +1,65 @@
package com.renkang.emergency.data.model.vo;
import com.renkang.emergency.entity.Resource;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jeecg.common.aspect.annotation.Dict;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "数据应急医院列表数据模型", description = "数据应急医院列表数据模型")
public class ResourceDataStatistics {
/**医院ID*/
@Schema(title = "医院ID")
private String id;
/**名称*/
@Schema(title = "医院名称")
private String name;
/**医院照片*/
@Schema(title = "医院照片")
private String img;
/**医院类别*/
@Schema(title = "医院类别(1:油田医院 2:合作医院)")
private String type;
/**详细地址*/
@Schema(title = "详细地址")
private String address;
/**医院级别*/
@Schema(title = "医院级别")
@Dict(dicCode = "hospital_level")
private String level;
/**联系电话*/
@Schema(title = "联系电话")
private String mobile;
/**简介*/
@Schema(title = "简介")
private String resourceDesc;
/**网址*/
@Schema(title = "网址")
private String url;
/**经度*/
@Schema(title = "经度")
private BigDecimal longitude;
/**纬度*/
@Schema(title = "纬度")
private BigDecimal latitude;
public ResourceDataStatistics(Resource resource) {
this.id = resource.getId();
this.name = resource.getName();
this.address = resource.getAddress();
this.type = resource.getType();
this.level = resource.getLevel();
this.mobile = resource.getMobile();
this.img = resource.getImg();
this.resourceDesc = resource.getResourceDesc();
this.url = resource.getUrl();
this.longitude = resource.getLongitude();
this.latitude = resource.getLatitude();
}
}
@@ -0,0 +1,91 @@
package com.renkang.emergency.data.model.vo;
import cn.hutool.core.collection.CollectionUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.ArrayList;
import java.util.List;
@Data
public class ResourceExport {
/**
* 序号
*/
@Excel(name = "序号", width = 15)
@Schema(title = "序号")
private String index;
/**
* 资源名称
*/
@Excel(name = "医院名称", width = 15)
@Schema(title = "医院名称")
private String name;
/**
* 照片
*/
@Excel(name = "照片", width = 15)
@Schema(title = "照片")
private String img;
/**
* 医院类别(1:油田医院 2:合作医院 3:医疗点 4: )
*/
@Excel(name = "医院类别", replace = {"油田医院_1","合作医院_2"}, width = 15)
@Schema(title = "医院类别(1:油田医院 2:合作医院")
private String type;
/**
* 详细地址
*/
@Excel(name = "详细地址", width = 20)
@Schema(title = "详细地址")
private String address;
/**
* 医院级别
*/
@Excel(name = "医院级别", dicCode = "hospital_level", width = 15)
@Schema(title = "医院级别")
private String level;
/**
* 联系电话
*/
@Excel(name = "联系电话", width = 15)
@Schema(title = "联系电话")
private String mobile;
/**
* 简介/介绍
*/
@Excel(name = "简介/介绍", width = 15)
@Schema(title = "简介/介绍")
private String resourceDesc;
/**
* 网址
*/
@Excel(name = "网址", width = 15)
@Schema(title = "网址")
private String url;
private List<ResourceExport> voList;
public ResourceExport() {
}
public ResourceExport(List<ResourceDataInfo> records) {
List<ResourceExport> voList = new ArrayList<>();
records.forEach(item->{
ResourceExport export = new ResourceExport();
export.setIndex(String.valueOf(records.indexOf(item) + 1));
export.setName(item.getName());
export.setImg(item.getImg());
export.setType(item.getType());
export.setAddress(item.getAddress());
export.setLevel(item.getLevel());
export.setMobile(item.getMobile());
export.setResourceDesc(item.getResourceDesc());
export.setUrl(item.getUrl());
voList.add(export);
});
this.voList = voList;
}
}
@@ -0,0 +1,28 @@
package com.renkang.emergency.data.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.data.model.dto.DiagnosisDataPageParam;
import com.renkang.emergency.data.model.dto.ResourceDataPageParam;
import com.renkang.emergency.data.model.vo.DiagnosisDataInfo;
import com.renkang.emergency.data.model.vo.ResourceDataInfo;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
/**
* @Description: 数据模块-就医数据-应急中心就医service
*/
public interface DataDiagnosisService {
/**
* 应急中心就医列表数据
*/
IPage<DiagnosisDataInfo> diagnosisDataPage(DiagnosisDataPageParam pageParam);
TableInfo tableStructure();
BeanDictInfo dict();
void exportXls(DiagnosisDataPageParam pageParam);
DiagnosisDataInfo statistics(DiagnosisDataPageParam pageParam);
}
@@ -0,0 +1,15 @@
package com.renkang.emergency.data.service;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
/**
* @author stan
* @since 2024-12-23
*/
public interface DataEmergencyService {
TableInfo tableStructure();
BeanDictInfo dict();
}
@@ -0,0 +1,28 @@
package com.renkang.emergency.data.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.data.model.dto.DiagnosisDataPageParam;
import com.renkang.emergency.data.model.dto.PhoneDataPageParam;
import com.renkang.emergency.data.model.vo.DiagnosisDataInfo;
import com.renkang.emergency.data.model.vo.PhoneDataInfo;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
/**
* @Description: 数据模块-应急数据-应急来电service
*/
public interface DataPhoneService {
/**
* 应急来电列表数据
*/
IPage<PhoneDataInfo> phoneDataPage(PhoneDataPageParam pageParam);
TableInfo tableStructure();
BeanDictInfo dict();
void exportXls(PhoneDataPageParam pageParam);
PhoneDataInfo statistics(PhoneDataPageParam pageParam);
}
@@ -0,0 +1,33 @@
package com.renkang.emergency.data.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.emergency.archives.model.dto.ResourceArchivesPageParam;
import com.renkang.emergency.archives.model.vo.ResourceArchivesInfo;
import com.renkang.emergency.archives.model.vo.YearsStatistic;
import com.renkang.emergency.data.model.dto.ResourceDataPageParam;
import com.renkang.emergency.data.model.vo.ResourceDataInfo;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import java.util.List;
/**
* @Description: 档案模块-机构信息-一线医疗service
* @Author: feng
* @Date: 2024-11-20
* @Version: V1.0
*/
public interface DataResourceService {
/**
* 应急医院列表数据
*/
IPage<ResourceDataInfo> resourceDataPage(ResourceDataPageParam pageParam);
TableInfo tableStructure();
BeanDictInfo dict();
void exportXls(ResourceDataPageParam pageParam);
ResourceDataInfo statistics(ResourceDataPageParam pageParam);
}
@@ -0,0 +1,282 @@
package com.renkang.emergency.data.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.data.model.dto.DiagnosisDataPageParam;
import com.renkang.emergency.data.model.vo.*;
import com.renkang.emergency.data.service.DataDiagnosisService;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.mapper.EmergencySeriousDiseaseMapper;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecg.bean.request.HealthMealsWeightQueryVO;
import org.jeecg.bean.response.BaseEmployeeInfo;
import org.jeecg.bean.response.BaseUser;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.util.DictUtil;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.MyUploadUtil;
import org.jeecg.config.mybatis.AnalyzeTableManager;
import org.jeecg.config.mybatis.bean.*;
import org.jeecg.enums.TableInfoEnum;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.util.AsyncUtils;
import org.jeecg.util.ColumnUtil;
import org.jeecg.util.WrapperUtils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Description: 数据模块-就医数据-应急中心就医serviceImpl
*/
@Service
@RequiredArgsConstructor
public class DataDiagnosisServiceImpl implements DataDiagnosisService {
private static final Logger log = LoggerFactory.getLogger(DataDiagnosisServiceImpl.class);
private final ISysBaseAPI sysBaseAPI;
private final ISysCache sysCache;
private final EmergencySeriousDiseaseMapper emergencySeriousDiseaseMapper;
private final AnalyzeTableManager analyzeTableManager;
private final DictUtil dictUtil;
private final AsyncTaskExecutor taskExecutor;
// 应急医院导出code
private final String exportCode = "dataResourceExportCode";
@Override
public IPage<DiagnosisDataInfo> diagnosisDataPage(DiagnosisDataPageParam pageParam) {
IPage<DiagnosisDataInfo> resultPage = new Page<>();
LambdaQueryWrapper<EmergencySeriousDisease> wrapper = buildHospitalArchivesWrapper(pageParam);
IPage<EmergencySeriousDisease> resourceIPage = emergencySeriousDiseaseMapper.selectPage(new Page<>(pageParam.getPageNo(),pageParam.getPageSize()),wrapper);
BeanUtils.copyProperties(resourceIPage, resultPage, "records");
if(ObjectUtil.isNotEmpty(resourceIPage.getRecords())){
List<DiagnosisDataInfo> archivesInfos = resourceIPage.getRecords().stream().map(DiagnosisDataInfo::new).collect(Collectors.toList());
// 处理用户相关信息
setUserInfos(archivesInfos);
resultPage.setRecords(archivesInfos);
}
return resultPage;
}
@Override
public TableInfo tableStructure() {
List<String> tableNames = Collections.singletonList("emergency_serious_disease");
Map<String, ColumnMetaData> columnInfo = analyzeTableManager.columnInfo(tableNames, DiagnosisData.class);
TableCreateInfo createInfo = getTableCreateInfo();
TableInfo tableInfo = new TableInfo();
tableInfo.setColumnInfo(columnInfo);
tableInfo.setCreateInfo(createInfo);
return tableInfo;
}
@Override
public BeanDictInfo dict() {
Map<String, ColumnDictData> dataMap = ColumnUtil.convertDict(DiagnosisData.class, dictUtil::queryDictItemListByCode);
TableCreateInfo createInfo = getTableCreateInfo();
BeanDictInfo beanDictInfo = new BeanDictInfo();
beanDictInfo.setDictDataMap(dataMap);
beanDictInfo.setCreateInfo(createInfo);
return beanDictInfo;
}
@Override
public void exportXls(DiagnosisDataPageParam pageParam) {
AsyncUtils.exportTaskExecute(exportCode, taskExecutor, () -> {
try {
pageParam.setPageNo(1);
pageParam.setPageSize(99999);
List<DiagnosisDataInfo> records = diagnosisDataPage(pageParam).getRecords();
setExportData(new DiagnosisExport(records).getVoList());
} catch (Exception e) {
log.error("导出结果请在导出记录查看", e);
}
});
}
@Override
public DiagnosisDataInfo statistics(DiagnosisDataPageParam pageParam) {
DiagnosisDataInfo statistics = new DiagnosisDataInfo();
pageParam.setPageNo(1);
pageParam.setPageSize(99999);
List<DiagnosisDataInfo> records = diagnosisDataPage(pageParam).getRecords();
// 统计有多少个单位
statistics.setDepartName(records.stream().map(DiagnosisDataInfo::getDepartName).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个部门
statistics.setOrgName(records.stream().map(DiagnosisDataInfo::getOrgName).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个姓名
statistics.setRealName(records.stream().map(DiagnosisDataInfo::getRealName).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个工号
statistics.setWorkNo(records.stream().map(DiagnosisDataInfo::getWorkNo).filter(Objects::nonNull).distinct().count()+"");
// 统计性别女有多少 及 性别男有多少 文字显示 女2/男3
statistics.setSex(records.stream().map(DiagnosisDataInfo::getSex).filter(Objects::nonNull).collect(Collectors.groupingBy(a -> a, Collectors.counting())).entrySet().stream()
.map(entry -> entry.getKey() + entry.getValue()).collect(Collectors.joining("/")));
// 统计平均年龄
statistics.setAge(records.stream().map(DiagnosisDataInfo::getAge).filter(Objects::nonNull).mapToInt(Integer::parseInt).average().orElse(0)+"");
// 统计有多少个电话
statistics.setTelPhone(records.stream().map(DiagnosisDataInfo::getTelPhone).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个身份证号
statistics.setIdNo(records.stream().map(DiagnosisDataInfo::getIdNo).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个预约医院
statistics.setHospitalName(records.stream().map(DiagnosisDataInfo::getHospitalName).filter(Objects::nonNull).distinct().count()+"");
// 统计挂号类别 统计出每种字典值的数量
Map<String, Long> collect = dictUtil.queryDictItemListByCode("category").stream()
.collect(Collectors.toMap(DictModel::getValue, item -> records.stream().filter(record -> item.getValue().equals(record.getRegisterCategory())).count()));
statistics.setRegisterCategory(collect+"");
// 统计有多少个预约科室
statistics.setReservationOffice(records.stream().map(DiagnosisDataInfo::getReservationOffice).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个预约医生
statistics.setReservationDoctor(records.stream().map(DiagnosisDataInfo::getReservationDoctor).filter(Objects::nonNull).distinct().count()+"");
// 统计状态 统计出每种字典值的数量
Map<String, Long> collect1 = dictUtil.queryDictItemListByCode("emergency_serious_state").stream()
.collect(Collectors.toMap(DictModel::getValue, item -> records.stream().filter(record -> item.getValue().equals(record.getState())).count()));
statistics.setState(collect1+"");
// 统计有多少个驻场人员
statistics.setStationUserName(records.stream().map(DiagnosisDataInfo::getStationUserName).filter(Objects::nonNull).distinct().count()+"");
return statistics;
}
private LambdaQueryWrapper<EmergencySeriousDisease> buildHospitalArchivesWrapper(DiagnosisDataPageParam param){
LambdaQueryWrapper<EmergencySeriousDisease> queryWrapper = WrapperUtils.initLambdaWrapper(param);
// 单位部门、姓名、工号、性别、年龄、身份证号
if (StrUtil.isNotEmpty(param.getOrgCode()) ||
StrUtil.isNotEmpty(param.getRealName()) ||
StrUtil.isNotEmpty(param.getWorkNo()) ||
ObjUtil.isNotEmpty(param.getSex()) ||
ObjUtil.isNotEmpty(param.getAge()) ||
ObjUtil.isNotEmpty(param.getIdCard())) {
HealthMealsWeightQueryVO queryVO = getHealthMealsWeightQueryVO(param);
List<BaseUser> records = sysBaseAPI.getUsersByMealsWeight(queryVO).getResult().getRecords();
List<String> userIds = records.stream().map(BaseUser::getUserId).collect(Collectors.toList());
queryWrapper.in(EmergencySeriousDisease::getUserId, CollUtil.isNotEmpty(userIds)?userIds: Collections.singletonList("-1"));
}
// 预约医院
if (ObjUtil.isNotEmpty(param.getHospitalId())){
queryWrapper.eq(EmergencySeriousDisease::getHospitalId,param.getHospitalId());
}
// 挂号类别
if (ObjUtil.isNotEmpty(param.getRegisterCategory())){
queryWrapper.eq(EmergencySeriousDisease::getRegisterCategory,param.getRegisterCategory());
}
// 预约医生
if (ObjUtil.isNotEmpty(param.getReservationDoctor())){
queryWrapper.like(EmergencySeriousDisease::getReservationDoctor,param.getReservationDoctor());
}
// 预约时间
if (ObjUtil.isNotEmpty(param.getAppointmentTimeStart()) && ObjUtil.isNotNull(param.getAppointmentTimeEnd())){
queryWrapper.between(EmergencySeriousDisease::getReservationTime,param.getAppointmentTimeStart(),param.getAppointmentTimeEnd());
}
return queryWrapper;
}
private TableCreateInfo getTableCreateInfo() {
TableInfoEnum user = TableInfoEnum.USER;
TableCreateInfo info = new TableCreateInfo();
info.setTime(user.getTime());
info.setDesign(new ContactInfo(user.getDesign().getName(), user.getDesign().getCall()));
info.setCharge(new ContactInfo(user.getCharge().getName(), user.getCharge().getCall()));
info.setCompleted(new ContactInfo(user.getCompleted().getName(), user.getCompleted().getCall()));
return info;
}
private void setExportData(List<DiagnosisExport> voList){
int dataSize = voList.size();
String exportTitle = "应急中心就医导出";
AsyncUtils.exportStartUpdate(dataSize, exportTitle);
Workbook workbook;
try {
workbook = AsyncUtils.listToExcelAutoPoi(exportTitle, exportTitle, voList, DiagnosisExport.class);
} catch (Exception e) {
log.error("生成导出文件有误:{}", exportTitle, e);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
return;
}
try {
String filePath = AsyncUtils.uploadWorkbook(workbook, MyUploadUtil.EXPORT_BIZ + "/data/diagnosis", AsyncUtils.filename(exportTitle));
if (StrUtil.isEmpty(filePath)) {
log.error("上传导出文件有误:{}", exportTitle);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
return;
}
AsyncUtils.exportFinishUpdate(dataSize, filePath);
} catch (Exception e) {
log.error("上传导出文件有误:{}", exportTitle, e);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
}
}
private void setUserInfos(List<DiagnosisDataInfo> userInfos){
if (ObjectUtil.isNotEmpty(userInfos)){
List<String> userIds = userInfos.stream().map(DiagnosisDataInfo::getUserId).collect(Collectors.toList());
List<String> operatorIds = userInfos.stream().map(DiagnosisDataInfo::getOperatorId).distinct().collect(Collectors.toList());
Set<String> userIdList = new HashSet<>();
userIdList.addAll(userIds);
userIdList.addAll(operatorIds);
List<BaseEmployeeInfo> loginUsers = sysBaseAPI.queryBaseEmployeeInfo(new HashSet<>(userIdList));
// 根据 userId分组
Map<String, BaseEmployeeInfo> userMap = loginUsers.stream().collect(Collectors.toMap(BaseEmployeeInfo::getUserId, a -> a, (k1, k2) -> k1));
for (DiagnosisDataInfo userInfo : userInfos) {
BaseEmployeeInfo user = userMap.get(userInfo.getUserId());
if (ObjUtil.isNotEmpty(user)){
userInfo.setRealName(user.getRealName());
userInfo.setWorkNo(user.getWorkNo());
if (ObjUtil.isNotEmpty(user.getSex())){
userInfo.setSex(user.getSex().toString());
}
if (ObjUtil.isNotEmpty(user.getAge())){
userInfo.setAge(user.getAge().toString());
}
userInfo.setTelPhone(user.getPhone());
userInfo.setIdNo(user.getIdCard());
setDepart(userInfo,user);
}
BaseEmployeeInfo operator = userMap.get(userInfo.getOperatorId());
if (ObjUtil.isNotEmpty(operator)){
userInfo.setOrgName(operator.getRealName());
}
}
}
}
private void setDepart(DiagnosisDataInfo a,BaseEmployeeInfo v){
SysDepart secondDepart = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(v.getThisDeptCode()));
if (ObjUtil.isNotEmpty(secondDepart)){
a.setDepartName(secondDepart.getDepartName());
}
SysDepart thirdDepart = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(v.getThisDeptCode()));
if (ObjUtil.isNotEmpty(thirdDepart)){
a.setOrgName(thirdDepart.getDepartName());
}
}
private static @NotNull HealthMealsWeightQueryVO getHealthMealsWeightQueryVO(DiagnosisDataPageParam param) {
HealthMealsWeightQueryVO queryVO = new HealthMealsWeightQueryVO();
queryVO.setOrgCode(param.getOrgCode());
queryVO.setRealName(param.getRealName());
queryVO.setWorkNo(param.getWorkNo());
queryVO.setSex(param.getSex());
queryVO.setAge(param.getAge());
queryVO.setAgeB(param.getAgeB());
queryVO.setAgeCondition(param.getAgeCondition());
queryVO.setIdCard(param.getIdCard());
queryVO.setPageNo(1);
queryVO.setPageSize(99999);
return queryVO;
}
}
@@ -0,0 +1,48 @@
package com.renkang.emergency.data.service.impl;
import com.renkang.emergency.data.service.DataEmergencyService;
import com.renkang.emergency.entity.EmergencyProfessionUser;
import org.jeecg.common.system.util.DictUtil;
import org.jeecg.config.mybatis.AnalyzeTableManager;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.ColumnDictData;
import org.jeecg.config.mybatis.bean.TableCreateInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import org.jeecg.enums.TableInfoEnum;
import org.jeecg.util.ColumnUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Map;
/**
* @author stan
* @since 2024-12-23
*/
@Service
public class DataEmergencyServiceImpl implements DataEmergencyService {
@Autowired
private AnalyzeTableManager analyzeTableManager;
@Autowired
private DictUtil dictUtil;
@Override
public TableInfo tableStructure() {
return new TableInfo(new TableCreateInfo(TableInfoEnum.DEFAULT),
analyzeTableManager.columnInfo(Collections.singletonList("emergency_profession_user"), EmergencyProfessionUser.class));
}
@Override
public BeanDictInfo dict() {
Map<String, ColumnDictData> dataMap = ColumnUtil.convertDict(EmergencyProfessionUser.class, dictUtil::queryDictItemListByCode);
return new BeanDictInfo(new TableCreateInfo(TableInfoEnum.DEFAULT),dataMap);
}
}
@@ -0,0 +1,258 @@
package com.renkang.emergency.data.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.data.model.dto.DiagnosisDataPageParam;
import com.renkang.emergency.data.model.dto.PhoneDataPageParam;
import com.renkang.emergency.data.model.vo.*;
import com.renkang.emergency.data.service.DataDiagnosisService;
import com.renkang.emergency.data.service.DataPhoneService;
import com.renkang.emergency.entity.EmergencyGrouped;
import com.renkang.emergency.entity.EmergencySeriousDisease;
import com.renkang.emergency.entity.TblQimoNotice;
import com.renkang.emergency.entity.TblUserHelp;
import com.renkang.emergency.mapper.EmergencyGroupedMapper;
import com.renkang.emergency.mapper.EmergencySeriousDiseaseMapper;
import com.renkang.emergency.mapper.TblQimoNoticeMapper;
import com.renkang.emergency.mapper.TblUserHelpMapper;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecg.bean.request.HealthMealsWeightQueryVO;
import org.jeecg.bean.response.BaseUser;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.util.DictUtil;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.MyUploadUtil;
import org.jeecg.config.mybatis.AnalyzeTableManager;
import org.jeecg.config.mybatis.bean.*;
import org.jeecg.enums.TableInfoEnum;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.util.AsyncUtils;
import org.jeecg.util.ColumnUtil;
import org.jeecg.util.WrapperUtils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: 数据模块-应急数据-应急来电serviceImpl
*/
@Service
@RequiredArgsConstructor
public class DataPhoneServiceImpl implements DataPhoneService {
private static final Logger log = LoggerFactory.getLogger(DataPhoneServiceImpl.class);
private final ISysBaseAPI sysBaseAPI;
private final ISysCache sysCache;
private final TblQimoNoticeMapper noticeMapper;
private final EmergencyGroupedMapper groupedMapper;
private final AnalyzeTableManager analyzeTableManager;
private final DictUtil dictUtil;
private final AsyncTaskExecutor taskExecutor;
// 应急医院导出code
private final String exportCode = "dataPhoneExportCode";
@Override
public IPage<PhoneDataInfo> phoneDataPage(PhoneDataPageParam pageParam) {
IPage<PhoneDataInfo> resultPage = new Page<>();
LambdaQueryWrapper<TblQimoNotice> wrapper = buildHospitalArchivesWrapper(pageParam);
IPage<TblQimoNotice> resourceIPage = noticeMapper.selectPage(new Page<>(pageParam.getPageNo(),pageParam.getPageSize()),wrapper);
BeanUtils.copyProperties(resourceIPage, resultPage, "records");
if(ObjectUtil.isNotEmpty(resourceIPage.getRecords())){
List<PhoneDataInfo> archivesInfos = resourceIPage.getRecords().stream().map(PhoneDataInfo::new).collect(Collectors.toList());
// 处理用户相关信息
setUserInfos(archivesInfos);
resultPage.setRecords(archivesInfos);
}
return resultPage;
}
@Override
public TableInfo tableStructure() {
List<String> tableNames = Collections.singletonList("tbl_qimo_notice");
Map<String, ColumnMetaData> columnInfo = analyzeTableManager.columnInfo(tableNames, PhoneData.class);
TableCreateInfo createInfo = getTableCreateInfo();
TableInfo tableInfo = new TableInfo();
tableInfo.setColumnInfo(columnInfo);
tableInfo.setCreateInfo(createInfo);
return tableInfo;
}
@Override
public BeanDictInfo dict() {
Map<String, ColumnDictData> dataMap = ColumnUtil.convertDict(PhoneData.class, dictUtil::queryDictItemListByCode);
TableCreateInfo createInfo = getTableCreateInfo();
BeanDictInfo beanDictInfo = new BeanDictInfo();
beanDictInfo.setDictDataMap(dataMap);
beanDictInfo.setCreateInfo(createInfo);
return beanDictInfo;
}
@Override
public void exportXls(PhoneDataPageParam pageParam) {
AsyncUtils.exportTaskExecute(exportCode, taskExecutor, () -> {
try {
pageParam.setPageNo(1);
pageParam.setPageSize(99999);
List<PhoneDataInfo> records = phoneDataPage(pageParam).getRecords();
setExportData(new PhoneExport(records).getVoList());
} catch (Exception e) {
log.error("导出结果请在导出记录查看", e);
}
});
}
@Override
public PhoneDataInfo statistics(PhoneDataPageParam pageParam) {
PhoneDataInfo statistics = new PhoneDataInfo();
pageParam.setPageNo(1);
pageParam.setPageSize(99999);
List<PhoneDataInfo> records = phoneDataPage(pageParam).getRecords();
// 统计有多少个单位
statistics.setDepartName(records.stream().map(PhoneDataInfo::getDepartName).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个部门
statistics.setOrgName(records.stream().map(PhoneDataInfo::getOrgName).filter(Objects::nonNull).distinct().count()+"");
// 统计有多少个姓名
statistics.setRealName(records.stream().map(PhoneDataInfo::getRealName).filter(Objects::nonNull).distinct().count()+"");
// 统计性别女有多少 及 性别男有多少 文字显示 女2/男3
statistics.setSex(records.stream().map(PhoneDataInfo::getSex).filter(Objects::nonNull).collect(Collectors.groupingBy(a -> a, Collectors.counting())).entrySet().stream()
.map(entry -> entry.getKey() + entry.getValue()).collect(Collectors.joining("/")));
// 统计有多少个电话
statistics.setPhone(records.stream().map(PhoneDataInfo::getPhone).filter(Objects::nonNull).distinct().count()+"");
return statistics;
}
private LambdaQueryWrapper<TblQimoNotice> buildHospitalArchivesWrapper(PhoneDataPageParam param){
// 数据库表中不存在create_time字段 会报错 使用data_date覆盖掉create_time
if (param.getColumn().equals("createTime")) {
param.setColumn("create_date");
}
LambdaQueryWrapper<TblQimoNotice> queryWrapper = WrapperUtils.initLambdaWrapper(param);
queryWrapper.orderByDesc(TblQimoNotice::getCreateDate);
// 单位部门、姓名、性别
if (StrUtil.isNotEmpty(param.getOrgCode()) ||
StrUtil.isNotEmpty(param.getRealname()) ||
ObjUtil.isNotEmpty(param.getSex())) {
List<String> phones = sysBaseAPI.getPhonesByNameOrOrgCodeOrSex(param.getRealname(), param.getOrgCode(), param.getSex()).getResult();
queryWrapper.in(TblQimoNotice::getCallNo, CollUtil.isNotEmpty(phones)?phones: Collections.singletonList("-1"));
}
if (StrUtil.isNotEmpty(param.getCenterId())) {
// 查询呼叫中心对应的坐席工号
List<EmergencyGrouped> emergencyGroupeds = groupedMapper.selectList(new LambdaQueryWrapper<EmergencyGrouped>().eq(EmergencyGrouped::getCenterId, param.getCenterId()));
if (CollUtil.isNotEmpty(emergencyGroupeds)){
List<String> seatIds = emergencyGroupeds.stream().map(EmergencyGrouped::getSeatId).collect(Collectors.toList());
queryWrapper.in(TblQimoNotice::getExten, seatIds);
}else {
queryWrapper.eq(TblQimoNotice::getExten, "-1");
}
}
if (StrUtil.isNotEmpty(param.getCenterName())) {
// 查询呼叫中心对应的坐席工号
List<EmergencyGrouped> emergencyGroupeds = groupedMapper.selectList(new LambdaQueryWrapper<EmergencyGrouped>().like(EmergencyGrouped::getCenterName, param.getCenterName()));
if (CollUtil.isNotEmpty(emergencyGroupeds)){
List<String> seatIds = emergencyGroupeds.stream().map(EmergencyGrouped::getSeatId).collect(Collectors.toList());
queryWrapper.in(TblQimoNotice::getExten, seatIds);
}else {
queryWrapper.eq(TblQimoNotice::getExten, "-1");
}
}
if (StrUtil.isNotEmpty(param.getSeatId())) {
queryWrapper.eq(TblQimoNotice::getExten, param.getSeatId());
}
return queryWrapper;
}
private TableCreateInfo getTableCreateInfo() {
TableInfoEnum user = TableInfoEnum.USER;
TableCreateInfo info = new TableCreateInfo();
info.setTime(user.getTime());
info.setDesign(new ContactInfo(user.getDesign().getName(), user.getDesign().getCall()));
info.setCharge(new ContactInfo(user.getCharge().getName(), user.getCharge().getCall()));
info.setCompleted(new ContactInfo(user.getCompleted().getName(), user.getCompleted().getCall()));
return info;
}
private void setExportData(List<PhoneExport> voList){
int dataSize = voList.size();
String exportTitle = "应急中心就医导出";
AsyncUtils.exportStartUpdate(dataSize, exportTitle);
Workbook workbook;
try {
workbook = AsyncUtils.listToExcelAutoPoi(exportTitle, exportTitle, voList, PhoneExport.class);
} catch (Exception e) {
log.error("生成导出文件有误:{}", exportTitle, e);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
return;
}
try {
String filePath = AsyncUtils.uploadWorkbook(workbook, MyUploadUtil.EXPORT_BIZ + "/data/phone", AsyncUtils.filename(exportTitle));
if (StrUtil.isEmpty(filePath)) {
log.error("上传导出文件有误:{}", exportTitle);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
return;
}
AsyncUtils.exportFinishUpdate(dataSize, filePath);
} catch (Exception e) {
log.error("上传导出文件有误:{}", exportTitle, e);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
}
}
private void setUserInfos(List<PhoneDataInfo> userInfos){
if (ObjectUtil.isNotEmpty(userInfos)){
Set<String> phoneList = userInfos.stream().map(PhoneDataInfo::getPhone).collect(Collectors.toSet());
List<SysUser> loginUsers = sysBaseAPI.getUserByPhoneList(new ArrayList<>(phoneList)).getResult();
// 根据 userId分组
Map<String, SysUser> userMap = loginUsers.stream().collect(Collectors.toMap(SysUser::getPhone, a -> a, (k1, k2) -> k1));
List<String> seatNoList = userInfos.stream().map(PhoneDataInfo::getSeatNo).distinct().collect(Collectors.toList());
List<EmergencyGrouped> emergencyGroupeds = groupedMapper.selectList(new LambdaQueryWrapper<EmergencyGrouped>().in(EmergencyGrouped::getSeatId, seatNoList));
Map<String, EmergencyGrouped> groupedMap = emergencyGroupeds.stream().collect(Collectors.toMap(EmergencyGrouped::getSeatId, a -> a, (k1, k2) -> k1));
for (PhoneDataInfo userInfo : userInfos) {
SysUser user = userMap.get(userInfo.getPhone());
if (ObjUtil.isNotEmpty(user)){
userInfo.setRealName(user.getRealname());
userInfo.setSex(user.getSex().toString());
userInfo.setPhone(user.getPhone());
userInfo.setUserId(user.getId());
setDepart(userInfo,user);
}else {
userInfo.setDepartName("未知");
userInfo.setOrgName("未知");
userInfo.setRealName("未知");
userInfo.setSex("未知");
}
EmergencyGrouped emergencyGrouped = groupedMap.get(userInfo.getSeatNo());
if (ObjUtil.isNotEmpty(emergencyGrouped)){
userInfo.setCenterId(emergencyGrouped.getCenterId());
userInfo.setCenterName(emergencyGrouped.getCenterName());
}
}
}
}
private void setDepart(PhoneDataInfo a,SysUser v){
SysDepart secondDepart = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(v.getOrgCode()));
if (ObjUtil.isNotEmpty(secondDepart)){
a.setDepartName(secondDepart.getDepartName());
}
SysDepart thirdDepart = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(v.getOrgCode()));
if (ObjUtil.isNotEmpty(thirdDepart)){
a.setOrgName(thirdDepart.getDepartName());
}
}
}
@@ -0,0 +1,151 @@
package com.renkang.emergency.data.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.renkang.emergency.data.model.dto.ResourceDataPageParam;
import com.renkang.emergency.data.model.vo.ResourceData;
import com.renkang.emergency.data.model.vo.ResourceDataInfo;
import com.renkang.emergency.data.model.vo.ResourceExport;
import com.renkang.emergency.data.service.DataResourceService;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.mapper.ResourceMapper;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecg.common.system.util.DictUtil;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.MyUploadUtil;
import org.jeecg.config.mybatis.AnalyzeTableManager;
import org.jeecg.config.mybatis.bean.BeanDictInfo;
import org.jeecg.config.mybatis.bean.ColumnDictData;
import org.jeecg.config.mybatis.bean.TableCreateInfo;
import org.jeecg.config.mybatis.bean.TableInfo;
import org.jeecg.enums.TableInfoEnum;
import org.jeecg.util.AsyncUtils;
import org.jeecg.util.ColumnUtil;
import org.jeecg.util.WrapperUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: 档案模块-机构信息-一线医疗serviceimpl
* @Author: feng
* @Date: 2024-11-20
* @Version: V1.0
*/
@Service
@RequiredArgsConstructor
public class DataResourceServiceImpl implements DataResourceService {
private static final Logger log = LoggerFactory.getLogger(DataResourceServiceImpl.class);
private final ResourceMapper resourceMapper;
private final AnalyzeTableManager analyzeTableManager;
private final DictUtil dictUtil;
private final AsyncTaskExecutor taskExecutor;
// 应急医院导出code
private final String exportCode = "dataResourceExportCode";
@Override
public IPage<ResourceDataInfo> resourceDataPage(ResourceDataPageParam pageParam) {
IPage<ResourceDataInfo> resultPage = new Page<>();
LambdaQueryWrapper<Resource> wrapper = WrapperUtils.initLambdaWrapper(pageParam);
// 默认只查询油田医院及合作医院
wrapper.in(Resource::getType, Arrays.asList(1,2));
wrapper.eq(ObjectUtil.isNotEmpty(pageParam.getType()),Resource::getType,pageParam.getType());
wrapper.eq(ObjectUtil.isNotEmpty(pageParam.getLevel()),Resource::getLevel,pageParam.getLevel());
IPage<Resource> resourceIPage = resourceMapper.selectPage(new Page<>(pageParam.getPageNo(),pageParam.getPageSize()),wrapper);
BeanUtils.copyProperties(resourceIPage, resultPage, "records");
if(ObjectUtil.isNotEmpty(resourceIPage.getRecords())){
List<ResourceDataInfo> archivesInfos = resourceIPage.getRecords().stream().map(ResourceDataInfo::new).collect(Collectors.toList());
resultPage.setRecords(archivesInfos);
}
return resultPage;
}
@Override
public TableInfo tableStructure() {
return new TableInfo(new TableCreateInfo(TableInfoEnum.DEFAULT),
analyzeTableManager.columnInfo(Collections.singletonList("emergency_resource"), ResourceData.class));
}
@Override
public BeanDictInfo dict() {
Map<String, ColumnDictData> dataMap = ColumnUtil.convertDict(ResourceData.class, dictUtil::queryDictItemListByCode);
return new BeanDictInfo(new TableCreateInfo(TableInfoEnum.DEFAULT),dataMap);
}
@Override
public void exportXls(ResourceDataPageParam pageParam) {
AsyncUtils.exportTaskExecute(exportCode, taskExecutor, () -> {
try {
pageParam.setPageNo(1);
pageParam.setPageSize(99999);
List<ResourceDataInfo> records = resourceDataPage(pageParam).getRecords();
setExportData(new ResourceExport(records).getVoList());
} catch (Exception e) {
log.error("导出结果请在导出记录查看", e);
}
});
}
@Override
public ResourceDataInfo statistics(ResourceDataPageParam pageParam) {
ResourceDataInfo statistics = new ResourceDataInfo();
pageParam.setPageNo(1);
pageParam.setPageSize(99999);
List<ResourceDataInfo> records = resourceDataPage(pageParam).getRecords();
// 统计医院名称
statistics.setName(records.stream().map(ResourceDataInfo::getName).distinct().count()+"");
// 统计有照片的有多少 以及 没有照片的有多少 赋值到img 中 用于前端展示 例如 有10/无20
statistics.setImg(""+records.stream().filter(item -> StrUtil.isNotEmpty(item.getImg())).count()
+"/无"+records.stream().filter(item -> StrUtil.isEmpty(item.getImg())).count());
// 统计医院级别 统计出每种字典值的数量
Map<String, Long> collect = dictUtil.queryDictItemListByCode("hospital_level").stream()
.collect(Collectors.toMap(DictModel::getValue, item -> records.stream().filter(record -> item.getValue().equals(record.getLevel())).count()));
statistics.setLevel(collect+"");
// 统计有多少电话
statistics.setMobile(records.stream().filter(item -> StrUtil.isNotEmpty(item.getMobile())).count()+"");
// 统计有多少简介
statistics.setResourceDesc(records.stream().filter(item -> StrUtil.isNotEmpty(item.getResourceDesc())).count()+"");
// 统计有多少网址
statistics.setUrl(records.stream().filter(item -> StrUtil.isNotEmpty(item.getUrl())).count()+"");
return statistics;
}
private void setExportData(List<ResourceExport> voList){
int dataSize = voList.size();
String exportTitle = "应急医院导出";
AsyncUtils.exportStartUpdate(dataSize, exportTitle);
Workbook workbook;
try {
workbook = AsyncUtils.listToExcelAutoPoi(exportTitle, exportTitle, voList, ResourceExport.class);
} catch (Exception e) {
log.error("生成导出文件有误:{}", exportTitle, e);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
return;
}
try {
String filePath = AsyncUtils.uploadWorkbook(workbook, MyUploadUtil.EXPORT_BIZ + "/data/resource", AsyncUtils.filename(exportTitle));
if (StrUtil.isEmpty(filePath)) {
log.error("上传导出文件有误:{}", exportTitle);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
return;
}
AsyncUtils.exportFinishUpdate(dataSize, filePath);
} catch (Exception e) {
log.error("上传导出文件有误:{}", exportTitle, e);
AsyncUtils.exportErrorUpdate("生成导出文件有误");
}
}
}
@@ -0,0 +1,40 @@
package com.renkang.emergency.enums;
/**
* @author Junqiang Zhu
* @date 2023-12-13 09:45
*/
public class AedEnumUtil {
public enum WarnTypeEnum {
BATTERY, // 电池
ROUTER, // 路由
EXPIRED, // 过期时间
CHECK // 自检
}
public enum BatteryPowerEnum {
OK, // 正常
LOW, // 电量低
CHANGE // 需要更换
}
public enum RouterPowerEnum {
OK, // 正常
LOW, // 电量低
}
public enum ExpiredPowerEnum {
OK, // 正常
APPROACH, // 快过期
EXPIRED // 已过期
}
public enum CheckEnum {
OK, // 正常
CANNOT_FIND, // 没有找到
CANNOT_CONNECT, // 无法连接
CANNOT_GET// 无法获取
}
}
@@ -0,0 +1,53 @@
package com.renkang.emergency.manager;
import cn.hutool.core.bean.BeanUtil;
import com.renkang.emergency.bean.response.AedGeo;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Aed;
import com.renkang.emergency.mapper.AedMapper;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
/**
* @author Junqiang Zhu
* @date 2023-11-30
*/
@Component
@Slf4j
public class AedCacheManager {
@Autowired
private AedMapper medicalResourceMapper;
@Autowired
private ISysCache sysCache;
@Cacheable(cacheNames = EmergencyConstants.AED_REDIS_KEY, key = "#id", unless = "#result == null")
public AedGeo getOne(Integer id) {
Aed resource = medicalResourceMapper.selectById(id);
if (resource == null) {
return null;
}
SysDepart sysDepart = sysCache.getDepartByOrgCode(resource.getDepartCode());
if (sysDepart != null) {
resource.setDepartName(sysDepart.getDepartName());
}
AedGeo geo = new AedGeo();
BeanUtil.copyProperties(resource, geo);
return geo;
}
@CacheEvict(cacheNames = EmergencyConstants.AED_REDIS_KEY, key = "#id")
public void deleteCache(Integer id) {
}
@CacheEvict(cacheNames = EmergencyConstants.AED_REDIS_KEY, allEntries = true)
public void deleteAllCaches() {
}
}
@@ -0,0 +1,151 @@
package com.renkang.emergency.manager;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.bean.response.AedGeo;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Aed;
import com.renkang.emergency.mapper.AedMapper;
import com.renkang.emergency.util.ResourceUtils;
import org.jeecg.common.constant.CommonConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.*;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Junqiang Zhu
* @date 2023-11-30
*/
@Component
public class AedManger {
@Autowired
private AedMapper aedMapper;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private AedCacheManager aedCacheManager;
@PostConstruct
public void init() {
initAedToRedisGeo();
}
private void initAedToRedisGeo() {
delAedRedisGeo();
List<Aed> aedList = aedList();
if (CollectionUtil.isEmpty(aedList)) {
return;
}
aedList.forEach(this::addGeo);
}
private void delAedRedisGeo() {
redisTemplate.delete(EmergencyConstants.AED_REDIS_KEY);
}
private List<Aed> aedList() {
LambdaQueryWrapper<Aed> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(Aed::getId,
Aed::getLongitude,
Aed::getLatitude)
.eq(Aed::getDelFlag, CommonConstant.DEL_FLAG_0);
return aedMapper.selectList(queryWrapper);
}
public List<AedGeo> geoSearch(BigDecimal longitude, BigDecimal latitude, double radiusRange, Integer resourceNum, String name) {
if (longitude == null || latitude == null) {
return Collections.emptyList();
}
// 点
Point point = new Point(longitude.doubleValue(), latitude.doubleValue());
Distance distance = new Distance(radiusRange, Metrics.KILOMETERS);
Circle circle = new Circle(point, distance);
// cache
GeoResults<RedisGeoCommands.GeoLocation<Object>> radius = redisTemplate.opsForGeo().radius(EmergencyConstants.AED_REDIS_KEY, circle);
if (ObjectUtil.isNull(radius)) {
return null;
}
List<AedGeo> result = new ArrayList<>();
// 计算距离
for (GeoResult<RedisGeoCommands.GeoLocation<Object>> cache : radius) {
Integer id = (Integer) cache.getContent().getName();
AedGeo one = aedCacheManager.getOne(id);
if (one == null) {
continue;
}
Point geoPoint = new Point(one.getLongitude().doubleValue(), one.getLatitude().doubleValue());
one.setDistance(ResourceUtils.geoDistance(point, geoPoint));
result.add(one);
}
return aedRedisGeoLimit(result,resourceNum,name);
}
private List<AedGeo> aedRedisGeoLimit(List<AedGeo> aedGeos, Integer resourceNum, String name) {
if (CollectionUtil.isEmpty(aedGeos)) {
return Collections.emptyList();
}
// 资源名筛选
if (StrUtil.isNotBlank(name)) {
aedGeos = aedGeos.stream().filter(f -> f.getName().contains(name)).collect(Collectors.toList());
if (CollectionUtil.isEmpty(aedGeos)) {
return Collections.emptyList();
}
}
// 排序
aedGeos = aedGeos.stream()
.sorted((o1, o2) -> (int) (o1.getDistance() - o2.getDistance()))
.collect(Collectors.toList());
// 数量截取
if (ObjectUtil.isNotNull(resourceNum)) {
return aedGeos.stream().limit(resourceNum).collect(Collectors.toList());
}
// 返回
return aedGeos;
}
public void addGeo(Aed resource) {
if (resource.getLatitude() == null || resource.getLongitude() == null) {
return;
}
Point point = new Point(resource.getLongitude().doubleValue(), resource.getLatitude().doubleValue());
redisTemplate.opsForGeo().add(EmergencyConstants.AED_REDIS_KEY, point, resource.getId());
}
public void removeGeo(Integer id) {
if (ObjectUtil.isNull(id)) {
return;
}
redisTemplate.opsForGeo().remove(EmergencyConstants.AED_REDIS_KEY, id);
}
public void updateGeo(Aed resource) {
if (resource == null || ObjectUtil.isNull(resource.getId())) {
return;
}
removeGeo(resource.getId());
addGeo(resource);
}
}
@@ -0,0 +1,76 @@
package com.renkang.emergency.manager;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.mapper.ResourceMapper;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.SysDepart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* @author Junqiang Zhu
* @date 2023-04-25 15:04
*/
@Component("emergencyCacheManager")
public class EmergencyCacheManager {
@Autowired
private EmergencyCloudManager emergencyCloudManager;
@Autowired
private ResourceMapper resourceMapper;
@Autowired
private ISysCache sysCache;
public SysDepart getUserSecondDepart(String orgCode) {
if (StrUtil.isBlank(orgCode)) {
return new SysDepart();
}
SysDepart depart = sysCache.getDepartByOrgCode(GlobalUtils.getSecondDepartOrgCode(orgCode));
return ObjectUtil.isNull(depart) ? new SysDepart() : depart;
}
public SysDepart getUserDepart(String orgCode) {
if (StrUtil.isBlank(orgCode)) {
return new SysDepart();
}
SysDepart depart = sysCache.getDepartByOrgCode(orgCode);
return ObjectUtil.isNull(depart) ? new SysDepart() : depart;
}
@Cacheable(cacheNames = EmergencyConstants.RESOURCE_REDIS_KEY, key = "#id", unless = "#result == null")
public com.renkang.emergency.entity.Resource getById(String id) {
Resource resource = resourceMapper.selectById(id);
if (ObjectUtil.isNull(resource)) {
return resource;
}
List<DictModel> hospitalLevel = emergencyCloudManager.getDictItems("hospital_level");
Map<String, String> map = GlobalUtils.dictToMap(hospitalLevel);
resource.setLevel(map.get(resource.getLevel()));
return resource;
}
// @Cacheable(cacheNames = "aid:resourcePage", key = "#id", unless = "#result == null")
// public Resource getPageById(Long id) {
// return resourceMapper.selectHealthMedicalResourcePageById(id);
// }
@CacheEvict(cacheNames = EmergencyConstants.RESOURCE_REDIS_KEY, key = "#id")
public void deleteCache(String id) {
}
@CacheEvict(cacheNames = EmergencyConstants.RESOURCE_REDIS_KEY, allEntries = true)
public void deleteAllCaches() {
}
}
@@ -0,0 +1,77 @@
package com.renkang.emergency.manager;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections4.CollectionUtils;
import org.jeecg.bean.request.ListUser;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.LoginUserNew;
import org.jeecg.modules.system.entity.SysUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Junqiang Zhu
* @date 2023-04-26 13:25
*/
@Component
public class EmergencyCloudManager {
private final Logger logger = LoggerFactory.getLogger(EmergencyCloudManager.class);
@Autowired
private ISysBaseAPI sysBaseAPI;
@Cacheable(value = CacheConstant.SYS_DICT_CACHE, key = "#code", unless = "#result == null || #result.size() == 0")
public List<DictModel> getDictItems(String code) {
return sysBaseAPI.getDictItems(code);
}
public Map<String, LoginUserNew> listUser(List<String> userIds) {
ListUser listUser = new ListUser();
listUser.setUserIds(userIds);
Map<String, LoginUserNew> map = new HashMap<>();
List<LoginUserNew> list = null;
try {
// TODO 微服务调用会发送post请求 暂时将 listUserByIds修改为post
list = sysBaseAPI.listUserByIds(listUser);
} catch (Exception e) {
logger.error("微服务调用失败(system listUserByIds)");
}
if (CollectionUtils.isEmpty(list)) {
return map;
}
list.forEach(loginUserNew -> map.put(loginUserNew.getId(), loginUserNew));
return map;
}
public boolean checkExistUser(String username) {
List<String> strings = sysBaseAPI.checkExistUser(null, username, null, null);
return CollUtil.isNotEmpty(strings);
}
/**
* 用户分页数据
*
* @param filter 条件
* @param pageNo 页码
* @param pageSize 条数
* @return page
*/
public Page<SysUser> pageUser(SysUser filter, int pageNo, int pageSize, List<String> managerCodes) {
return sysBaseAPI.pageUser(filter, pageNo, pageSize, managerCodes);
}
}
@@ -0,0 +1,145 @@
package com.renkang.emergency.manager;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.entity.EmergencyCenter;
import com.renkang.emergency.entity.EmergencyCenterAdmin;
import com.renkang.emergency.entity.EmergencyProfessionUser;
import com.renkang.emergency.mapper.EmergencyCenterAdminMapper;
import com.renkang.emergency.mapper.EmergencyCenterMapper;
import com.renkang.emergency.mapper.EmergencyProfessionUserMapper;
import org.jeecg.global.GlobalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Junqiang Zhu
* @since 2024-09-19 13:08
*/
@Component
public class PermissionManager {
@Autowired
private EmergencyCenterAdminMapper emergencyCenterAdminMapper;
@Autowired
private EmergencyCenterMapper emergencyCenterMapper;
@Autowired
private EmergencyProfessionUserMapper emergencyProfessionUserMapper;
public String ifCenterAdminReturnCenterId() {
String userId = GlobalUtils.getLoginUser().getId();
LambdaQueryWrapper<EmergencyCenterAdmin> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EmergencyCenterAdmin::getUserId, userId);
List<EmergencyCenterAdmin> admins = emergencyCenterAdminMapper.selectList(queryWrapper);
if (CollUtil.isEmpty(admins)) {
return null;
}
String centerId = admins.get(0).getCenterId();
if (StrUtil.isBlank(centerId)) {
return "";
}
return centerId;
}
/**
* 如果是操作或者专业人员返回中心id
*
* @return id
*/
public String ifOpOrMajReturnCenterId() {
String userId = GlobalUtils.getLoginUser().getId();
LambdaQueryWrapper<EmergencyCenterAdmin> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EmergencyCenterAdmin::getUserId, userId);
EmergencyProfessionUser user = emergencyProfessionUserMapper.selectById(userId);
if (user == null) {
return null;
}
return user.getCenterId();
}
public LambdaQueryWrapper<EmergencyCenter> getManagerCenterQueryWrapper(String orgCode) {
String centerId = ifCenterAdminReturnCenterId();
String opCenterId = ifOpOrMajReturnCenterId();
List<String> managedCodes = GlobalUtils.getManagedCodes(orgCode);
LambdaQueryWrapper<EmergencyCenter> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(EmergencyCenter::getCreateTime);
ArrayList<String> centerIds = new ArrayList<>();
if (StrUtil.isNotBlank(centerId)) {
centerIds.add(centerId);
}
if (StrUtil.isNotBlank(opCenterId)) {
centerIds.add(opCenterId);
}
if (CollUtil.isNotEmpty(centerIds)) {
queryWrapper.in(EmergencyCenter::getId, centerIds.stream().distinct().collect(Collectors.toList()));
}
// 权限过滤
if (CollUtil.isNotEmpty(managedCodes)) {
if (!managedCodes.contains("A99")) {
queryWrapper.or(andWrapper -> {
for (int i = 0; i < managedCodes.size(); i++) {
if (i != 0) {
andWrapper.or();
}
andWrapper.likeRight(EmergencyCenter::getOrgCode, managedCodes.get(i));
}
});
}
}
return queryWrapper;
}
public List<String> loginUserCenterIds(String centerId) {
LambdaQueryWrapper<EmergencyCenter> managerCenterQueryWrapper = getManagerCenterQueryWrapper(null);
managerCenterQueryWrapper.select(EmergencyCenter::getId);
List<EmergencyCenter> emergencyCenters = emergencyCenterMapper.selectList(managerCenterQueryWrapper);
if (CollUtil.isEmpty(emergencyCenters)) {
return Collections.singletonList("999");
}
if (StrUtil.isBlank(centerId)) {
return emergencyCenters.stream().map(EmergencyCenter::getId).collect(Collectors.toList());
}
List<String> centerIds = emergencyCenters.stream()
.map(EmergencyCenter::getId)
.filter(f -> f.equals(centerId))
.collect(Collectors.toList());
if (CollUtil.isEmpty(centerIds)) {
return Collections.singletonList("999");
}
return centerIds;
}
private List<String> loginUserManagerDepartCenter() {
List<String> managedCodes = GlobalUtils.getManagedCodes(null);
if (CollUtil.isEmpty(managedCodes)) {
return Collections.emptyList();
}
LambdaQueryWrapper<EmergencyCenter> queryWrapper = new LambdaQueryWrapper<>();
// 权限过滤
if (CollUtil.isNotEmpty(managedCodes)) {
queryWrapper.and(andWrapper -> {
for (int i = 0; i < managedCodes.size(); i++) {
if (i != 0) {
andWrapper.or();
}
andWrapper.likeRight(EmergencyCenter::getOrgCode, managedCodes.get(i));
}
});
}
List<EmergencyCenter> emergencyCenters = emergencyCenterMapper.selectList(queryWrapper);
return emergencyCenters.stream().map(EmergencyCenter::getId).collect(Collectors.toList());
}
}
@@ -0,0 +1,172 @@
package com.renkang.emergency.manager;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.bean.common.ResourceExt;
import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.mapper.ResourceMapper;
import com.renkang.emergency.util.ResourceUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.jeecg.common.constant.CommonConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.*;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Jiang Shunzhi
* @date 2022/12/8
*/
@Component
public class ResourceManager {
@Autowired
private EmergencyCacheManager emergencyCacheManager;
@Autowired
private ResourceMapper resourceMapper;
@javax.annotation.Resource
private RedisTemplate<Object, Object> redisTemplate;
private static ResourceExt convert(Resource resource) {
if (Objects.isNull(resource)) {
return null;
}
ResourceExt resourceExt = new ResourceExt();
BeanUtil.copyProperties(resource, resourceExt);
return resourceExt;
}
@PostConstruct
public void init() {
LambdaQueryWrapper<Resource> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Resource::getStatus, CommonConstant.STATUS_1)
.eq(Resource::getDelFlag, CommonConstant.DEL_FLAG_0);
List<Resource> resources = resourceMapper.selectList(queryWrapper);
// 过滤数据
resources = resources.stream().filter(this::filter).collect(Collectors.toList());
// 缓存所有
resources.forEach(this::putGeoAll);
// 按照类型缓存
resources.forEach(this::putGeo);
}
private boolean filter(Resource resource) {
if (resource == null || resource.getLatitude() == null || resource.getLongitude() == null) {
return false;
}
if (resource.getLatitude().compareTo(BigDecimal.ZERO) == 0 || resource.getLongitude().compareTo(BigDecimal.ZERO) == 0) {
return false;
}
return true;
}
public void addOne(Resource resource) {
Point point = new Point(resource.getLongitude().doubleValue(), resource.getLatitude().doubleValue());
redisTemplate.opsForGeo()
.add(ResourceUtils.getTypeString(resource.getType()), point, resource.getId());
putGeoAll(resource);
}
public void delOne(Resource resource) {
String key = ResourceUtils.getTypeString(resource.getType());
redisTemplate.opsForGeo().remove(key, resource.getId());
redisTemplate.opsForGeo().remove(ResourceUtils.getTypeString(EmergencyConstants.RESOURCE_ALL), resource.getId());
// 删除缓存
emergencyCacheManager.deleteCache(resource.getId());
}
public void delBatch(List<Resource> list) {
if (CollectionUtils.isEmpty(list)) {
return;
}
for (Resource resource : list) {
delOne(resource);
}
}
public void editOne(Resource resource) {
if (StrUtil.isBlank(resource.getId())) {
return;
}
// 先删除
redisTemplate.opsForGeo().remove(ResourceUtils.getTypeString(resource.getType()), resource.getId());
redisTemplate.opsForGeo().remove(ResourceUtils.getTypeString(EmergencyConstants.RESOURCE_ALL), resource.getId());
// 再添加
addOne(resource);
// 删除旧缓存
emergencyCacheManager.deleteCache(resource.getId());
}
public void putGeo(Resource resource) {
Point point = new Point(resource.getLongitude().doubleValue(), resource.getLatitude().doubleValue());
redisTemplate.opsForGeo()
.add(ResourceUtils.getTypeString(resource.getType()), point, resource.getId());
}
public void putGeoAll(Resource resource) {
Point point = new Point(resource.getLongitude().doubleValue(), resource.getLatitude().doubleValue());
redisTemplate.opsForGeo()
.add(ResourceUtils.getTypeString(EmergencyConstants.RESOURCE_ALL), point, resource.getId());
}
public void removeGeo(Resource resource) {
redisTemplate.opsForGeo()
.remove(ResourceUtils.getTypeString(resource.getType()), resource.getId());
}
// public List<HealthMedicalResourcePage> getByIds(List<Long> ids) {
// return ids.stream()
// .map(self::getPageById)
// .collect(Collectors.toList());
// }
public List<ResourceExt> geoSearch(Point point, double distance, String type) {
String key = ResourceUtils.getTypeString(type);
Distance dist = new Distance(distance, Metrics.KILOMETERS);
Circle circle = new Circle(point, dist);
// 查询在距离内的点
GeoResults<RedisGeoCommands.GeoLocation<Object>> members = redisTemplate.opsForGeo()
.radius(key, circle);
List<ResourceExt> resources = new ArrayList<>();
if (ObjectUtils.isNotEmpty(members)) {
for (GeoResult<RedisGeoCommands.GeoLocation<Object>> member : members) {
String id = (String) member.getContent().getName();
LambdaQueryWrapper<Resource> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Resource::getId,id);
lambdaQueryWrapper.ne(Resource::getType,"3");
Resource resource = resourceMapper.selectOne(lambdaQueryWrapper);
if(resource == null){
continue;
}
ResourceExt resourceExt = convert(resource);
// 查询的对象不为空
if (ObjectUtils.isNotEmpty(resourceExt)) {
Point geoPoint = new Point(resourceExt.getLongitude().doubleValue(), resourceExt.getLatitude().doubleValue());
resourceExt.setDistance(ResourceUtils.geoDistance(point, geoPoint));
resources.add(resourceExt);
}
}
}
return resources;
}
}
@@ -0,0 +1,75 @@
package com.renkang.emergency.manager;
import org.jeecg.common.api.dto.YcMedicalCenterFakerData;
import org.jeecg.common.api.dto.YcUserHealthFakerData;
import org.jeecg.common.constant.FakerDataConstant;
import org.jeecg.common.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
/**
* @author Junqiang Zhu
* @since 2024-05-15 09:56
*/
@Component
public class YcInitManager {
@Autowired
private RedisUtil redisUtil;
@PostConstruct
public void init() {
// 一线医疗点数据
medicalCenterData();
// 员工健康数据
userHealthData();
}
private void userHealthData() {
Object o = redisUtil.get(FakerDataConstant.YC_USER_HEALTH);
if (o != null) {
return;
}
YcUserHealthFakerData data = new YcUserHealthFakerData();
data.setBigIll(82);
data.setHighRisk(786);
data.setSlowIll(832);
data.setFocusErr(2625);
data.setHealth(1778);
redisUtil.set(FakerDataConstant.YC_USER_HEALTH, data);
}
private void medicalCenterData() {
Object data = redisUtil.get(FakerDataConstant.YC_MEDICAL_CENTER);
if (data != null) {
return;
}
// 数据来源与旧大屏假数据
List<YcMedicalCenterFakerData> list = new ArrayList<>();
list.add(get("顺宁健康服务中心", 6, 28, 16, 1));
list.add(get("大水坑健康服务中心", 3, 7, 11, 2));
list.add(get("盘古梁医务室", 8, 4, 24, 3));
list.add(get("郝坨梁医务室", 6, 12, 12, 4));
list.add(get("五里湾二区医务室", 2, 9, 21, 5));
list.add(get("桐寨医务室", 4, 12, 17, 6));
list.add(get("新寨医务室", 3, 8, 15, 7));
list.add(get("油房庄医务室", 4, 18, 14, 8));
redisUtil.set(FakerDataConstant.YC_MEDICAL_CENTER, list);
}
private YcMedicalCenterFakerData get(String name, int high, int slow, int tour, int order) {
YcMedicalCenterFakerData data = new YcMedicalCenterFakerData();
data.setName(name);
data.setHigh(high);
data.setSlow(slow);
data.setTour(tour);
data.setOrder(order);
return data;
}
}
@@ -0,0 +1,14 @@
package com.renkang.emergency.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.renkang.emergency.entity.AedLatest;
/**
* @Description: aed_latest
* @Author: jeecg-boot
* @Date: 2023-12-12
* @Version: V1.0
*/
public interface AedLatestMapper extends BaseMapper<AedLatest> {
}
@@ -0,0 +1,11 @@
package com.renkang.emergency.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.renkang.emergency.entity.Aed;
/**
* @author stan
* @date 2023-11-30
*/
public interface AedMapper extends BaseMapper<Aed> {
}

Some files were not shown because too many files have changed in this diff Show More