Commit d1a52aea by Wangmin

Merge remote-tracking branch 'origin/dev' into dev

parents ed6444ac d8659897
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
<xxl-job.version>2.4.0</xxl-job.version> <xxl-job.version>2.4.0</xxl-job.version>
<lombok.version>1.18.26</lombok.version> <lombok.version>1.18.26</lombok.version>
<bouncycastle.version>1.72</bouncycastle.version> <bouncycastle.version>1.72</bouncycastle.version>
<joda.time.version>2.9.9</joda.time.version>
<!-- 离线IP地址定位库 --> <!-- 离线IP地址定位库 -->
<ip2region.version>2.7.0</ip2region.version> <ip2region.version>2.7.0</ip2region.version>
...@@ -273,6 +275,12 @@ ...@@ -273,6 +275,12 @@
<version>${snakeyaml.version}</version> <version>${snakeyaml.version}</version>
</dependency> </dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda.time.version}</version>
</dependency>
<!-- 加密包引入 --> <!-- 加密包引入 -->
<dependency> <dependency>
<groupId>org.bouncycastle</groupId> <groupId>org.bouncycastle</groupId>
...@@ -342,6 +350,7 @@ ...@@ -342,6 +350,7 @@
<version>${PeiZhen-Java.version}</version> <version>${PeiZhen-Java.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
...@@ -356,7 +365,6 @@ ...@@ -356,7 +365,6 @@
<module>pz-accompany</module> <module>pz-accompany</module>
<module>pz-merchant</module> <module>pz-merchant</module>
<module>pz-applet</module> <module>pz-applet</module>
<module>pz-chat</module>
</modules> </modules>
<packaging>pom</packaging> <packaging>pom</packaging>
......
...@@ -31,7 +31,7 @@ import javax.validation.constraints.NotNull; ...@@ -31,7 +31,7 @@ import javax.validation.constraints.NotNull;
@RestController @RestController
@RequestMapping("app/accompany") @RequestMapping("app/accompany")
@SaIgnore @SaIgnore
public class EmployeesAccompanyController extends BaseController { public class AccompanyEmployeesAccompanyController extends BaseController {
private final ITotalOrderService totalOrderService; private final ITotalOrderService totalOrderService;
......
package com.pz.accompany;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.EditGroup;
import com.pz.merchant.domain.bo.EmployeesBo;
import com.pz.merchant.domain.bo.EmployeesListBo;
import com.pz.merchant.domain.bo.OrderBo;
import com.pz.merchant.domain.bo.SetEmployeeWorkingHourBo;
import com.pz.merchant.domain.vo.EmployeesListVo;
import com.pz.merchant.domain.vo.EmployeesVo;
import com.pz.merchant.domain.vo.OrderInfoVO;
import com.pz.merchant.domain.vo.TodayOrderListVo;
import com.pz.merchant.service.IEmployeesService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
/**
* 陪诊员信息
*
* @author WangMin
* @date 2023-09-11
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/accompany/employees")
public class AccompanyEmployeesController extends BaseController {
private final IEmployeesService employeesService;
/**
* 修改陪诊员个人信息
*
* @param bo
* @return
*/
@PutMapping("/updateEmployees")
public R<Boolean> updateEmployees(EmployeesBo bo) {
return R.ok(employeesService.updateByBo(bo));
}
/**
* 陪诊员个人信息
*/
@GetMapping("/getEmployeesInfo")
public R<EmployeesVo> getEmployeesInfo() {
return R.ok(employeesService.queryByUserId(getUserId()));
}
}
...@@ -4,6 +4,8 @@ import com.pz.common.core.controller.BaseController; ...@@ -4,6 +4,8 @@ import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery; import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R; import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.page.TableDataInfo;
import com.pz.common.utils.StringUtils;
import com.pz.merchant.domain.bo.EmployeesBo;
import com.pz.merchant.domain.vo.EmployeesVo; import com.pz.merchant.domain.vo.EmployeesVo;
import com.pz.merchant.service.IEmployeesService; import com.pz.merchant.service.IEmployeesService;
import com.pz.system.domain.bo.IncomeBo; import com.pz.system.domain.bo.IncomeBo;
...@@ -12,9 +14,14 @@ import com.pz.system.service.IIncomeService; ...@@ -12,9 +14,14 @@ import com.pz.system.service.IIncomeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.sql.rowset.serial.SerialException;
import java.math.BigDecimal;
import java.util.Optional;
/** /**
* 陪诊员-财务收益 * 陪诊员-财务收益
* *
...@@ -25,7 +32,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -25,7 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/accompany/employees") @RequestMapping("/accompany/employees")
public class EmployeesIncomeController extends BaseController { public class AccompanyEmployeesIncomeController extends BaseController {
private final IEmployeesService iEmployeesService; private final IEmployeesService iEmployeesService;
...@@ -51,4 +58,25 @@ public class EmployeesIncomeController extends BaseController { ...@@ -51,4 +58,25 @@ public class EmployeesIncomeController extends BaseController {
} }
/**
* 陪诊员提现
*
* @param bo
* @return
*/
@PutMapping("/withdrawEmployees")
public R<Boolean> withdrawEmployees(IncomeBo bo) {
Optional.ofNullable(iEmployeesService.queryByUserId(getUserId()))
.ifPresent(employeesVo -> {
//判断提现金额是否大于余额
if (bo.getAmount().compareTo(StringUtils.isNotBlank(employeesVo.getBalance()) ? new BigDecimal(employeesVo.getBalance()) : new BigDecimal("0.00")) > 0) {
try {
throw new SerialException("余额不足以本次提现");
} catch (SerialException e) {
throw new RuntimeException(e);
}
}
});
return R.ok(true);
}
} }
...@@ -52,6 +52,11 @@ ...@@ -52,6 +52,11 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.pz</groupId> <groupId>com.pz</groupId>
<artifactId>pz-system</artifactId> <artifactId>pz-system</artifactId>
</dependency> </dependency>
......
package com.pz.chat.controller; package com.pz.web.controller.system;
import java.util.List;
import java.util.Arrays;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.system.domain.SessionList;
import com.pz.system.mapper.SessionListMapper;
import com.pz.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*; import cn.dev33.satoken.annotation.SaIgnore;
import org.springframework.validation.annotation.Validated; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.annotation.RepeatSubmit;
import com.pz.common.annotation.Log; import com.pz.common.annotation.Log;
import com.pz.common.annotation.RepeatSubmit;
import com.pz.common.core.controller.BaseController; import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery; import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R; import com.pz.common.core.domain.R;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.AddGroup; import com.pz.common.core.validate.AddGroup;
import com.pz.common.core.validate.EditGroup;
import com.pz.common.enums.BusinessType; import com.pz.common.enums.BusinessType;
import com.pz.common.utils.poi.ExcelUtil; import com.pz.system.domain.SessionList;
import com.pz.system.domain.vo.SessionListVo;
import com.pz.system.domain.bo.SessionListBo; import com.pz.system.domain.bo.SessionListBo;
import com.pz.system.service.ISessionListService; import com.pz.system.domain.vo.SessionListVo;
import com.pz.common.core.page.TableDataInfo; import com.pz.system.mapper.SessionListMapper;
import com.pz.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
/** /**
* 会话列 * 会话列
...@@ -38,37 +33,47 @@ import com.pz.common.core.page.TableDataInfo; ...@@ -38,37 +33,47 @@ import com.pz.common.core.page.TableDataInfo;
@Validated @Validated
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/system/list") @RequestMapping("/system/session")
public class SessionListController extends BaseController { public class SessionListController extends BaseController {
private final SessionListMapper sessionListMapper; private final SessionListMapper sessionListMapper;
private final SysUserMapper sysUserMapper; /**
* 查询会话列列表
*/
@GetMapping("/list")
public TableDataInfo<SessionListVo> list(SessionListBo bo, PageQuery pageQuery) {
return sessionListMapper.selectVoPage(pageQuery.build(), Wrappers.<SessionList>lambdaQuery().eq(SessionList::getUserId, getUserId()));
}
/** /**
* 创建会话 * 创建会话
*/ */
@SaCheckPermission("system:list:add")
@Log(title = "会话列", businessType = BusinessType.INSERT) @Log(title = "会话列", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping("/createSession")
@SaIgnore
@Transactional
public R<Void> add(@Validated(AddGroup.class) @RequestBody SessionListBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody SessionListBo bo) {
// 创建会话列表对象
SessionList sessionList = new SessionList(); SessionList sessionList = new SessionList();
sessionList.setUserId(bo.getUserId()); sessionList.setUserId(bo.getUserId());
sessionList.setUnReadCount(0L); sessionList.setUnReadCount(0L);
sessionList.setListName(bo.getToUserName());
sessionList.setToUserId(bo.getToUserId()); sessionList.setToUserId(bo.getToUserId());
// 插入会话列表记录
sessionListMapper.insert(sessionList); sessionListMapper.insert(sessionList);
// 判断对方和我建立会话没有? 没有也要建立
Integer SessionId = sessionListMapper.selectIdByUser(bo.getToUserId(), bo.getUserId()); // 判断对方和我建立会话没有,如果没有则建立
if (SessionId == null || SessionId <= 0) { boolean hasSession = sessionListMapper.selectIdByUser(bo.getToUserId(), bo.getUserId()) > 0;
SysUser user = sysUserMapper.selectUserById(bo.getUserId()); if (!hasSession) {
sessionList.setUserId(bo.getToUserId()); // 新建会话列表对象
sessionList.setToUserId(bo.getUserId()); SessionList newSessionList = new SessionList();
sessionList.setListName(user.getNickName()); newSessionList.setUserId(bo.getToUserId());
sessionListMapper.insert(sessionList); newSessionList.setToUserId(bo.getUserId());
// 插入新的会话列表记录
sessionListMapper.insert(newSessionList);
} }
return R.ok(); return R.ok();
} }
...@@ -79,11 +84,11 @@ public class SessionListController extends BaseController { ...@@ -79,11 +84,11 @@ public class SessionListController extends BaseController {
* *
* @param id 主键 * @param id 主键
*/ */
@SaCheckPermission("system:list:remove")
@Log(title = "会话列", businessType = BusinessType.DELETE) @Log(title = "会话列", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long id) { @PathVariable Long id) {
return toAjax(sessionListMapper.deleteById(id)); return toAjax(sessionListMapper.deleteById(id));
} }
} }
package com.pz.web.controller.system;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.utils.DateUtils;
import com.pz.system.domain.Message;
import com.pz.system.domain.SessionList;
import com.pz.system.mapper.MessageMapper;
import com.pz.system.mapper.SessionListMapper;
import com.pz.system.mapper.SysUserMapper;
import com.pz.system.service.ISysUserService;
import com.pz.web.controller.websocket.SpringContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author lisw
* @program ly-project
* @description 聊天
* @createDate 2021-05-30 11:32:39
* <p>
* 描述:
* 一对一聊天
* @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
*/
@Component
@Slf4j
@ServerEndpoint("/webSocketOneToOne/{sendId}/{roomId}")
public class WebSocketOneToOneController {
// 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount;
//实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key为用户标识
private static final Map<Long, WebSocketOneToOneController> connections = new ConcurrentHashMap<>();
public static Map<Long, List<Object>> sessionPool = new ConcurrentHashMap<>();
// 与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
private Long sendId;
private String roomId;
@Resource
private MessageMapper messageMapper;
@Resource
private SessionListMapper sessionListMapper;
/**
* 连接建立成功调用的方法
*
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(@PathParam("sendId") Long sendId, @PathParam("roomId") String roomId, Session session) {
this.session = session;
this.sendId = sendId; //用户标识
this.roomId = roomId; //会话标识
List<Object> list = new ArrayList<>();
list.add(roomId);
list.add(session);
connections.put(sendId, this); //添加到map中
sessionPool.put(sendId, list); //创建会话
addOnlineCount(); // 在线数加
log.info("sendId:" + sendId + "roomId:" + roomId);
System.out.println(this.session);
System.out.println("有新连接加入!新用户:" + sendId + ",当前在线人数为" + getOnlineCount());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
connections.remove(sendId); // 从map中移除
subOnlineCount(); // 在线数减
System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
* @param session 可选的参数
*/
@OnMessage
public void onMessage(String message, Session session) {
String sessionId = this.session.getPathParameters().get("roomId");
System.out.println("来自客户端的消息:" + message);
JSONObject json = JSON.parseObject(message);
String msg = json.getString("content"); // 需要发送的信息
String requestId = json.getString("requestId");
int msgType = json.getIntValue("messageType");
String lastMessageTime = json.getString("lastMessageTime"); // 使用类型推断,如果不存在键"lastMessageTime",则为null
Long receiveId = json.getLong("receiveId"); // 发送对象的用户标识(接收者)
// 发送消息
send(msg, sendId, receiveId, roomId, msgType, requestId, lastMessageTime, sessionId);
}
/**
* 发生错误时调用
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
System.out.println("发生错误");
error.printStackTrace();
}
private void sendMessage(SessionList sessionList, Message message) {
int res = messageMapper.insert(message);
if (res == 1) {
message.setStatus("-1");
}
WebSocketOneToOneController con = connections.get(message.getReceiver());
if (con != null && roomId.equals(con.roomId)) {
try {
con.session.getBasicRemote().sendText(JSON.toJSONString(message));
message.setIsRead("1");
messageMapper.updateById(message);
} catch (IOException e) {
// 处理发送消息异常
e.printStackTrace();
}
}
WebSocketOneToOneController confrom = connections.get(message.getSender());
if (confrom != null && roomId.equals(confrom.roomId)) {
try {
confrom.session.getBasicRemote().sendText(JSON.toJSONString(message));
} catch (IOException e) {
// 处理发送消息异常
e.printStackTrace();
}
}
}
/**
* @param msg 消息内容
* @param sendId 发送人
* @param receiveId 接收人
* @param roomId 房间ID
* @param msgType 消息类型
* @param requestId 消息请求ID
* @param lastMessageTime 最后一次的消息时间
*/
public void send(String msg, Long sendId, Long receiveId, String roomId, int msgType, String requestId, String lastMessageTime, String sessionId) {
Message message = new Message();
message.setContent(msg);
Date now = new Date();
message.setReceiver(receiveId);
message.setSender(sendId);
message.setContentType(msgType);
message.setIsRead("0");
message.setRequestId(requestId);
message.setType(0);
if (StringUtils.isNotBlank(lastMessageTime)) {
Date lastTime = DateUtils.stringToDate(lastMessageTime, "yyyy-MM-dd HH:mm");
long minute = (now.getTime() - lastTime.getTime()) / 1000 / 60;
log.info("此二人聊天,距离上一次聊天时间相差分钟数:" + minute);
if (minute > 5) {
message.setType(1);
}
}
if (messageMapper == null) {
this.messageMapper = (MessageMapper) SpringContextUtil.getBean("messageMapper");
}
if (sessionListMapper == null) {
this.sessionListMapper = (SessionListMapper) SpringContextUtil.getBean("sessionListMapper");
}
//获取本次会话信息
SessionList sessionList = sessionListMapper.selectById(Integer.parseInt(sessionId));
List<Object> list = sessionPool.get(sessionList.getToUserId());
try {
if (list == null || list.isEmpty()) {
//增加对方未读数
sessionListMapper.addUnReadCount(receiveId, sendId);
} else {
Integer toId = Integer.valueOf((String) list.get(0));
if (Integer.valueOf(sessionId).equals(toId)) {
//彼此都在会话中,直接发送消息
sendMessage(sessionList, message);
} else {
if (sessionId == null) {
//创建会话
SessionList tmpSessionList = new SessionList();
tmpSessionList.setUserId(sessionList.getToUserId());
tmpSessionList.setToUserId(sessionList.getUserId());
tmpSessionList.setUnReadCount(1L);
sessionListMapper.insert(tmpSessionList);
} else {
//增加对方未读数
sessionListMapper.addUnReadCount(receiveId, sendId);
}
sendMessage(sessionList, message);
}
}
} catch (Exception e) {
// 处理发送消息异常
e.printStackTrace();
}
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketOneToOneController.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketOneToOneController.onlineCount--;
}
}
package com.pz.chat.util; package com.pz.web.controller.websocket;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
......
package com.pz.web.controller.websocket;
import lombok.Data;
import javax.websocket.Session;
@Data
public class WebSocketData {
/**
* 当前连接
*/
private Session session;
/**
* 当前通讯ID
*/
private String communicationId;
}
...@@ -141,6 +141,7 @@ security: ...@@ -141,6 +141,7 @@ security:
# system 仅用于调试阶段 # system 仅用于调试阶段
- /system/** - /system/**
- /applet/** - /applet/**
- /websocket/**
# MyBatisPlus配置 # MyBatisPlus配置
# https://baomidou.com/config/ # https://baomidou.com/config/
......
...@@ -50,7 +50,7 @@ public class AppletDepartmentController extends BaseController { ...@@ -50,7 +50,7 @@ public class AppletDepartmentController extends BaseController {
* 根据医院查询科室列表 * 根据医院查询科室列表
*/ */
@GetMapping("/DepartmentByHospitalId") @GetMapping("/DepartmentByHospitalId")
public R<List<Department>> departmentByHospitalId(Integer hospitalId) { public R<List<DepartmentVo>> departmentByHospitalId(Integer hospitalId) {
return R.ok(iDepartmentService.departmentByHospitalId(hospitalId)); return R.ok(iDepartmentService.departmentByHospitalId(hospitalId));
} }
} }
package com.pz.applet;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.pz.common.annotation.Log;
import com.pz.common.annotation.RepeatSubmit;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.AddGroup;
import com.pz.common.core.validate.EditGroup;
import com.pz.common.enums.BusinessType;
import com.pz.common.utils.poi.ExcelUtil;
import com.pz.system.domain.bo.DoctorBo;
import com.pz.system.domain.vo.DoctorVo;
import com.pz.system.service.IDoctorService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 医生
*
* @author ruoyi
* @date 2023-09-07
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/applet/doctor")
public class AppletDoctorController extends BaseController {
private final IDoctorService iDoctorService;
/**
* 查询医生列表
*/
@GetMapping("/list")
public TableDataInfo<DoctorVo> list(DoctorBo bo, PageQuery pageQuery) {
return iDoctorService.queryPageList(bo, pageQuery);
}
}
...@@ -41,13 +41,17 @@ public class AppletStoreApplyController extends BaseController { ...@@ -41,13 +41,17 @@ public class AppletStoreApplyController extends BaseController {
/** /**
* 新增商城商户申请 * 新增商城商户申请
*/ */
@SaCheckPermission("system:apply:add")
@Log(title = "商城商户申请", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody StoreApplyBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody StoreApplyBo bo) {
return toAjax(iStoreApplyService.insertByBo(bo)); return toAjax(iStoreApplyService.insertByBo(bo));
} }
/**
* 查询商户状态
*/
@GetMapping("/status")
public R<StoreApplyVo> getStatus(){
return R.ok(iStoreApplyService.queryByUserId());
}
} }
...@@ -59,8 +59,8 @@ public class AppletStoreGoodsController extends BaseController { ...@@ -59,8 +59,8 @@ public class AppletStoreGoodsController extends BaseController {
* 商城商品分类列表 * 商城商品分类列表
*/ */
@GetMapping("/shopGoodsClassify") @GetMapping("/shopGoodsClassify")
public List<StoreApplyVo> shopGoodsClassify() { public R<List<StoreApplyVo>> shopGoodsClassify() {
return iStoreGoodsService.shopGoodsClassify(); return R.ok(iStoreGoodsService.shopGoodsClassify());
} }
/** /**
......
...@@ -13,6 +13,7 @@ import com.pz.common.core.domain.R; ...@@ -13,6 +13,7 @@ import com.pz.common.core.domain.R;
import com.pz.common.core.domain.entity.SysDept; import com.pz.common.core.domain.entity.SysDept;
import com.pz.common.core.domain.entity.SysRole; import com.pz.common.core.domain.entity.SysRole;
import com.pz.common.core.domain.entity.SysUser; import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.core.domain.model.LoginUser;
import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.page.TableDataInfo;
import com.pz.common.enums.BusinessType; import com.pz.common.enums.BusinessType;
import com.pz.common.excel.ExcelResult; import com.pz.common.excel.ExcelResult;
...@@ -70,7 +71,8 @@ public class AppletSysUserController extends BaseController { ...@@ -70,7 +71,8 @@ public class AppletSysUserController extends BaseController {
*/ */
@GetMapping("/getIdentity") @GetMapping("/getIdentity")
public R<UserIdentityVo> getIdentity() { public R<UserIdentityVo> getIdentity() {
return R.ok(userService.checkUserIdentity(LoginHelper.getLoginUser().getUserId().intValue())); LoginUser loginUser = LoginHelper.getLoginUser();
return R.ok(userService.checkUserIdentity(loginUser.getUserId().intValue()));
} }
/** /**
...@@ -99,7 +101,6 @@ public class AppletSysUserController extends BaseController { ...@@ -99,7 +101,6 @@ public class AppletSysUserController extends BaseController {
*/ */
@PutMapping @PutMapping
public R<Void> edit(@Validated @RequestBody SysUser user) { public R<Void> edit(@Validated @RequestBody SysUser user) {
user.setUserId(LoginHelper.getLoginUser().getUserId());
userService.checkUserAllowed(user); userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId()); userService.checkUserDataScope(user.getUserId());
if (!userService.checkUserNameUnique(user)) { if (!userService.checkUserNameUnique(user)) {
......
package com.pz.applet; package com.pz.applet;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.pz.common.annotation.Log; import com.pz.common.annotation.Log;
import com.pz.common.annotation.RepeatSubmit; import com.pz.common.annotation.RepeatSubmit;
import com.pz.common.core.controller.BaseController; import com.pz.common.core.controller.BaseController;
...@@ -10,21 +17,27 @@ import com.pz.common.core.page.TableDataInfo; ...@@ -10,21 +17,27 @@ import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.AddGroup; import com.pz.common.core.validate.AddGroup;
import com.pz.common.core.validate.EditGroup; import com.pz.common.core.validate.EditGroup;
import com.pz.common.enums.BusinessType; import com.pz.common.enums.BusinessType;
import com.pz.common.helper.LoginHelper;
import com.pz.common.utils.poi.ExcelUtil; import com.pz.common.utils.poi.ExcelUtil;
import com.pz.system.domain.bo.CreateOrderBo; import com.pz.system.domain.bo.CreateOrderBo;
import com.pz.system.domain.bo.PaymentRecordBo; import com.pz.system.domain.bo.PaymentRecordBo;
import com.pz.system.domain.bo.TotalOrderBo; import com.pz.system.domain.bo.TotalOrderBo;
import com.pz.system.domain.vo.PaymentRecordVo; import com.pz.system.domain.vo.PaymentRecordVo;
import com.pz.system.domain.vo.TotalOrderVo; import com.pz.system.domain.vo.TotalOrderVo;
import com.pz.system.service.IPayService;
import com.pz.system.service.IPaymentRecordService; import com.pz.system.service.IPaymentRecordService;
import com.pz.system.service.ITotalOrderService; import com.pz.system.service.ITotalOrderService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
...@@ -45,11 +58,14 @@ public class AppletTotalOrderController extends BaseController { ...@@ -45,11 +58,14 @@ public class AppletTotalOrderController extends BaseController {
private final IPaymentRecordService iPaymentRecordService; private final IPaymentRecordService iPaymentRecordService;
private final IPayService iPayService;
/** /**
* 查询总订单列表 * 查询总订单列表
*/ */
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<TotalOrderVo> list(TotalOrderBo bo, PageQuery pageQuery) { public TableDataInfo<TotalOrderVo> list(TotalOrderBo bo, PageQuery pageQuery) {
bo.setUid(LoginHelper.getLoginUser().getUserId().intValue());
return iTotalOrderService.queryPageList(bo, pageQuery); return iTotalOrderService.queryPageList(bo, pageQuery);
} }
...@@ -119,4 +135,35 @@ public class AppletTotalOrderController extends BaseController { ...@@ -119,4 +135,35 @@ public class AppletTotalOrderController extends BaseController {
public R<Void> cancelOrder(@Validated(AddGroup.class) @RequestBody TotalOrderBo recordBo) { public R<Void> cancelOrder(@Validated(AddGroup.class) @RequestBody TotalOrderBo recordBo) {
return toAjax(iTotalOrderService.cancelOrder(recordBo)); return toAjax(iTotalOrderService.cancelOrder(recordBo));
} }
/**
* 订单支付
*/
@RepeatSubmit()
@PostMapping("/Orderpay")
public R<Object> Orderpay(@Validated(AddGroup.class) @RequestBody TotalOrderBo recordBo) {
return R.ok(iTotalOrderService.payOrder(recordBo));
}
/**
* 订单回调
*/
@ResponseBody
@PostMapping("/orderPayCallBack")
public R<Void> orderPayCallBack(HttpServletRequest request, HttpServletResponse response) {
try {
String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
WxPayOrderNotifyResult result = iPayService.parseOrderNotifyResult(xmlResult);
// 加入自己处理订单的业务逻辑,需要判断订单是否已经支付过,否则可能会重复调用
/* String orderNum = result.getOutTradeNo();
iTotalOrderService.*/
return R.ok();
} catch (Exception e) {
System.out.println("微信回调结果异常,异常原因" + e.getMessage());
return R.fail();
}
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.pz</groupId>
<artifactId>PeiZhen-Java</artifactId>
<version>4.8.0</version>
</parent>
<artifactId>pz-chat</artifactId>
<description>
聊天服务模块
</description>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.pz</groupId>
<artifactId>pz-common</artifactId>
</dependency>
<dependency>
<groupId>com.pz</groupId>
<artifactId>pz-sms</artifactId>
</dependency>
<dependency>
<groupId>com.pz</groupId>
<artifactId>pz-system</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
</dependencies>
</project>
package com.pz.chat.controller;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.chat.util.CurPool;
import com.pz.chat.util.JsonUtils;
import com.pz.chat.util.SpringContextUtil;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.system.domain.MsgInfo;
import com.pz.system.domain.SessionList;
import com.pz.system.mapper.MsgInfoMapper;
import com.pz.system.mapper.SessionListMapper;
import com.pz.system.mapper.SysUserMapper;
import com.pz.system.service.IMsgInfoService;
import com.pz.system.service.ISessionListService;
import com.pz.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
@ServerEndpoint("/websocket/{userId}/{sessionId}")
public class ChatController {
@Resource
private SessionListMapper sessionListMapper;
@Resource
private SysUserMapper sysUserMapper;
@Resource
private MsgInfoMapper msgInfoMapper;
private Session session;
@OnOpen
public void onOpen(Session session, @PathParam(value = "userId") Integer userId, @PathParam(value = "sessionId") String sessionId) {
this.session = session;
// 打开连接时保存WebSocket的会话对象
CurPool.webSockets.put(userId, this);
// 将WebSocket对象放入WebSocket连接池中
List<Object> list = new ArrayList<>();
list.add(sessionId);
list.add(session);
// 将会话ID和会话对象放入会话池中
CurPool.sessionPool.put(userId, list);
}
@OnClose
public void onClose() {
// 断开连接删除用户删除session
Long userId = Long.parseLong(this.session.getRequestParameterMap().get("userId").get(0));
// 获取用户ID
CurPool.sessionPool.remove(userId);
CurPool.webSockets.remove(userId);
// 从会话池和连接池中移除WebSocket对象
if (sysUserMapper == null) {
this.sysUserMapper = (SysUserMapper) SpringContextUtil.getBean("sysUserMapper");
}
SysUser user = sysUserMapper.selectUserById(userId);
// 从用户池中移除用户
CurPool.curUserPool.remove(user.getNickName());
}
@OnMessage
public void onMessage(String message) {
String sessionId = this.session.getRequestParameterMap().get("sessionId").get(0);
// 获取会话ID
if (sessionId == null) {
System.out.println("sessionId 错误");
}
if (sessionListMapper == null) {
this.sessionListMapper = (SessionListMapper) SpringContextUtil.getBean("sessionListMapper");
}
// 根据会话ID注入SeesionListMapper
if (sysUserMapper == null) {
this.sysUserMapper = (SysUserMapper) SpringContextUtil.getBean("sysUserMapper");
}
// 根据会话ID注入UserMapper
if (msgInfoMapper == null) {
this.msgInfoMapper = (MsgInfoMapper) SpringContextUtil.getBean("msgInfoMapper");
}
SessionList sessionList = sessionListMapper.selectById(Long.parseLong(sessionId));
// 根据会话ID查询会话列表
SysUser user = sysUserMapper.selectUserById(sessionList.getUserId());
// 根据会话列表中的用户ID查询用户信息
MsgInfo msgInfo = new MsgInfo();
msgInfo.setContent(message);
msgInfo.setFromUserId(sessionList.getUserId());
msgInfo.setFromUserName(user.getNickName());
msgInfo.setToUserId(sessionList.getToUserId());
msgInfo.setToUserName(sessionList.getListName());
msgInfo.setUnReadFlag(0L);
// 创建消息对象,设置消息的内容、创建时间、发送方和接收方的信息
msgInfoMapper.insert(msgInfo);
// 将消息持久化到数据库中
List<Object> list = CurPool.sessionPool.get(sessionList.getToUserId());
// 根据接收方的用户ID从会话池中获取会话列表
if (list == null || list.isEmpty()) {
sessionListMapper.addUnReadCount(sessionList.getToUserId(), sessionList.getUserId());
// 用户不存在,更新未读消息数量
} else {
String id = sessionListMapper.selectIdByUser(sessionList.getToUserId(), sessionList.getUserId()) + "";
String o = list.get(0) + "";
if (id.equals(o)) {
sendTextMessage(sessionList.getToUserId(), JsonUtils.objectToJson(msgInfo));
// 会话存在,直接发送消息
} else {
if (StringUtils.isNotBlank(id)) {
SessionList tmpSessionList = new SessionList();
tmpSessionList.setUserId(sessionList.getToUserId());
tmpSessionList.setToUserId(sessionList.getUserId());
tmpSessionList.setListName(user.getNickName());
tmpSessionList.setUnReadCount(1L);
sessionListMapper.insert(tmpSessionList);
// 新增会话列表
} else {
sessionListMapper.addUnReadCount(sessionList.getToUserId(), sessionList.getUserId());
// 更新未读消息数量
}
List<SessionList> sessionLists = sessionListMapper.selectList(Wrappers.<SessionList>lambdaQuery().eq(SessionList::getUserId, sessionList.getToUserId()));
// 会话不存在,发送会话列表消息
sendTextMessage(sessionList.getToUserId(), JsonUtils.objectToJson(sessionLists));
}
}
// 输出收到的消息
System.out.println("【websocket消息】收到客户端消息:" + message);
}
public void sendTextMessage(Long userId, String message) {
Session session = (Session) CurPool.sessionPool.get(userId).get(1);
// 根据用户ID从会话池中获取会话对象
if (session != null) {
try {
session.getBasicRemote().sendText(message);
// 发送文本消息
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package com.pz.chat.util;
import com.pz.chat.controller.ChatController;
import com.pz.common.core.domain.entity.SysUser;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 统一管理session、websocket、curUser
*/
public class CurPool {
// public static CopyOnWriteArraySet<WebSocket> webSockets =new CopyOnWriteArraySet<>();
public static Map<Integer, ChatController> webSockets = new ConcurrentHashMap<>();
// list 里面第一个存sessionId,第二个存session
public static Map<Integer, List<Object>> sessionPool = new ConcurrentHashMap<>();
// 当前登录用户x
public static Map<String, SysUser> curUserPool = new ConcurrentHashMap<>();
}
...@@ -113,6 +113,17 @@ ...@@ -113,6 +113,17 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId> <artifactId>hutool-extra</artifactId>
</dependency> </dependency>
......
package com.pz.chat.util; package com.pz.common;
import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
......
package com.pz.chat.config; package com.pz.common.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
......
...@@ -54,16 +54,12 @@ public class SysUser extends BaseEntity { ...@@ -54,16 +54,12 @@ public class SysUser extends BaseEntity {
/** /**
* 用户账号 * 用户账号
*/ */
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符") @Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
private String userName; private String userName;
/** /**
* 用户昵称 * 用户昵称
*/ */
@Xss(message = "用户昵称不能包含脚本字符")
@NotBlank(message = "用户昵称不能为空")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
private String nickName; private String nickName;
......
...@@ -15,12 +15,12 @@ import lombok.Getter; ...@@ -15,12 +15,12 @@ import lombok.Getter;
public enum UserType { public enum UserType {
/** /**
* pc端 * 普通用户
*/ */
SYS_USER("sys_user"), SYS_USER("sys_user"),
/** /**
* app端 * 陪诊员
*/ */
APP_USER("app_user"), APP_USER("app_user"),
......
...@@ -2,7 +2,10 @@ package com.pz.common.utils; ...@@ -2,7 +2,10 @@ package com.pz.common.utils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.text.ParseException; import java.text.ParseException;
...@@ -12,6 +15,7 @@ import java.time.LocalDateTime; ...@@ -12,6 +15,7 @@ import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Date; import java.util.Date;
/** /**
...@@ -92,6 +96,20 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { ...@@ -92,6 +96,20 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
} }
/** /**
* 字符串转换成日期
* @param strDate 日期字符串
* @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
*/
public static Date stringToDate(String strDate, String pattern) {
if (StringUtils.isBlank(strDate)){
return null;
}
DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
return fmt.parseLocalDateTime(strDate).toDate();
}
/**
* 日期路径 即年/月/日 如20180808 * 日期路径 即年/月/日 如20180808
*/ */
public static String dateTime() { public static String dateTime() {
......
...@@ -98,4 +98,14 @@ public class Employees extends BaseEntity { ...@@ -98,4 +98,14 @@ public class Employees extends BaseEntity {
@TableLogic @TableLogic
private String delFlag; private String delFlag;
/**
* 身份证号
*/
private String cardNo;
/**
* 手机号
*/
private String phone;
} }
...@@ -22,109 +22,91 @@ public class EmployeesBo extends BaseEntity { ...@@ -22,109 +22,91 @@ public class EmployeesBo extends BaseEntity {
/** /**
* *
*/ */
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Integer id; private Integer id;
/** /**
* 陪诊员 * 陪诊员
*/ */
@NotBlank(message = "陪诊员 不能为空", groups = { AddGroup.class, EditGroup.class })
private String name; private String name;
/** /**
* 职业开始年份 * 职业开始年份
*/ */
@NotBlank(message = "职业开始年份不能为空", groups = { AddGroup.class, EditGroup.class })
private String startYear; private String startYear;
/** /**
* 用户 * 用户
*/ */
@NotNull(message = "用户不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer uid; private Integer uid;
/** /**
* 工作时段 * 工作时段
*/ */
@NotBlank(message = "工作时段不能为空", groups = { AddGroup.class, EditGroup.class })
private String workingHours; private String workingHours;
/** /**
* 状态 * 状态
*/ */
@NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status; private Integer status;
/** /**
* 所属商户 * 所属商户
*/ */
@NotNull(message = "所属商户不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer companyId; private Integer companyId;
/** /**
* 身份证正面照 * 身份证正面照
*/ */
@NotBlank(message = "身份证正面照不能为空", groups = { AddGroup.class, EditGroup.class })
private String cardFront; private String cardFront;
/** /**
* 身份证反面照 * 身份证反面照
*/ */
@NotBlank(message = "身份证反面照不能为空", groups = { AddGroup.class, EditGroup.class })
private String cardReverse; private String cardReverse;
/** /**
* 健康证 * 健康证
*/ */
@NotBlank(message = "健康证不能为空", groups = { AddGroup.class, EditGroup.class })
private String healthCertificate; private String healthCertificate;
/** /**
* 经度 * 经度
*/ */
@NotBlank(message = "经度不能为空", groups = { AddGroup.class, EditGroup.class })
private String lng; private String lng;
/** /**
* 纬度 * 纬度
*/ */
@NotBlank(message = "纬度不能为空", groups = { AddGroup.class, EditGroup.class })
private String lat; private String lat;
/** /**
* 城市 * 城市
*/ */
@NotNull(message = "城市不能为空", groups = { AddGroup.class, EditGroup.class })
private Long cityId; private Long cityId;
/** /**
* 当前身份 * 当前身份
*/ */
@NotNull(message = "当前身份不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer nowType; private Integer nowType;
/** /**
* 总收益 * 总收益
*/ */
@NotBlank(message = "总收益不能为空", groups = { AddGroup.class, EditGroup.class })
private String totalRevenue; private String totalRevenue;
/** /**
* 当前余额 * 当前余额
*/ */
@NotBlank(message = "当前余额不能为空", groups = { AddGroup.class, EditGroup.class })
private String balance; private String balance;
/** /**
* 冻结余额 * 冻结余额
*/ */
@NotNull(message = "冻结余额不能为空", groups = { AddGroup.class, EditGroup.class })
private Long freezeBalance; private Long freezeBalance;
/** /**
* 取消订单次数 * 取消订单次数
*/ */
@NotNull(message = "取消订单次数不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer killOrder; private Integer killOrder;
/** /**
......
...@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty; ...@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat; import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert; import com.pz.common.convert.ExcelDictConvert;
import com.pz.system.domain.TotalOrder; import com.pz.system.domain.TotalOrder;
import com.pz.system.domain.vo.TotalOrderVo;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
...@@ -123,5 +124,12 @@ public class EmployeesVo { ...@@ -123,5 +124,12 @@ public class EmployeesVo {
/** /**
* 最近好评 * 最近好评
*/ */
private List<TotalOrder> totalOrderVo; private List<TotalOrderVo> totalOrderVo;
/**
* 工作年限
*/
private Integer wrokYear;
private String phone;
} }
...@@ -20,8 +20,12 @@ import com.pz.merchant.domain.bo.SetEmployeeWorkingHourBo; ...@@ -20,8 +20,12 @@ import com.pz.merchant.domain.bo.SetEmployeeWorkingHourBo;
import com.pz.merchant.domain.vo.*; import com.pz.merchant.domain.vo.*;
import com.pz.merchant.mapper.CompanyMapper; import com.pz.merchant.mapper.CompanyMapper;
import com.pz.merchant.service.ISonOrderService; import com.pz.merchant.service.ISonOrderService;
import com.pz.system.domain.Business;
import com.pz.system.domain.TotalOrder; import com.pz.system.domain.TotalOrder;
import com.pz.system.domain.bo.EmployeesCompanyBo; import com.pz.system.domain.bo.EmployeesCompanyBo;
import com.pz.system.domain.vo.BusinessVo;
import com.pz.system.domain.vo.TotalOrderVo;
import com.pz.system.mapper.BusinessMapper;
import com.pz.system.mapper.CityMapper; import com.pz.system.mapper.CityMapper;
import com.pz.system.mapper.SysUserMapper; import com.pz.system.mapper.SysUserMapper;
import com.pz.system.mapper.TotalOrderMapper; import com.pz.system.mapper.TotalOrderMapper;
...@@ -32,6 +36,7 @@ import com.pz.merchant.domain.Employees; ...@@ -32,6 +36,7 @@ import com.pz.merchant.domain.Employees;
import com.pz.merchant.mapper.EmployeesMapper; import com.pz.merchant.mapper.EmployeesMapper;
import com.pz.merchant.service.IEmployeesService; import com.pz.merchant.service.IEmployeesService;
import java.time.LocalDate;
import java.util.*; import java.util.*;
/** /**
...@@ -50,6 +55,7 @@ public class EmployeesServiceImpl implements IEmployeesService { ...@@ -50,6 +55,7 @@ public class EmployeesServiceImpl implements IEmployeesService {
private final CityMapper cityMapper; private final CityMapper cityMapper;
private final TotalOrderMapper totalOrderMapper; private final TotalOrderMapper totalOrderMapper;
private final SonOrderServiceBuilder sonOrderServiceBuilder; private final SonOrderServiceBuilder sonOrderServiceBuilder;
private final BusinessMapper businessMapper;
/** /**
* 查询陪诊员 * 查询陪诊员
...@@ -140,7 +146,7 @@ public class EmployeesServiceImpl implements IEmployeesService { ...@@ -140,7 +146,7 @@ public class EmployeesServiceImpl implements IEmployeesService {
*/ */
SysUser sysUser = new SysUser(); SysUser sysUser = new SysUser();
sysUser.setUserId(bo.getUid().longValue()); sysUser.setUserId(bo.getUid().longValue());
sysUser.setPhonenumber(bo.getPhone()); //sysUser.setPhonenumber(bo.getPhone());
if (bo.getIdentity() == 2) { if (bo.getIdentity() == 2) {
Employees add = BeanUtil.toBean(bo, Employees.class); Employees add = BeanUtil.toBean(bo, Employees.class);
add.setNowType(1); add.setNowType(1);
...@@ -187,15 +193,20 @@ public class EmployeesServiceImpl implements IEmployeesService { ...@@ -187,15 +193,20 @@ public class EmployeesServiceImpl implements IEmployeesService {
*/ */
@Override @Override
public TableDataInfo<EmployeesVo> queryPageAppNeed(EmployeesBo bo, PageQuery pageQuery) { public TableDataInfo<EmployeesVo> queryPageAppNeed(EmployeesBo bo, PageQuery pageQuery) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取当前年份
int year = currentDate.getYear();
Page<EmployeesVo> result = baseMapper.selectEmployees(bo, pageQuery.build()); Page<EmployeesVo> result = baseMapper.selectEmployees(bo, pageQuery.build());
Optional.ofNullable(result.getRecords()).ifPresent(EmployeesVo -> { Optional.ofNullable(result.getRecords()).ifPresent(EmployeesVo -> {
EmployeesVo.forEach(t -> { EmployeesVo.forEach(t -> {
List<TotalOrder> totalOrder = totalOrderMapper.selectList(Wrappers.<TotalOrder>lambdaQuery() List<TotalOrderVo> totalOrder = totalOrderMapper.selectVoList(Wrappers.<TotalOrder>lambdaQuery()
.eq(TotalOrder::getEmId, t.getId()) .eq(TotalOrder::getEmId, t.getId())
.eq(TotalOrder::getIsSatisfaction, 1) .eq(TotalOrder::getIsSatisfaction, 1)
.orderByDesc(TotalOrder::getId) .orderByDesc(TotalOrder::getId)
.last("LIMIT 1")); .last("LIMIT 1"));
t.setTotalOrderVo(totalOrder); t.setTotalOrderVo(totalOrder);
t.setWrokYear(year - Integer.parseInt(t.getStartYear()));
}); });
}); });
return TableDataInfo.build(result); return TableDataInfo.build(result);
...@@ -213,7 +224,7 @@ public class EmployeesServiceImpl implements IEmployeesService { ...@@ -213,7 +224,7 @@ public class EmployeesServiceImpl implements IEmployeesService {
Page<EmployeesVo> result = baseMapper.selectEmployees(bo, pageQuery.build()); Page<EmployeesVo> result = baseMapper.selectEmployees(bo, pageQuery.build());
Optional.ofNullable(result.getRecords()).ifPresent(EmployeesVo -> { Optional.ofNullable(result.getRecords()).ifPresent(EmployeesVo -> {
EmployeesVo.forEach(t -> { EmployeesVo.forEach(t -> {
List<TotalOrder> totalOrder = totalOrderMapper.selectList(Wrappers.<TotalOrder>lambdaQuery() List<TotalOrderVo> totalOrder = totalOrderMapper.selectVoList(Wrappers.<TotalOrder>lambdaQuery()
.eq(TotalOrder::getEmId, t.getId()) .eq(TotalOrder::getEmId, t.getId())
.eq(TotalOrder::getIsSatisfaction, 1) .eq(TotalOrder::getIsSatisfaction, 1)
.orderByDesc(TotalOrder::getId) .orderByDesc(TotalOrder::getId)
...@@ -231,10 +242,16 @@ public class EmployeesServiceImpl implements IEmployeesService { ...@@ -231,10 +242,16 @@ public class EmployeesServiceImpl implements IEmployeesService {
@Override @Override
public EmployeesVo queryByApp(Integer id) { public EmployeesVo queryByApp(Integer id) {
EmployeesVo employeesVo = baseMapper.selectEmployeesById(id); EmployeesVo employeesVo = baseMapper.selectEmployeesById(id);
List<TotalOrder> totalOrder = totalOrderMapper.selectList(Wrappers.<TotalOrder>lambdaQuery() List<TotalOrderVo> totalOrder = totalOrderMapper.selectVoList(Wrappers.<TotalOrder>lambdaQuery()
.eq(TotalOrder::getEmId, employeesVo.getId()) .eq(TotalOrder::getEmId, employeesVo.getId())
.eq(TotalOrder::getIsSatisfaction, 1) .eq(TotalOrder::getIsSatisfaction, 1)
.orderByDesc(TotalOrder::getId)); .orderByDesc(TotalOrder::getId));
for (TotalOrderVo order : totalOrder) {
BusinessVo businessVo = businessMapper.selectVoOne(new LambdaQueryWrapper<Business>().eq(Business::getId, order.getBusinessId()));
if (null != businessVo) {
order.setProject(businessVo.getName());
}
}
employeesVo.setTotalOrderVo(totalOrder); employeesVo.setTotalOrderVo(totalOrder);
return employeesVo; return employeesVo;
} }
...@@ -277,6 +294,11 @@ public class EmployeesServiceImpl implements IEmployeesService { ...@@ -277,6 +294,11 @@ public class EmployeesServiceImpl implements IEmployeesService {
@Override @Override
public EmployeesVo queryByUserId(Long userId) { public EmployeesVo queryByUserId(Long userId) {
EmployeesVo employeesVo = baseMapper.selectVoOne(Wrappers.<Employees>lambdaQuery().eq(Employees::getUid, userId));
//获取所属商户
Optional.ofNullable(companyMapper.selectVoById(employeesVo.getCompanyId()))
.ifPresent(companyVo -> employeesVo.setCompanyName(companyVo.getName()));
return baseMapper.selectVoOne(Wrappers.<Employees>lambdaQuery().eq(Employees::getUid, userId)); return baseMapper.selectVoOne(Wrappers.<Employees>lambdaQuery().eq(Employees::getUid, userId));
} }
......
...@@ -5,6 +5,8 @@ import com.pz.common.core.domain.BaseEntity; ...@@ -5,6 +5,8 @@ import com.pz.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/** /**
* 陪诊员/商户提现对象 income * 陪诊员/商户提现对象 income
...@@ -43,7 +45,7 @@ public class Income extends BaseEntity { ...@@ -43,7 +45,7 @@ public class Income extends BaseEntity {
/** /**
* 提现金额 * 提现金额
*/ */
private Long amount; private BigDecimal amount;
/** /**
* 提现状态 0-待审核,1-成功提现,2-拒绝提现 * 提现状态 0-待审核,1-成功提现,2-拒绝提现
*/ */
......
package com.pz.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author lisw
* @program message
* @description
* @createDate 2021-08-18 17:03:58
**/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("message")
public class Message extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 是否显示时间
* 0:否 1:是
*/
private Integer type;
/**
* 消息内容
*/
private String content;
/**
* 内容类型 0文字1图片2视频 3礼物
*/
private Integer contentType;
/**
* 是否已读
*/
private String isRead;
/**
* 发送人
*/
private Long sender;
/**
* 接收人
*/
private Long receiver;
/**
* 发送消息请求ID
*/
private String requestId;
/**
* 是否已读
*/
private Boolean isLast;
/**
* 状态
*/
private String status;
/**
* 备注
*/
private String remark;
}
package com.pz.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 消息对象 msg_info
*
* @author ruoyi
* @date 2023-09-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("msg_info")
public class MsgInfo extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 消息id
*/
@TableId(value = "id")
private Long id;
/**
* 消息发送者id
*/
private Long fromUserId;
/**
* 消息发送者名称
*/
private String fromUserName;
/**
* 消息接收者id
*/
private Long toUserId;
/**
* 消息接收者名称
*/
private String toUserName;
/**
* 消息内容
*/
private String content;
/**
* 是否已读(1 已读)
*/
private Long unReadFlag;
}
...@@ -13,9 +13,8 @@ import lombok.EqualsAndHashCode; ...@@ -13,9 +13,8 @@ import lombok.EqualsAndHashCode;
* @date 2023-09-09 * @date 2023-09-09
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@TableName("session_list") @TableName("session_list")
public class SessionList extends BaseEntity { public class SessionList {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
...@@ -33,10 +32,6 @@ public class SessionList extends BaseEntity { ...@@ -33,10 +32,6 @@ public class SessionList extends BaseEntity {
*/ */
private Long toUserId; private Long toUserId;
/** /**
* 会话名称
*/
private String listName;
/**
* 未读消息数 * 未读消息数
*/ */
private Long unReadCount; private Long unReadCount;
......
...@@ -51,7 +51,7 @@ public class TotalOrder extends BaseEntity { ...@@ -51,7 +51,7 @@ public class TotalOrder extends BaseEntity {
/** /**
* 订单价格 * 订单价格
*/ */
private String payMoney; private Double payMoney;
/** /**
* 订单状态 * 订单状态
*/ */
...@@ -80,7 +80,7 @@ public class TotalOrder extends BaseEntity { ...@@ -80,7 +80,7 @@ public class TotalOrder extends BaseEntity {
/** /**
* 退款金额 * 退款金额
*/ */
private String refundAmount; private Double refundAmount;
/** /**
* 删除标志(0代表存在 2代表删除) * 删除标志(0代表存在 2代表删除)
*/ */
......
package com.pz.system.domain.bo; package com.pz.system.domain.bo;
import com.pz.common.core.domain.BaseEntity; import com.pz.common.core.domain.BaseEntity;
import com.pz.common.core.validate.AddGroup;
import com.pz.common.core.validate.EditGroup;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import java.util.List; import java.util.List;
@Data @Data
...@@ -15,6 +18,16 @@ public class CreateOrderBo extends BaseEntity { ...@@ -15,6 +18,16 @@ public class CreateOrderBo extends BaseEntity {
private Integer businessId; private Integer businessId;
/** /**
* 经度
*/
private String lng;
/**
* 纬度
*/
private String lat;
/**
* 订单价格 * 订单价格
*/ */
private Double payMoney; private Double payMoney;
......
...@@ -4,6 +4,7 @@ import com.pz.common.core.domain.BaseEntity; ...@@ -4,6 +4,7 @@ import com.pz.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import java.math.BigDecimal;
/** /**
...@@ -45,7 +46,7 @@ public class IncomeBo extends BaseEntity { ...@@ -45,7 +46,7 @@ public class IncomeBo extends BaseEntity {
/** /**
* 提现金额 * 提现金额
*/ */
private Long amount; private BigDecimal amount;
/** /**
* 提现状态 0-待审核,1-成功提现,2-拒绝提现 * 提现状态 0-待审核,1-成功提现,2-拒绝提现
......
package com.pz.system.domain.bo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author lisw
* @program message
* @description
* @createDate 2021-08-18 17:03:58
**/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("message")
public class MessageBo extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 是否显示时间
* 0:否 1:是
*/
private Integer type;
/**
* 消息内容
*/
private String content;
/**
* 内容类型 0文字1图片2视频 3礼物
*/
private Integer contentType;
/**
* 是否已读
*/
private String isRead;
/**
* 发送人
*/
private Long sender;
/**
* 接收人
*/
private Long receiver;
/**
* 发送消息请求ID
*/
private String requestId;
/**
* 是否已读
*/
private Boolean isLast;
/**
* 状态
*/
private String status;
/**
* 备注
*/
private String remark;
}
package com.pz.system.domain.bo;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* 消息业务对象 msg_info
*
* @author ruoyi
* @date 2023-09-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MsgInfoBo extends BaseEntity {
/**
* 消息id
*/
private Long id;
/**
* 消息发送者id
*/
private Long fromUserId;
/**
* 消息发送者名称
*/
private String fromUserName;
/**
* 消息接收者id
*/
private Long toUserId;
/**
* 消息接收者名称
*/
private String toUserName;
/**
* 消息内容
*/
private String content;
/**
* 是否已读(1 已读)
*/
private Long unReadFlag;
}
...@@ -87,5 +87,7 @@ public class TotalOrderBo extends BaseEntity { ...@@ -87,5 +87,7 @@ public class TotalOrderBo extends BaseEntity {
*/ */
private String refundAmount; private String refundAmount;
private String orderTitle;
private String openid;
} }
...@@ -4,8 +4,11 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; ...@@ -4,8 +4,11 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat; import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert; import com.pz.common.convert.ExcelDictConvert;
import com.pz.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
/** /**
* 陪诊员/商户提现视图对象 income * 陪诊员/商户提现视图对象 income
...@@ -15,7 +18,7 @@ import lombok.Data; ...@@ -15,7 +18,7 @@ import lombok.Data;
*/ */
@Data @Data
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
public class IncomeVo { public class IncomeVo extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -53,7 +56,7 @@ public class IncomeVo { ...@@ -53,7 +56,7 @@ public class IncomeVo {
* 提现金额 * 提现金额
*/ */
@ExcelProperty(value = "提现金额") @ExcelProperty(value = "提现金额")
private Long amount; private BigDecimal amount;
/** /**
* 提现状态 0-待审核,1-成功提现,2-拒绝提现 * 提现状态 0-待审核,1-成功提现,2-拒绝提现
......
package com.pz.system.domain.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
@Data
public class MessageVo implements Serializable {
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 是否显示时间
* 0:否 1:是
*/
private Integer type;
/**
* 消息内容
*/
private String content;
/**
* 内容类型 0文字1图片2视频 3礼物
*/
private Integer contentType;
/**
* 是否已读
*/
private String isRead;
/**
* 发送人
*/
private Long sender;
/**
* 接收人
*/
private Long receiver;
/**
* 发送消息请求ID
*/
private String requestId;
/**
* 是否已读
*/
private Boolean isLast;
/**
* 状态
*/
private String status;
/**
* 备注
*/
private String remark;
}
package com.pz.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 消息视图对象 msg_info
*
* @author ruoyi
* @date 2023-09-09
*/
@Data
@ExcelIgnoreUnannotated
public class MsgInfoVo {
private static final long serialVersionUID = 1L;
/**
* 消息id
*/
@ExcelProperty(value = "消息id")
private Long id;
/**
* 消息发送者id
*/
@ExcelProperty(value = "消息发送者id")
private Long fromUserId;
/**
* 消息发送者名称
*/
@ExcelProperty(value = "消息发送者名称")
private String fromUserName;
/**
* 消息接收者id
*/
@ExcelProperty(value = "消息接收者id")
private Long toUserId;
/**
* 消息接收者名称
*/
@ExcelProperty(value = "消息接收者名称")
private String toUserName;
/**
* 消息内容
*/
@ExcelProperty(value = "消息内容")
private String content;
/**
* 是否已读(1 已读)
*/
@ExcelProperty(value = "是否已读", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=,已=读")
private Long unReadFlag;
}
...@@ -176,4 +176,9 @@ public class TotalOrderVo { ...@@ -176,4 +176,9 @@ public class TotalOrderVo {
*/ */
private String phone; private String phone;
/**
* 陪护项目
*/
private String project;
} }
...@@ -3,6 +3,7 @@ package com.pz.system.mapper; ...@@ -3,6 +3,7 @@ package com.pz.system.mapper;
import com.pz.system.domain.Information; import com.pz.system.domain.Information;
import com.pz.system.domain.vo.InformationVo; import com.pz.system.domain.vo.InformationVo;
import com.pz.common.core.mapper.BaseMapperPlus; import com.pz.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Mapper;
/** /**
* 新闻资讯Mapper接口 * 新闻资讯Mapper接口
...@@ -10,6 +11,7 @@ import com.pz.common.core.mapper.BaseMapperPlus; ...@@ -10,6 +11,7 @@ import com.pz.common.core.mapper.BaseMapperPlus;
* @author ruoyi * @author ruoyi
* @date 2023-09-07 * @date 2023-09-07
*/ */
@Mapper
public interface InformationMapper extends BaseMapperPlus<InformationMapper, Information, InformationVo> { public interface InformationMapper extends BaseMapperPlus<InformationMapper, Information, InformationVo> {
} }
package com.pz.system.mapper;
import com.pz.common.core.mapper.BaseMapperPlus;
import com.pz.system.domain.Information;
import com.pz.system.domain.Message;
import com.pz.system.domain.vo.InformationVo;
import com.pz.system.domain.vo.MessageVo;
import org.apache.ibatis.annotations.Mapper;
/**
* 聊天消息Mapper接口
*/
@Mapper
public interface MessageMapper extends BaseMapperPlus<MessageMapper, Message, MessageVo> {
}
package com.pz.system.mapper;
import com.pz.system.domain.MsgInfo;
import com.pz.system.domain.vo.MsgInfoVo;
import com.pz.common.core.mapper.BaseMapperPlus;
/**
* 消息Mapper接口
*
* @author ruoyi
* @date 2023-09-09
*/
public interface MsgInfoMapper extends BaseMapperPlus<MsgInfoMapper, MsgInfo, MsgInfoVo> {
}
...@@ -33,6 +33,13 @@ public interface ICityService { ...@@ -33,6 +33,13 @@ public interface ICityService {
List<CityVo> queryList(CityBo bo); List<CityVo> queryList(CityBo bo);
/** /**
* 小程序城市接口
* @param bo
* @return
*/
List<CityVo> queryAppList(CityBo bo);
/**
* 新增城市 * 新增城市
*/ */
Boolean insertByBo(CityBo bo); Boolean insertByBo(CityBo bo);
......
...@@ -32,7 +32,7 @@ public interface IDepartmentService { ...@@ -32,7 +32,7 @@ public interface IDepartmentService {
* @param * @param
* @return * @return
*/ */
List<Department> departmentByHospitalId(Integer hospitalId); List<DepartmentVo> departmentByHospitalId(Integer hospitalId);
/** /**
* 查询科室列表 * 查询科室列表
......
package com.pz.system.service;
public interface IMessageService {
}
package com.pz.system.service;
import com.pz.system.domain.MsgInfo;
import com.pz.system.domain.vo.MsgInfoVo;
import com.pz.system.domain.bo.MsgInfoBo;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 消息Service接口
*
* @author ruoyi
* @date 2023-09-09
*/
public interface IMsgInfoService {
/**
* 查询消息
*/
MsgInfoVo queryById(Long id);
/**
* 查询消息列表
*/
TableDataInfo<MsgInfoVo> queryPageList(MsgInfoBo bo, PageQuery pageQuery);
/**
* 查询消息列表
*/
List<MsgInfoVo> queryList(MsgInfoBo bo);
/**
* 新增消息
*/
Boolean insertByBo(MsgInfoBo bo);
/**
* 修改消息
*/
Boolean updateByBo(MsgInfoBo bo);
/**
* 校验并批量删除消息信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}
package com.pz.system.service; package com.pz.system.service;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.request.WxPayRefundQueryRequest; import com.github.binarywang.wxpay.bean.request.WxPayRefundQueryRequest;
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
...@@ -86,7 +87,7 @@ public interface IPayService { ...@@ -86,7 +87,7 @@ public interface IPayService {
* 微信请求的接口,要求可以公网访问,要放开token校验 * 微信请求的接口,要求可以公网访问,要放开token校验
* @param xmlData 微信提交的请求参数 * @param xmlData 微信提交的请求参数
*/ */
String parseOrderNotifyResult(String xmlData) throws WxPayException; WxPayOrderNotifyResult parseOrderNotifyResult(String xmlData) throws WxPayException;
/** /**
* 退款回调通知处理 * 退款回调通知处理
......
...@@ -23,6 +23,12 @@ public interface IStoreApplyService { ...@@ -23,6 +23,12 @@ public interface IStoreApplyService {
StoreApplyVo queryById(Integer id); StoreApplyVo queryById(Integer id);
/** /**
* 小程序查看商户申请状态
* @return
*/
StoreApplyVo queryByUserId();
/**
* 查询商城商户申请列表 * 查询商城商户申请列表
*/ */
TableDataInfo<StoreApplyVo> queryPageList(StoreApplyBo bo, PageQuery pageQuery); TableDataInfo<StoreApplyVo> queryPageList(StoreApplyBo bo, PageQuery pageQuery);
......
...@@ -70,6 +70,13 @@ public interface ITotalOrderService { ...@@ -70,6 +70,13 @@ public interface ITotalOrderService {
Boolean cancelOrder(TotalOrderBo bo); Boolean cancelOrder(TotalOrderBo bo);
/** /**
* 统一下单接口
* @param bo
* @return
*/
Object payOrder(TotalOrderBo bo);
/**
* 用户主动退款 * 用户主动退款
* *
* @param bo * @param bo
......
...@@ -171,7 +171,7 @@ public class SysLoginService { ...@@ -171,7 +171,7 @@ public class SysLoginService {
sysUser.setUserName(loginBo.getMobilePhone()); sysUser.setUserName(loginBo.getMobilePhone());
String nikeName = StringUtils.isNoneBlank(loginBo.getNikeName()) ? loginBo.getNikeName() : "用户" + RandomUtil.randomString(8); String nikeName = StringUtils.isNoneBlank(loginBo.getNikeName()) ? loginBo.getNikeName() : "用户" + RandomUtil.randomString(8);
sysUser.setNickName(nikeName); sysUser.setNickName(nikeName);
sysUser.setUserType(UserType.APP_USER.getUserType()); sysUser.setUserType(UserType.SYS_USER.getUserType());
sysUser.setSex("2"); sysUser.setSex("2");
// 初始密码为123456 // 初始密码为123456
sysUser.setPassword(BCrypt.hashpw("123456")); sysUser.setPassword(BCrypt.hashpw("123456"));
......
...@@ -58,6 +58,13 @@ public class CityServiceImpl implements ICityService { ...@@ -58,6 +58,13 @@ public class CityServiceImpl implements ICityService {
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
} }
@Override
public List<CityVo> queryAppList(CityBo bo) {
LambdaQueryWrapper<City> lqw = buildQueryWrapper(bo);
List<CityVo> cityVos = baseMapper.selectVoList(lqw);
return null;
}
private LambdaQueryWrapper<City> buildQueryWrapper(CityBo bo) { private LambdaQueryWrapper<City> buildQueryWrapper(CityBo bo) {
LambdaQueryWrapper<City> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<City> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getName()), City::getName, bo.getName()); lqw.like(StringUtils.isNotBlank(bo.getName()), City::getName, bo.getName());
......
...@@ -86,7 +86,7 @@ public class DepartmentServiceImpl implements IDepartmentService { ...@@ -86,7 +86,7 @@ public class DepartmentServiceImpl implements IDepartmentService {
} }
@Override @Override
public List<Department> departmentByHospitalId(Integer hospitalId) { public List<DepartmentVo> departmentByHospitalId(Integer hospitalId) {
Hospital hospital = hospitalMapper.selectById(hospitalId); Hospital hospital = hospitalMapper.selectById(hospitalId);
// 去除方括号 // 去除方括号
String numbers = hospital.getDepartments().substring(1, hospital.getDepartments().length() - 1); String numbers = hospital.getDepartments().substring(1, hospital.getDepartments().length() - 1);
...@@ -99,15 +99,39 @@ public class DepartmentServiceImpl implements IDepartmentService { ...@@ -99,15 +99,39 @@ public class DepartmentServiceImpl implements IDepartmentService {
for (String num : numberArray) { for (String num : numberArray) {
integerList.add(Integer.parseInt(num.trim())); integerList.add(Integer.parseInt(num.trim()));
} }
List<Department> departments = baseMapper.selectList(new LambdaQueryWrapper<Department>().in(Department::getId, integerList)); List<DepartmentVo> departments = baseMapper.selectVoList(new LambdaQueryWrapper<Department>().in(Department::getId, integerList));
if (CollectionUtils.isNotEmpty(departments)) {
//查询所有菜单
List<DepartmentVo> allMenu = departments;
// 对父菜单进行排序
Collections.sort(allMenu, new Comparator<DepartmentVo>() {
@Override
public int compare(DepartmentVo o1, DepartmentVo o2) {
// 根据需要进行排序比较,可以根据实际情况修改
return Integer.compare(o1.getSortord(), o2.getSortord());
}
});
//根节点集合
List<DepartmentVo> rootMenu = new ArrayList<>();
for (DepartmentVo entity : allMenu) {
entity.setLabel(entity.getTitle());
entity.setValue(entity.getId());
entity.setText(entity.getTitle());
if (entity.getParentId() == 0) { //父节点是0的,为根节点。
rootMenu.add(entity);
}
}
if(null != departments){ //为根菜单设置子菜单,getClild是递归调用的
for (Department department : departments) { for (DepartmentVo entity : rootMenu) {
department.setValue(department.getId()); entity.setLabel(entity.getTitle());
department.setText(department.getTitle()); /* 获取根节点下的所有子节点 使用getChild方法*/
List<DepartmentVo> childList = getChild(entity.getId().toString(), allMenu);
entity.setChildren(childList);//给根节点设置子节点
} }
return rootMenu;
} }
return departments; return departments;
} }
......
package com.pz.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.system.domain.Department;
import com.pz.system.domain.Hospital;
import com.pz.system.domain.bo.DepartmentBo;
import com.pz.system.domain.vo.DepartmentVo;
import com.pz.system.mapper.DepartmentMapper;
import com.pz.system.mapper.HospitalMapper;
import com.pz.system.service.IDepartmentService;
import com.pz.system.service.IMessageService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* 科室Service业务层处理
*
* @author ruoyi
* @date 2023-09-07
*/
@RequiredArgsConstructor
@Service
public class MessageServiceImpl implements IMessageService {
}
package com.pz.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.MsgInfoBo;
import com.pz.system.domain.vo.MsgInfoVo;
import com.pz.system.domain.MsgInfo;
import com.pz.system.mapper.MsgInfoMapper;
import com.pz.system.service.IMsgInfoService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 消息Service业务层处理
*
* @author ruoyi
* @date 2023-09-09
*/
@RequiredArgsConstructor
@Service
public class MsgInfoServiceImpl implements IMsgInfoService {
private final MsgInfoMapper baseMapper;
/**
* 查询消息
*/
@Override
public MsgInfoVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 查询消息列表
*/
@Override
public TableDataInfo<MsgInfoVo> queryPageList(MsgInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<MsgInfo> lqw = buildQueryWrapper(bo);
Page<MsgInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询消息列表
*/
@Override
public List<MsgInfoVo> queryList(MsgInfoBo bo) {
LambdaQueryWrapper<MsgInfo> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<MsgInfo> buildQueryWrapper(MsgInfoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<MsgInfo> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getFromUserId() != null, MsgInfo::getFromUserId, bo.getFromUserId());
lqw.like(StringUtils.isNotBlank(bo.getFromUserName()), MsgInfo::getFromUserName, bo.getFromUserName());
lqw.eq(bo.getToUserId() != null, MsgInfo::getToUserId, bo.getToUserId());
lqw.like(StringUtils.isNotBlank(bo.getToUserName()), MsgInfo::getToUserName, bo.getToUserName());
lqw.eq(StringUtils.isNotBlank(bo.getContent()), MsgInfo::getContent, bo.getContent());
lqw.eq(bo.getUnReadFlag() != null, MsgInfo::getUnReadFlag, bo.getUnReadFlag());
return lqw;
}
/**
* 新增消息
*/
@Override
public Boolean insertByBo(MsgInfoBo bo) {
MsgInfo add = BeanUtil.toBean(bo, MsgInfo.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改消息
*/
@Override
public Boolean updateByBo(MsgInfoBo bo) {
MsgInfo update = BeanUtil.toBean(bo, MsgInfo.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(MsgInfo entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除消息
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}
...@@ -104,11 +104,11 @@ public class PayServiceImpl implements IPayService { ...@@ -104,11 +104,11 @@ public class PayServiceImpl implements IPayService {
* @throws WxPayException * @throws WxPayException
*/ */
@Override @Override
public String parseOrderNotifyResult(String xmlData) throws WxPayException { public WxPayOrderNotifyResult parseOrderNotifyResult(String xmlData) throws WxPayException {
// 参数解析 // 参数解析
final WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData); final WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
// TODO 根据自己业务场景需要构造返回对象 // TODO 根据自己业务场景需要构造返回对象
return WxPayNotifyResponse.success("成功"); return notifyResult;
} }
/** /**
......
...@@ -63,7 +63,6 @@ public class SessionListServiceImpl implements ISessionListService { ...@@ -63,7 +63,6 @@ public class SessionListServiceImpl implements ISessionListService {
LambdaQueryWrapper<SessionList> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SessionList> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getUserId() != null, SessionList::getUserId, bo.getUserId()); lqw.eq(bo.getUserId() != null, SessionList::getUserId, bo.getUserId());
lqw.eq(bo.getToUserId() != null, SessionList::getToUserId, bo.getToUserId()); lqw.eq(bo.getToUserId() != null, SessionList::getToUserId, bo.getToUserId());
lqw.like(StringUtils.isNotBlank(bo.getListName()), SessionList::getListName, bo.getListName());
lqw.eq(bo.getUnReadCount() != null, SessionList::getUnReadCount, bo.getUnReadCount()); lqw.eq(bo.getUnReadCount() != null, SessionList::getUnReadCount, bo.getUnReadCount());
return lqw; return lqw;
} }
......
...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.enums.UserType; import com.pz.common.enums.UserType;
import com.pz.common.helper.LoginHelper;
import com.pz.system.domain.StoreInfo; import com.pz.system.domain.StoreInfo;
import com.pz.system.mapper.StoreInfoMapper; import com.pz.system.mapper.StoreInfoMapper;
import com.pz.system.mapper.SysUserMapper; import com.pz.system.mapper.SysUserMapper;
...@@ -52,6 +53,11 @@ public class StoreApplyServiceImpl implements IStoreApplyService { ...@@ -52,6 +53,11 @@ public class StoreApplyServiceImpl implements IStoreApplyService {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
@Override
public StoreApplyVo queryByUserId() {
return baseMapper.selectVoOne(new LambdaQueryWrapper<StoreApply>().eq(StoreApply::getUid,LoginHelper.getLoginUser().getUserId()));
}
/** /**
* 查询商城商户申请列表 * 查询商城商户申请列表
*/ */
...@@ -107,6 +113,7 @@ public class StoreApplyServiceImpl implements IStoreApplyService { ...@@ -107,6 +113,7 @@ public class StoreApplyServiceImpl implements IStoreApplyService {
public Boolean insertByBo(StoreApplyBo bo) { public Boolean insertByBo(StoreApplyBo bo) {
StoreApply add = BeanUtil.toBean(bo, StoreApply.class); StoreApply add = BeanUtil.toBean(bo, StoreApply.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
bo.setUid(LoginHelper.getLoginUser().getUserId().intValue());
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
......
...@@ -103,6 +103,21 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService { ...@@ -103,6 +103,21 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
public TableDataInfo<StoreGoodsVo> shopAppShop(StoreGoodsBo bo, PageQuery pageQuery) { public TableDataInfo<StoreGoodsVo> shopAppShop(StoreGoodsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<StoreGoods> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<StoreGoods> lqw = buildQueryWrapper(bo);
Page<StoreGoodsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<StoreGoodsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
Optional.ofNullable(result.getRecords()).ifPresent(storeGoodsVos -> {
storeGoodsVos.forEach(storeGoodsVo -> {
if (StringUtils.isNotBlank(storeGoodsVo.getTags())) {
List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class);
//查询商品标签
storeGoodsVo.setList(goodsTagMapper.selectVoList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, ids)));
}
if (null != storeGoodsVo.getCategoryId()) {
Optional.ofNullable(storeGoodsCategoryMapper.selectVoById(storeGoodsVo.getCategoryId()))
.ifPresent(storeGoodsCategoryVo -> {
storeGoodsVo.setTypeName(storeGoodsCategoryVo.getTitle());
});
}
});
});
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -110,6 +125,21 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService { ...@@ -110,6 +125,21 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
public TableDataInfo<StoreGoodsVo> searchAppShop(StoreGoodsBo bo, PageQuery pageQuery) { public TableDataInfo<StoreGoodsVo> searchAppShop(StoreGoodsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<StoreGoods> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<StoreGoods> lqw = buildQueryWrapper(bo);
Page<StoreGoodsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<StoreGoodsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
Optional.ofNullable(result.getRecords()).ifPresent(storeGoodsVos -> {
storeGoodsVos.forEach(storeGoodsVo -> {
if (StringUtils.isNotBlank(storeGoodsVo.getTags())) {
List<Integer> ids = JsonUtils.parseArray(storeGoodsVo.getTags(), Integer.class);
//查询商品标签
storeGoodsVo.setList(goodsTagMapper.selectVoList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, ids)));
}
if (null != storeGoodsVo.getCategoryId()) {
Optional.ofNullable(storeGoodsCategoryMapper.selectVoById(storeGoodsVo.getCategoryId()))
.ifPresent(storeGoodsCategoryVo -> {
storeGoodsVo.setTypeName(storeGoodsCategoryVo.getTitle());
});
}
});
});
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
...@@ -142,7 +172,7 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService { ...@@ -142,7 +172,7 @@ public class StoreGoodsServiceImpl implements IStoreGoodsService {
LambdaQueryWrapper<StoreGoods> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<StoreGoods> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getCityId() != null, StoreGoods::getCityId, bo.getCityId()); lqw.eq(bo.getCityId() != null, StoreGoods::getCityId, bo.getCityId());
lqw.eq(bo.getStoreId() != null, StoreGoods::getStoreId, bo.getStoreId()); lqw.eq(bo.getStoreId() != null, StoreGoods::getStoreId, bo.getStoreId());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), StoreGoods::getTitle, bo.getTitle()); lqw.like(StringUtils.isNotBlank(bo.getTitle()), StoreGoods::getTitle, bo.getTitle());
lqw.eq(StringUtils.isNotBlank(bo.getPrice()), StoreGoods::getPrice, bo.getPrice()); lqw.eq(StringUtils.isNotBlank(bo.getPrice()), StoreGoods::getPrice, bo.getPrice());
lqw.eq(StringUtils.isNotBlank(bo.getSalePrice()), StoreGoods::getSalePrice, bo.getSalePrice()); lqw.eq(StringUtils.isNotBlank(bo.getSalePrice()), StoreGoods::getSalePrice, bo.getSalePrice());
lqw.eq(StringUtils.isNotBlank(bo.getSmallCover()), StoreGoods::getSmallCover, bo.getSmallCover()); lqw.eq(StringUtils.isNotBlank(bo.getSmallCover()), StoreGoods::getSmallCover, bo.getSmallCover());
......
...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.pz.common.core.domain.model.LoginUser; import com.pz.common.core.domain.model.LoginUser;
import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.domain.PageQuery; import com.pz.common.core.domain.PageQuery;
...@@ -13,6 +14,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -13,6 +14,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.enums.CommonOrderStatus; import com.pz.common.enums.CommonOrderStatus;
import com.pz.common.enums.DBMYOrderStatus; import com.pz.common.enums.DBMYOrderStatus;
import com.pz.common.enums.ShopOrderStatus; import com.pz.common.enums.ShopOrderStatus;
import com.pz.common.enums.TotalOrderStatus;
import com.pz.common.exception.ServiceException; import com.pz.common.exception.ServiceException;
import com.pz.merchant.domain.vo.SonOrderVo; import com.pz.merchant.domain.vo.SonOrderVo;
import com.pz.merchant.service.ISonOrderService; import com.pz.merchant.service.ISonOrderService;
...@@ -22,6 +24,7 @@ import com.pz.system.domain.*; ...@@ -22,6 +24,7 @@ import com.pz.system.domain.*;
import com.pz.system.domain.bo.CreateOrderBo; import com.pz.system.domain.bo.CreateOrderBo;
import com.pz.system.domain.vo.AccompanyDemandVo; import com.pz.system.domain.vo.AccompanyDemandVo;
import com.pz.system.mapper.*; import com.pz.system.mapper.*;
import com.pz.system.service.IPayService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.pz.system.domain.bo.TotalOrderBo; import com.pz.system.domain.bo.TotalOrderBo;
...@@ -29,6 +32,7 @@ import com.pz.system.domain.vo.TotalOrderVo; ...@@ -29,6 +32,7 @@ import com.pz.system.domain.vo.TotalOrderVo;
import com.pz.system.service.ITotalOrderService; import com.pz.system.service.ITotalOrderService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
/** /**
...@@ -68,17 +72,72 @@ public class TotalOrderServiceImpl implements ITotalOrderService { ...@@ -68,17 +72,72 @@ public class TotalOrderServiceImpl implements ITotalOrderService {
private final StoreGoodsMapper storeGoodsMapper; private final StoreGoodsMapper storeGoodsMapper;
private final IPayService iPayService;
private final SysUserMapper sysUserMapper;
@Override @Override
public TotalOrderVo queryById(Long id) { public TotalOrderVo queryById(Long id) {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
/** /**
* 查询总订单 * 查询总订单详情
*/ */
@Override @Override
public TotalOrderVo queryByAppId(Integer id) { public TotalOrderVo queryByAppId(Integer id) {
TotalOrderVo totalOrderVo = baseMapper.selectByOrderId(id); TotalOrderVo totalOrderVo = baseMapper.selectByOrderId(id);
if(totalOrderVo.getBusinessId() == 1){//预约陪诊
totalOrderVo.setServiceStatus(
yypzOrderMapper.selectOne(new LambdaQueryWrapper<YypzOrder>().eq(YypzOrder::getOrderId, totalOrderVo.getId())).getStatus()
);
}else if(totalOrderVo.getBusinessId() == 2){//代办挂号
totalOrderVo.setServiceStatus(
dbghOrderMapper.selectOne(new LambdaQueryWrapper<DbghOrder>().eq(DbghOrder::getOrderId, totalOrderVo.getId())).getStatus()
);
}else if(totalOrderVo.getBusinessId() == 3){//代办问诊
totalOrderVo.setServiceStatus(
dbwzOrderMapper.selectOne(new LambdaQueryWrapper<DbwzOrder>().eq(DbwzOrder::getOrderId, totalOrderVo.getId())).getStatus()
);
}else if(totalOrderVo.getBusinessId() == 4){//住院陪护
totalOrderVo.setServiceStatus(
zyphOrderMapper.selectOne(new LambdaQueryWrapper<ZyphOrder>().eq(ZyphOrder::getOrderId, totalOrderVo.getId())).getStatus()
);
}else if(totalOrderVo.getBusinessId() == 5){//代办买药
totalOrderVo.setServiceStatus(
dbmyOrderMapper.selectOne(new LambdaQueryWrapper<DbmyOrder>().eq(DbmyOrder::getOrderId, totalOrderVo.getId())).getStatus()
);
}else if(totalOrderVo.getBusinessId() == 6){//诊前挂号
totalOrderVo.setServiceStatus(
zqghOrderMapper.selectOne(new LambdaQueryWrapper<ZqghOrder>().eq(ZqghOrder::getOrderId, totalOrderVo.getId())).getStatus()
);
}else if(totalOrderVo.getBusinessId() == 0){//商城订单
StoreOrder storeOrder = storeOrderMapper.selectOne(new LambdaQueryWrapper<StoreOrder>().eq(StoreOrder::getOrderId, totalOrderVo.getId()));
totalOrderVo.setServiceStatus(
storeOrder.getStatus()
);
StoreGoods storeGoods = storeGoodsMapper.selectById(storeOrder.getOrderId());
List<StoreGoodsTag> storeGoodsTags = storeGoodsTagMapper.selectList(new LambdaQueryWrapper<StoreGoodsTag>().in(StoreGoodsTag::getId, getTages(storeGoods.getTags())).select(StoreGoodsTag::getTitle));
totalOrderVo.setTags(storeGoodsTags);
}
return totalOrderVo; return totalOrderVo;
} }
...@@ -219,28 +278,36 @@ public class TotalOrderServiceImpl implements ITotalOrderService { ...@@ -219,28 +278,36 @@ public class TotalOrderServiceImpl implements ITotalOrderService {
baseMapper.insert(totalOrder); baseMapper.insert(totalOrder);
bo.setOrderId(totalOrder.getId().intValue()); bo.setOrderId(totalOrder.getId().intValue());
totalOrderVo.setOrderSn(orderSn); totalOrderVo.setOrderSn(totalOrder.getId()+"");
totalOrderVo.setPayMoney(bo.getPayMoney()); totalOrderVo.setPayMoney(bo.getPayMoney());
if (bo.getBusinessId() == 1) {// 预约陪诊 if (bo.getBusinessId() == 1) {// 预约陪诊
YypzOrder yypzOrder = BeanUtil.toBean(bo, YypzOrder.class);
yypzOrderMapper.insert(yypzOrder); YypzOrder yypzOrder = BeanUtil.toBean(bo, YypzOrder.class);
yypzOrder.setHid(bo.getHospitalId());
yypzOrderMapper.insert(yypzOrder);
} else if (bo.getBusinessId() == 2) {// 代办挂号 } else if (bo.getBusinessId() == 2) {// 代办挂号
DbghOrder dbghOrder = BeanUtil.toBean(bo, DbghOrder.class); DbghOrder dbghOrder = BeanUtil.toBean(bo, DbghOrder.class);
dbghOrderMapper.insert(dbghOrder); dbghOrder.setHid(bo.getHospitalId());
dbghOrder.setDid(bo.getDepartmentId());
dbghOrderMapper.insert(dbghOrder);
} else if (bo.getBusinessId() == 3) {// 代办问诊 } else if (bo.getBusinessId() == 3) {// 代办问诊
DbwzOrder dbwzOrder = BeanUtil.toBean(bo, DbwzOrder.class); DbwzOrder dbwzOrder = BeanUtil.toBean(bo, DbwzOrder.class);
dbwzOrderMapper.insert(dbwzOrder); dbwzOrder.setDid(bo.getDepartmentId());
dbwzOrder.setVisitor(bo.getVisitorId());
dbwzOrderMapper.insert(dbwzOrder);
} else if (bo.getBusinessId() == 4) {// 住院陪护 } else if (bo.getBusinessId() == 4) {// 住院陪护
ZyphOrder zyphOrder = BeanUtil.toBean(bo, ZyphOrder.class); ZyphOrder zyphOrder = BeanUtil.toBean(bo, ZyphOrder.class);
zyphOrderMapper.insert(zyphOrder); zyphOrder.setDid(bo.getDepartmentId());
zyphOrder.setVisitor(bo.getVisitorId());
zyphOrderMapper.insert(zyphOrder);
} else if (bo.getBusinessId() == 5) {// 代办买药 } else if (bo.getBusinessId() == 5) {// 代办买药
...@@ -274,11 +341,38 @@ public class TotalOrderServiceImpl implements ITotalOrderService { ...@@ -274,11 +341,38 @@ public class TotalOrderServiceImpl implements ITotalOrderService {
@Override @Override
public Boolean cancelOrder(TotalOrderBo bo) { public Boolean cancelOrder(TotalOrderBo bo) {
TotalOrder totalOrder = baseMapper.selectById(bo.getId()); TotalOrder totalOrder = baseMapper.selectById(bo.getId());
if (totalOrder.getBusinessId() == 1) {// 预约陪诊 if(null != totalOrder.getEmId() && totalOrder.getEmId() != 0){//预约陪诊
yypzOrderMapper.selectOne(new LambdaQueryWrapper<YypzOrder>().eq(YypzOrder::getOrderId, totalOrder)); //yypzOrderMapper.selectOne(new LambdaQueryWrapper<YypzOrder>().eq(YypzOrder::getOrderId,totalOrder));
totalOrder.setStatus(TotalOrderStatus.CANCEL.getCode());
return baseMapper.updateById(totalOrder) > 0;
}else {
throw new ServiceException("该订单已分配给陪诊员,不允许取消订单!"); throw new ServiceException("该订单已分配给陪诊员,不允许取消订单!");
} }
return baseMapper.updateById(totalOrder) > 0; }
@Override
public Object payOrder(TotalOrderBo bo) {
LoginUser loginUser = LoginHelper.getLoginUser();
TotalOrder totalOrder = baseMapper.selectById(Integer.parseInt(bo.getOrderSn()));
Object payment = null;
int money = (int) (totalOrder.getPayMoney() * 100);
try {
WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
orderRequest.setBody(bo.getOrderTitle());
orderRequest.setOutTradeNo(totalOrder.getOrderSn());
orderRequest.setTotalFee(money);//元转成分
orderRequest.setOpenid(sysUserMapper.selectById(loginUser.getUserId()).getOpenId());
orderRequest.setSpbillCreateIp("127.0.0.1");
orderRequest.setNotifyUrl("http://127.0.0.1:8089/applet/totalOrder/orderPayCallBack");
orderRequest.setTradeType("JSAPI");
payment = iPayService.createOrder(orderRequest);
} catch (Exception e) {
throw new ServiceException("微信支付失败!");
}
return payment;
} }
@Override @Override
......
...@@ -64,19 +64,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -64,19 +64,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectEmployees" resultType="com.pz.merchant.domain.vo.EmployeesVo"> <select id="selectEmployees" resultType="com.pz.merchant.domain.vo.EmployeesVo">
SELECT e.id, s.avatar ,e.name,e.working_hours,(SUM(CASE WHEN o.is_satisfaction = 1 THEN 1 ELSE 0 END) / NULLIF(COUNT(o.is_satisfaction), 0)) * 100 AS satisfaction_rate SELECT e.id, s.avatar as avatar,e.name,e.working_hours,(SUM(CASE WHEN o.is_satisfaction = 1 THEN 1 ELSE 0 END) / NULLIF(COUNT(o.is_satisfaction), 0)) * 100 AS satisfaction_rate
FROM employees e FROM employees e
left join total_order o on o.em_id = e.id left join total_order o on o.em_id = e.id
left join company c on c.id = e.company_id left join company c on c.id = e.company_id
left join sys_user s on s.user_id = e.uid left join sys_user s on s.user_id = e.uid
WHERE e.`status` = 1 and e.now_type= 1 and e.del_flag= 0 WHERE e.`status` = 1 and e.now_type= 1 and e.del_flag= 0
<if test="bo.companyId != null and bo.companyId != 0"> <if test="bo.companyId != null and bo.companyId != ''">
e.company_id = #{bo.companyId} and e.company_id = #{bo.companyId}
</if> </if>
GROUP BY GROUP BY
e.id, e.id,
e.`name` e.`name`
<if test="bo.favorableRate != null"> <if test="bo.favorableRate != null and bo.favorableRate != ''">
HAVING HAVING
satisfaction_rate >= #{bo.favorableRate}; satisfaction_rate >= #{bo.favorableRate};
</if> </if>
......
...@@ -8,7 +8,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -8,7 +8,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="id" column="id"/> <result property="id" column="id"/>
<result property="userId" column="user_id"/> <result property="userId" column="user_id"/>
<result property="toUserId" column="to_user_id"/> <result property="toUserId" column="to_user_id"/>
<result property="listName" column="list_name"/>
<result property="unReadCount" column="un_read_count"/> <result property="unReadCount" column="un_read_count"/>
</resultMap> </resultMap>
<update id="addUnReadCount"> <update id="addUnReadCount">
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
<result property="password" column="password"/> <result property="password" column="password"/>
<result property="status" column="status"/> <result property="status" column="status"/>
<result property="delFlag" column="del_flag"/> <result property="delFlag" column="del_flag"/>
<result property="openId" column="open_id"/>
<result property="loginIp" column="login_ip"/> <result property="loginIp" column="login_ip"/>
<result property="loginDate" column="login_date"/> <result property="loginDate" column="login_date"/>
<result property="createBy" column="create_by"/> <result property="createBy" column="create_by"/>
...@@ -55,6 +56,7 @@ ...@@ -55,6 +56,7 @@
u.user_type, u.user_type,
u.email, u.email,
u.avatar, u.avatar,
u.open_id,
u.phonenumber, u.phonenumber,
u.password, u.password,
u.sex, u.sex,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment