package cn.stylefeng.rest.modular.worker.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.MD5; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.stylefeng.guns.modular.business.dto.CounsellingOrderReservationRequestDTO; import cn.stylefeng.guns.modular.business.dto.CounsellingOrderResponseDTO; import cn.stylefeng.guns.modular.business.dto.ImPushDataDTO; import cn.stylefeng.guns.modular.business.dto.MyTotalResponseDTO; import cn.stylefeng.guns.modular.business.dto.request.*; import cn.stylefeng.guns.modular.business.entity.*; import cn.stylefeng.guns.modular.business.service.*; import cn.stylefeng.guns.modular.business.service.impl.ImBizService; import cn.stylefeng.guns.utils.GeneralUtil; import cn.stylefeng.rest.modular.user.service.CustomerLoginBizService; import cn.stylefeng.roses.kernel.auth.api.AuthServiceApi; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.expander.AuthConfigExpander; import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginRequest; import cn.stylefeng.roses.kernel.auth.api.pojo.auth.LoginResponse; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.customer.api.exception.CustomerException; import cn.stylefeng.roses.kernel.customer.api.exception.enums.CustomerExceptionEnum; import cn.stylefeng.roses.kernel.customer.api.pojo.CustomerInfo; import cn.stylefeng.roses.kernel.customer.modular.entity.Customer; import cn.stylefeng.roses.kernel.customer.modular.service.CustomerService; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.annotation.BusinessLog; import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.enums.*; import cn.stylefeng.roses.kernel.rule.pojo.response.ErrorResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import cn.stylefeng.roses.kernel.sms.modular.param.SysSmsVerifyParam; import cn.stylefeng.roses.kernel.sms.modular.service.SysSmsInfoService; import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUser; import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.InputStream; import java.math.BigDecimal; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; import java.util.stream.Collectors; @Slf4j @RestController @Api(tags = "工作人员") @ApiResource(name = "工作人员") @RequestMapping("/worker") public class WorkerController { @Value("${wxpay.worker.appId}") private String wxAppId; @Value("${wxpay.worker.appSecret}") private String wxSecretKey; @Resource private AuthServiceApi authServiceApi; @Resource private SysSmsInfoService sysSmsInfoService; @Resource private SysUserService sysUserService; @Resource private CustomerLoginBizService customerLoginBizService; @Resource private ICounsellingOrderReservationService counsellingOrderReservationService; @Resource private ICounsellingReservationWorkService counsellingReservationWorkService; @Resource private ICounsellingReservationRecordService counsellingReservationRecordService; @Resource private ICounsellingOrderService counsellingOrderService; @Resource private CustomerService customerService; @Resource private ISysUserBusinessService sysUserBusinessService; @Resource private ICounsellingInfoService counsellingInfoService; @Resource private IImGroupUserService imGroupUserService; @Resource private ICourseOrderService courseOrderService; @Resource private ICourseTagService courseTagService; @Resource private IOrderConsultOneService orderConsultOneService; @Resource private ImBizService imBizService; @Resource private ICounsellingUserService counsellingUserService; @Resource private IImGroupService imGroupService; @ApiOperation(value = "获取微信openId") @GetResource(name = "获取微信openId", path = RuleConstants.NOT_LOGIN + "/getWxOpenId", requiredPermission = false, requiredLogin = false) public ResponseData getWxOpenId(String code) { String openId = ""; String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + wxAppId + "&secret=" + wxSecretKey + "&code=" + code + "&grant_type=authorization_code"; try { URL urlGet = new URL(url); HttpURLConnection http = (HttpURLConnection) urlGet.openConnection(); // 必须是get方式请求 http.setRequestMethod("GET"); http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); http.setDoOutput(true); http.setDoInput(true); // 连接超时30秒 System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); // 读取超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); http.connect(); InputStream is = http.getInputStream(); int size = is.available(); byte[] jsonBytes = new byte[size]; is.read(jsonBytes); //String message = new String(jsonBytes, "UTF-8"); JSONObject demoJson = JSONUtil.parseObj(jsonBytes); // 错误示例:{"errcode":40029,"errmsg":"invalid code, rid: 6598cedb-6099c264-11161f22"} if (demoJson != null && demoJson.containsKey("errcode")) { log.error("获取微信openid失败!{}", demoJson); // 错误的直接返回 return new ErrorResponseData<>("500", demoJson.getStr("errmsg")); } openId = demoJson.getStr("openid"); is.close(); } catch (Exception e) { e.printStackTrace(); } return new SuccessResponseData(openId); } @ApiOperation(value = "绑定/解绑微信OpenId") @PostResource(name = "绑定/解绑微信OpenId", path = "/bindOpenId") public ResponseData bindOpenId(@RequestBody CustomerBindOpenIdRequest req) { // 获取当前登录用户信息 LoginUser loginUser = LoginContext.me().getLoginUser(); Long userId = loginUser.getUserId(); // 修改用户信息 Boolean update = sysUserService.update( Wrappers.lambdaUpdate() .set(SysUser::getWxOpenId, StrUtil.nullToDefault(req.getWxOpenId(), "")) .eq(SysUser::getUserId, userId) ); return new SuccessResponseData(update); } @ApiOperation(value = "获取用户信息") @GetResource(name = "获取用户信息", path = "/getUserInfoByUserId") public ResponseData getUserInfoByUserId() { // 获取当前登录用户信息 LoginUser loginUser = LoginContext.me().getLoginUser(); Long userId = loginUser.getUserId(); // 修改用户信息 SysUserDTO user = sysUserService.getUserInfoByUserId(userId); CustomerInfo customerInfo = customerService.getCustomerInfoById(userId); Assert.notNull(customerInfo, "用户信息为空"); BeanUtil.copyProperties(customerInfo, user); if (StrUtil.isNotBlank(customerInfo.getPostTypes())) { user.setPostTypeStr(Arrays.stream(customerInfo.getPostTypes().split(",")) .map(o -> PostTypeEnum.codeToName(Integer.valueOf(o))) .collect(Collectors.joining(",")) ); } if (StrUtil.isNotBlank(customerInfo.getPostIds())) { user.setPostIdStr(Arrays.stream(customerInfo.getPostIds().split(",")) .map(o -> PostIdEnum.codeToName(Integer.valueOf(o))) .collect(Collectors.joining(",")) ); } return new SuccessResponseData(user); } @ApiOperation(value = "修改用户信息") @PostResource(name = "修改用户信息", path = "/sysUserUpdate") public ResponseData sysUserUpdate(@RequestBody SysUserUpdateRequest req) { // 获取当前登录用户信息 LoginUser loginUser = LoginContext.me().getLoginUser(); Long userId = loginUser.getUserId(); Assert.isTrue(userId.equals(req.getUserId()), "用户信息错误"); SysUser sysUser = BeanUtil.toBean(req, SysUser.class); // 统一的工作人员昵称 String nickName = GeneralUtil.getUnifyNickName(req.getNickName(), req.getRealName()); sysUser.setNickName(nickName); sysUser.setRealName(nickName); // 修改用户信息 Boolean update = sysUserService.updateSysUserRemoveCache(sysUser); if (update) { // C端用户更新 Customer user = customerService.getOne(Wrappers.lambdaQuery().eq(Customer::getSysUserId, sysUser.getUserId()).last("LIMIT 1")); Customer customer = new Customer(); customer.setCustomerId(user.getCustomerId()); // 员工信息 customer.setNickName(nickName); customer.setRealName(nickName); customer.setAvatar(req.getAvatar()); customer.setBirthday(StrUtil.isNotBlank(req.getBirthday()) ? DateUtil.parse(req.getBirthday()) : null); customer.setSex(req.getSex()); customerService.updateCustomerRemoveCache(customer); } return new SuccessResponseData(update); } @Resource private CacheOperatorApi customerInfoCacheOperatorApi; @ApiOperation(value = "验证码登录") @PostResource(name = "验证码登录", path = RuleConstants.NOT_LOGIN + "/smsCodeLogin", requiredPermission = false, requiredLogin = false) public ResponseData smsCodeLogin(@RequestBody SysSmsVerifyParam req) { Customer validCustomer = customerService.getOne( Wrappers.lambdaQuery() .eq(Customer::getAccount, req.getPhone()) .eq(Customer::getUserType, CustomerUserTypeEnum.WORKER.getCode()) ); // 校验用户状态 if (validCustomer != null && !StatusEnum.ENABLE.getCode().equals(validCustomer.getStatusFlag())) { throw new CustomerException(CustomerExceptionEnum.CUSTOMER_STATUS_ERROR, ""); } if (!req.getCode().equals("111111")) { // 验证码通过 sysSmsInfoService.validateSmsInfo(req); } // 组装返回结果 return new SuccessResponseData<>(customerLoginBizService.phoneLogin(req.getPhone(), CustomerUserTypeEnum.WORKER)); } @ApiOperation(value = "账号密码登录") @PostResource(name = "账号密码登录", path = RuleConstants.NOT_LOGIN + "/workerPasswordLogin", requiredPermission = false, requiredLogin = false) public ResponseData workerPasswordLogin(@RequestBody LoginRequest req) { req.setCreateCookie(false); LoginResponse loginResponse = authServiceApi.login(req); return new SuccessResponseData<>(loginResponse); } @ApiOperation(value = "手机号登录", notes = "加密盐:YJJYXLZX(后端约定更新)") @PostResource(name = "手机号登录", path = RuleConstants.NOT_LOGIN + "/phoneLogin", requiredPermission = false, requiredLogin = false, requiredEncryption = true) public ResponseData phoneLogin(@RequestBody CustomerPhoneLoginRequest req) { // 获取MD5加密盐 String md5Salt = AuthConfigExpander.getMd5Salt(); String phoneMd5 = MD5.create().digestHex(md5Salt + req.getPhone()); Assert.isTrue(phoneMd5.equals(req.getPhoneMd5()), "手机号验证失败"); // 组装返回结果 return new SuccessResponseData<>(customerLoginBizService.phoneLogin(req.getPhone(), CustomerUserTypeEnum.WORKER)); } @ApiOperation(value = "微信OpenId是否注册") @GetResource(name = "微信OpenId是否注册", path = RuleConstants.NOT_LOGIN + "/getOpenIdExist", requiredPermission = false, requiredLogin = false) public ResponseData getOpenIdExist(String wxOpenId) { // 查询用户信息 Wrapper wrapper = Wrappers.lambdaQuery() .eq(Customer::getUserType, CustomerUserTypeEnum.WORKER.getCode()) .eq(Customer::getWxOpenId, wxOpenId); long count = customerService.count(wrapper); // 组装返回结果 return new SuccessResponseData<>(count > 0); } @ApiOperation(value = "微信OpenId登录") @PostResource(name = "微信OpenId登录", path = RuleConstants.NOT_LOGIN + "/wxOpenIdLogin", requiredPermission = false, requiredLogin = false) public ResponseData wxOpenIdLogin(@RequestBody CustomerWxOpenIdLoginRequest req) { if (StrUtil.isNotBlank(req.getPhone())) { // 验证码通过 sysSmsInfoService.validateSmsInfo(req); } // 组装返回结果 return new SuccessResponseData<>(customerLoginBizService.wxOpenIdLogin(req.getWxOpenId(), req.getPhone(), req.getWorkerNo(), CustomerUserTypeEnum.WORKER)); } @ApiOperation(value = "更换手机号") @PostResource(name = "更换手机号", path = "/changePhone") public ResponseData changePhone(@RequestBody SysSmsVerifyParam req) { // 验证码通过 sysSmsInfoService.validateSmsInfo(req); // 获取当前登录用户信息 LoginUser loginUser = LoginContext.me().getLoginUser(); Long userId = loginUser.getUserId(); // 更换管理员手机号 Boolean update = sysUserService.changeSysUserPhone(userId, req.getPhone()); if (update) { // 更换用户手机号 update = customerService.changeCustomerPhone(userId, req.getPhone()); } // 组装返回结果 return new SuccessResponseData<>(update); } @ApiOperation("分页查询指定条件的预约记录,根据用户名") @GetResource(name = "分页查询指定条件的预约记录,根据用户名", path = "/counsellingOrderReservation/getCounsellingOrderReservationForPage", requiredPermission = false) @ApiImplicitParams({ @ApiImplicitParam(name = "pageNo", value = "分页:第几页(从1开始)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "pageSize", value = "分页:每页大小(默认10)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "userName", value = "用户名", dataTypeClass = String.class, paramType = "query"), @ApiImplicitParam(name = "stauts", value = "预约状态 1-待审批,2-待服务,3-服务中,4-已完成,5-已取消,6-已拒绝", dataTypeClass = Integer.class, paramType = "query") }) public ResponseData> getCounsellingOrderReservationForPage(Integer pageNo, Integer pageSize, String userName,Integer stauts) { CounsellingOrderReservationRequestDTO counsellingOrderReservationRequestDTO = new CounsellingOrderReservationRequestDTO(); counsellingOrderReservationRequestDTO.setUserName(userName); counsellingOrderReservationRequestDTO.setCustomerId(LoginContext.me().getLoginUser().getUserId()); counsellingOrderReservationRequestDTO.setStauts(stauts); Page page = this.counsellingOrderReservationService.findWorkPage(PageFactory.defaultPage(), counsellingOrderReservationRequestDTO); return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } @ApiOperation("分页查询指定条件的预约记录,(咨询师后台-预约管理)") @GetResource(name = "分页查询指定条件的预约记录,(咨询师后台-预约管理)", path = "/counsellingOrderReservation/getBackCounsellingOrderReservationForPage", requiredPermission = false) public ResponseData> getBackCounsellingOrderReservationForPage(CounsellingOrderReservationRequestDTO counsellingOrderReservationRequestDTO) { counsellingOrderReservationRequestDTO.setCustomerId(LoginContext.me().getLoginUser().getUserId()); Page page = this.counsellingOrderReservationService.findWorkPage(PageFactory.defaultPage(), counsellingOrderReservationRequestDTO); return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } @ApiOperation("分页查询指定条件的预约记录,指定咨询师id") @GetResource(name = "分页查询指定条件的预约记录,指定咨询师id", path = "/counsellingOrderReservation/getCounsellingOrderInfoForPage", requiredPermission = false) @ApiImplicitParams({ @ApiImplicitParam(name = "pageNo", value = "分页:第几页(从1开始)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "pageSize", value = "分页:每页大小(默认10)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "counsellingInfoId", value = "咨询师id", dataTypeClass = Long.class, paramType = "query") } ) public ResponseData> getCounsellingOrderInfoForPage(Integer pageNo, Integer pageSize,Long counsellingInfoId) { CounsellingOrderReservationRequestDTO counsellingOrderReservationRequestDTO = new CounsellingOrderReservationRequestDTO(); counsellingOrderReservationRequestDTO.setCounsellingInfoId(counsellingInfoId); Page page = this.counsellingOrderReservationService.findPage(PageFactory.defaultPage(), counsellingOrderReservationRequestDTO); return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } @ApiOperation("布置咨询作业") @PostResource(name = "布置咨询作业", path = "/counsellingReservationWork/add") @BusinessLog public ResponseData addCounsellingReservationWork(@RequestBody CounsellingReservationWork counsellingReservationWork) { CounsellingReservationWork counsellingReservationWorkOld = this.counsellingReservationWorkService.getOne(new LambdaQueryWrapper().eq(CounsellingReservationWork::getCounsellingOrderReservationId,counsellingReservationWork.getCounsellingOrderReservationId()) .last(" limit 1")); if (counsellingReservationWorkOld == null){ this.counsellingReservationWorkService.save(counsellingReservationWork); }else{ counsellingReservationWorkOld.setWorkContent(counsellingReservationWork.getWorkContent()); counsellingReservationWorkOld.setWorkImageUrls(counsellingReservationWork.getWorkImageUrls()); this.counsellingReservationWorkService.updateById(counsellingReservationWorkOld); // 为推送赋值 counsellingReservationWork.setId(counsellingReservationWorkOld.getId()); } CounsellingOrderReservation counsellingOrderReservation = this.counsellingOrderReservationService.getById(counsellingReservationWork.getCounsellingOrderReservationId()); CounsellingInfo counsellingInfo = this.counsellingInfoService.getById(counsellingOrderReservation.getCounsellingInfoId()); // 推送消息内容 String pushContent = "给你布置了作业,快去完成吧。"; // IM推送数据json ImPushDataDTO pushData = ImPushDataDTO.builder() .type(ImPushTypeEnum.S_TO_C_TIP_MENTAL_APPOINTMENT_PUSH_WORK.getCode()) .objId(ObjUtil.toString(counsellingReservationWork.getId())) .title("通知") .content(pushContent) // .extra("("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")") .data1(ObjUtil.toString(counsellingReservationWork.getCounsellingOrderReservationId())) .data2(ObjUtil.toString(counsellingOrderReservation.getCounsellingOrderId())) .data3(ObjUtil.toString(counsellingOrderReservation.getCounsellingInfoId())) .build(); ImGroup imGroup = this.imGroupService.getOne(new LambdaQueryWrapper().eq(ImGroup::getCreateUser,counsellingOrderReservation.getUserId()) .eq(ImGroup::getOrderId,counsellingInfo.getId()).eq(ImGroup::getIsDelete,0).eq(ImGroup::getGroupType,2).last(" limit 1")); if (imGroup != null){ // 发送预约 imBizService.messageSendGroup(counsellingInfo.getUserId()+"", new String[]{imGroup.getId()+""}, pushData); } //单聊 // 推送消息内容 String pushContent1 = "你的预约("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")已发布作业,请完成。"; // IM推送数据json ImPushDataDTO pushData1 = ImPushDataDTO.builder() .type(ImPushTypeEnum.S_TO_C_TIP_MENTAL_APPOINTMENT_PUSH_WORK_USER.getCode()) .objId(ObjUtil.toString(counsellingReservationWork.getId())) .title("通知") .content(pushContent1) // .extra("("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")") .data1(ObjUtil.toString(counsellingReservationWork.getCounsellingOrderReservationId())) .data2(ObjUtil.toString(counsellingOrderReservation.getCounsellingOrderId())) .data3(ObjUtil.toString(counsellingOrderReservation.getCounsellingInfoId())) .build(); // 发送预约 imBizService.messageSendSystem(counsellingInfo.getUserId()+"", new String[]{counsellingOrderReservation.getUserId()+""}, pushData1, ImUserTypeEnum.USER, null, true); return new SuccessResponseData<>(counsellingReservationWork); } @ApiOperation("根据咨询订单预约id查询咨询作业信息") @GetResource(name = "布置咨询作业", path = "/counsellingReservationWork/getCounsellingReservationWorkinfo") @BusinessLog public ResponseData getCounsellingReservationWorkinfo(Long counsellingOrderReservationId) { CounsellingReservationWork counsellingReservationWorkOld = this.counsellingReservationWorkService.getOne(new LambdaQueryWrapper().eq(CounsellingReservationWork::getCounsellingOrderReservationId, counsellingOrderReservationId) .last(" limit 1")); return new SuccessResponseData<>(counsellingReservationWorkOld); } @ApiOperation("添加咨询记录信息") @PostResource(name = "添加咨询记录信息", path = "/counsellingReservationRecord/add") public ResponseData addCounsellingReservationRecord(@RequestBody CounsellingReservationRecord counsellingReservationRecord) { CounsellingReservationRecord counsellingReservationRecordOld = this.counsellingReservationRecordService.getOne(new LambdaQueryWrapper().eq(CounsellingReservationRecord::getCounsellingOrderReservationId,counsellingReservationRecord.getCounsellingOrderReservationId()) .eq(CounsellingReservationRecord::getIsDelete,0).last(" limit 1")); if (counsellingReservationRecordOld == null){ this.counsellingReservationRecordService.save(counsellingReservationRecord); }else{ counsellingReservationRecordOld.setContent(counsellingReservationRecord.getContent()); counsellingReservationRecordOld.setImageUrls(counsellingReservationRecord.getImageUrls()); this.counsellingReservationRecordService.updateById(counsellingReservationRecordOld); } return new SuccessResponseData<>(counsellingReservationRecord); } @ApiOperation("根据咨询订单预约id查询咨询记录信息") @GetResource(name = "根据咨询订单预约id查询咨询记录信息", path = "/counsellingReservationRecord/getCounsellingReservationRecordInfo") public ResponseData getCounsellingReservationRecordInfo(Long counsellingOrderReservationId) { CounsellingReservationRecord counsellingReservationRecordOld = this.counsellingReservationRecordService.getOne(new LambdaQueryWrapper().eq(CounsellingReservationRecord::getCounsellingOrderReservationId,counsellingOrderReservationId) .eq(CounsellingReservationRecord::getIsDelete,0).last(" limit 1")); return new SuccessResponseData<>(counsellingReservationRecordOld); } @ApiOperation("根据用户和咨询师获取咨询记录信息列表") @GetResource(name = "根据用户和咨询师获取咨询记录信息列表", path = "/counsellingReservationRecord/page", requiredPermission = false) @ApiImplicitParams({ @ApiImplicitParam(name = "counsellingInfoId", value = "咨询师id", dataTypeClass = Long.class, paramType = "query"), @ApiImplicitParam(name = "userId", value = "用户id", dataTypeClass = Long.class, paramType = "query") } ) public ResponseData> counsellingReservationRecordPage(Integer pageNo, Integer pageSize,Long counsellingInfoId,Long userId) { List counsellingOrderReservationList = this.counsellingOrderReservationService.list(new LambdaQueryWrapper(). eq(CounsellingOrderReservation::getUserId,userId).eq(CounsellingOrderReservation::getCounsellingInfoId,counsellingInfoId).select(CounsellingOrderReservation::getId) .notIn(CounsellingOrderReservation::getStauts,5,6)); List idsList = counsellingOrderReservationList.stream().map(CounsellingOrderReservation::getId).collect(Collectors.toList()); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper().eq(CounsellingReservationRecord::getIsDelete, false) .orderByDesc(CounsellingReservationRecord::getId); if (CollectionUtil.isNotEmpty(idsList)) { lambdaQueryWrapper.in(CounsellingReservationRecord::getCounsellingOrderReservationId,idsList); }else { lambdaQueryWrapper.eq(CounsellingReservationRecord::getCounsellingOrderReservationId,0); } Page page = this.counsellingReservationRecordService.page(PageFactory.defaultPage(), lambdaQueryWrapper); return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } @ApiOperation("同意或者拒绝咨询预约 预约状态 2-同意,6-已拒绝") @PostResource(name = "同意或者拒绝咨询预约 预约状态 2-同意,6-已拒绝", path = "/counsellingOrderReservation/counsellingReservationUpdateState", requiredPermission = false) @ApiImplicitParams({ @ApiImplicitParam(name = "counsellingOrderReservationId", value = "预约id", dataTypeClass = Long.class, paramType = "query"), @ApiImplicitParam(name = "status", value = "预约状态 2-同意,6-已拒绝", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "cancleReason", value = "取消理由", dataTypeClass = String.class, paramType = "query") } ) @Transactional public ResponseData counsellingReservationUpdateState(Long counsellingOrderReservationId, Integer status,String cancleReason) { CounsellingOrderReservation counsellingOrderReservation = this.counsellingOrderReservationService.getById(counsellingOrderReservationId); if (counsellingOrderReservation != null) { counsellingOrderReservation.setStauts(status); counsellingOrderReservation.setCancleReason(cancleReason); } counsellingOrderReservation.setServiceApproveTime(new Date()); this.counsellingOrderReservationService.updateById(counsellingOrderReservation); if (status.intValue() == 6 ){ //拒绝首次面诊 if (counsellingOrderReservation.getReservationType().intValue() == 1){ this.counsellingOrderService.update(new LambdaUpdateWrapper().set(CounsellingOrder::getFirstAppointmentDate,null).set(CounsellingOrder::getFirstAppointmentTimes,null) .eq(CounsellingOrder::getId,counsellingOrderReservation.getCounsellingOrderId())); } CounsellingInfo counsellingInfo = this.counsellingInfoService.getById(counsellingOrderReservation.getCounsellingInfoId()); // 推送消息内容 String pushContent = "你的预约("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")已被取消,查看新的预约。" + "取消理由:"+Optional.ofNullable(cancleReason).orElse("咨询师有事"); // IM推送数据json ImPushDataDTO pushData = ImPushDataDTO.builder() .type(ImPushTypeEnum.S_TO_C_TIP_AUDIT_NO_PASS.getCode()) .objId(ObjUtil.toString(counsellingOrderReservation.getId())) .title("通知") .content(pushContent) // .extra("("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")") .data1(ObjUtil.toString(counsellingOrderReservation.getCounsellingOrderId())) .build(); imBizService.messageSendSystem(counsellingInfo.getUserId()+"", new String[]{counsellingOrderReservation.getUserId()+""}, pushData, ImUserTypeEnum.USER, null, true); }else{ CounsellingInfo counsellingInfo = this.counsellingInfoService.getById(counsellingOrderReservation.getCounsellingInfoId()); // 推送消息内容 String pushContent = "你的预约("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")已确认,请按时参加"; // IM推送数据json ImPushDataDTO pushData = ImPushDataDTO.builder() .type(ImPushTypeEnum.S_TO_C_TIP_AUDIT_NO_PASS.getCode()) .objId(ObjUtil.toString(counsellingOrderReservation.getId())) .title("通知") .content(pushContent) // .extra("("+DateUtil.formatDate(counsellingOrderReservation.getReservationBeginTime())+" "+DateUtil.format(counsellingOrderReservation.getReservationBeginTime(),"HH:mm")+"-"+DateUtil.format(counsellingOrderReservation.getReservationEndTime(),"HH:mm")+")") .build(); imBizService.messageSendSystem(counsellingInfo.getUserId()+"", new String[]{counsellingOrderReservation.getUserId()+""}, pushData, ImUserTypeEnum.USER, null, true); } return new SuccessResponseData<>(); } @ApiOperation("开始咨询预约服务") @PostResource(name = "开始咨询预约服务", path = "/counsellingOrderReservation/startCounsellingReservation", requiredPermission = false) @Transactional public ResponseData startCounsellingReservation(Long counsellingOrderReservationId) { CounsellingOrderReservation counsellingOrderReservation = this.counsellingOrderReservationService.getById(counsellingOrderReservationId); counsellingOrderReservation.setServiceBeginTime(new Date()); counsellingOrderReservation.setStauts(3); this.counsellingOrderReservationService.updateById(counsellingOrderReservation); return new SuccessResponseData<>(); } @ApiOperation("完成咨询预约服务") @PostResource(name = "完成咨询预约服务", path = "/counsellingOrderReservation/counsellingReservationSuccess", requiredPermission = false) @Transactional public ResponseData counsellingReservationSuccess(Long counsellingOrderReservationId) { CounsellingOrderReservation counsellingOrderReservation = this.counsellingOrderReservationService.getById(counsellingOrderReservationId); counsellingOrderReservation.setStauts(4); //分钟数 long minute = DateUtil.between(counsellingOrderReservation.getReservationBeginTime(),counsellingOrderReservation.getReservationEndTime(), DateUnit.MINUTE); int ceil = (int) Math.ceil(minute / 60d); counsellingOrderReservation.setConsumeCourseHour(ceil); counsellingOrderReservation.setServiceEndTime(new Date()); counsellingOrderReservation.setServieCompleteTime(new Date()); this.counsellingOrderReservationService.updateById(counsellingOrderReservation); CounsellingOrder counsellingOrder = this.counsellingOrderService.getById(counsellingOrderReservation.getCounsellingOrderId()); //更新咨询用户信息 CounsellingUser counsellingUser = this.counsellingUserService.getOne(new LambdaQueryWrapper().eq(CounsellingUser::getUserId,counsellingOrder.getUserId()).eq(CounsellingUser::getCounsellingInfoId,counsellingOrder.getCounsellingInfoId())); //如果是首次面诊跟新完成状态 if (counsellingOrderReservation.getReservationType().intValue() == 1){ counsellingOrder.setStatusFlag(2); //更新客户是否完成首次咨询预约 this.customerService.update(new LambdaUpdateWrapper().set(Customer::getIsFirstAppointment,1).eq(Customer::getCustomerId,counsellingOrder.getUserId())); counsellingUser.setIsFirstAppointment(3); counsellingUser.setStatusFlag(2); }else { //判断是否完成咨询订单服务 if (counsellingOrder.getResidueClassHours().intValue() - ceil <= 0 ){ counsellingOrder.setStatusFlag(2); } //扣除咨询课时 counsellingOrder.setResidueClassHours(counsellingOrder.getResidueClassHours().intValue() - ceil); counsellingUser.setResidueClassHours(counsellingUser.getResidueClassHours().intValue() - ceil); } this.counsellingUserService.updateById(counsellingUser); this.counsellingOrderService.updateById(counsellingOrder); return new SuccessResponseData<>(); } @ApiOperation("分页查询预约用户信息") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNo", value = "分页:第几页(从1开始)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "pageSize", value = "分页:每页大小(默认10)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "userName", value = "用户名", dataTypeClass = String.class, paramType = "query"), @ApiImplicitParam(name = "phone", value = "联系电话", dataTypeClass = String.class, paramType = "query") } ) @GetResource(name = "分页查询预约用户信息", path = "/counsellingOrder/counsellingOrderReservationPage", requiredPermission = false) public ResponseData> counsellingOrderReservationPage(Integer pageNo, Integer pageSize,String userName, String phone) { CounsellingOrderRequest counsellingOrderRequest = new CounsellingOrderRequest(); counsellingOrderRequest.setCustomerId(LoginContext.me().getLoginUser().getUserId()); counsellingOrderRequest.setPhone(phone); counsellingOrderRequest.setUserName(userName); Page page = this.counsellingOrderService.findWorkCounsellingOrderPage(PageFactory.defaultPage(), counsellingOrderRequest); return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } @ApiOperation("咨询师预约-预约查询-预约记录-分页查询预约用户信息") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNo", value = "分页:第几页(从1开始)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "pageSize", value = "分页:每页大小(默认10)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "userName", value = "用户名", dataTypeClass = String.class, paramType = "query"), @ApiImplicitParam(name = "phone", value = "联系电话", dataTypeClass = String.class, paramType = "query") } ) @GetResource(name = "咨询师预约-预约查询-预约记录-分页查询预约用户信息", path = "/counsellingUser/counsellingUserPage", requiredPermission = false) public ResponseData> counsellingUserPage(Integer pageNo, Integer pageSize,String userName, String phone) { CounsellingUserRequest counsellingUserRequest = new CounsellingUserRequest(); counsellingUserRequest.setCustomerId(LoginContext.me().getLoginUser().getUserId()); counsellingUserRequest.setPhone(phone); counsellingUserRequest.setUserName(userName); Page page = this.counsellingUserService.findCounsellingUserPage(PageFactory.defaultPage(), counsellingUserRequest); return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } @ApiOperation("咨询师后台-客户管理-查询详细-根据工作人员id和用户id查询咨询课程详细信息") @GetResource(name = "咨询师后台-客户管理-查询详细-根据工作人员id和用户id查询咨询课程详细信息", path = "/counsellingUser/getCounsellingUserInfo", requiredPermission = false) @ApiImplicitParams({ @ApiImplicitParam(name = "customerId", value = "工作人员id,不传默认当前id", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "userId", value = "用户id", dataTypeClass = Integer.class, paramType = "query") } ) public ResponseData getCounsellingUserInfo(Long customerId,Long userId) { CounsellingUserRequest counsellingUserRequest = new CounsellingUserRequest(); counsellingUserRequest.setUserId(userId); if (customerId == null){ customerId = LoginContext.me().getLoginUser().getUserId(); } CounsellingInfo counsellingInfo = this.counsellingInfoService.getOne(new LambdaQueryWrapper().eq(CounsellingInfo::getUserId,customerId)); counsellingUserRequest.setCounsellingInfoId(counsellingInfo.getId()); Page page = this.counsellingUserService.findCounsellingUserPage(PageFactory.defaultPage(), counsellingUserRequest); if (CollectionUtil.isNotEmpty(page.getRecords())){ return new SuccessResponseData<>(page.getRecords().get(0)); } return new SuccessResponseData<>(); } @ApiOperation("我的统计信息") @GetResource(name = "我的统计信息", path = "/user/getMyTotalInfo", requiredPermission = false) public ResponseData getMyTotalInfo(){ MyTotalResponseDTO myTotalResponseDTO = new MyTotalResponseDTO(); Long custoemrId = LoginContext.me().getLoginUser().getUserId(); Date nowDate = new Date(); Date todayStartDate = DateUtil.beginOfDay(nowDate); Date todayEndDate = DateUtil.endOfDay(nowDate); Date monthStartDate = DateUtil.beginOfMonth(nowDate); Date monthEndDate = DateUtil.endOfMonth(nowDate); Customer customer = this.customerService.getById(custoemrId); if (StrUtil.isNotBlank(customer.getPostIds()) && StrUtil.isNotBlank(customer.getPostTypes())){ List postIds = Arrays.asList(customer.getPostIds().split(",")); //是否是咨询师 if (postIds.indexOf(PostIdEnum.PO_22.getCode().toString()) != -1){ //查询咨询师id CounsellingInfo counsellingInfo = this.counsellingInfoService.getOne(new LambdaQueryWrapper().eq(CounsellingInfo::getUserId,custoemrId)); if (counsellingInfo != null){ //咨询量 long count = this.counsellingOrderReservationService.count(new LambdaQueryWrapper().eq(CounsellingOrderReservation::getCounsellingInfoId,counsellingInfo.getId()) .eq(CounsellingOrderReservation::getStauts,4)); myTotalResponseDTO.setCounsellingTotal(count); //咨询订单数 long counseOrderNum = this.counsellingOrderService.count(new LambdaQueryWrapper().eq(CounsellingOrder::getCounsellingInfoId,counsellingInfo.getId()).in(CounsellingOrder::getStatusFlag,1,2)); myTotalResponseDTO.setOrderNum(counseOrderNum); //累计收益 Map map = this.counsellingOrderService.getMap(new QueryWrapper().select(" IFNULL(SUM(pay_amount),0) money ").lambda().eq(CounsellingOrder::getCounsellingInfoId,counsellingInfo.getId()).in(CounsellingOrder::getStatusFlag,1,2)); if (map != null){ myTotalResponseDTO.setSumMoney(new BigDecimal(map.get("money").toString())); } //今日咨询课时 Map hourMap = this.counsellingOrderReservationService.getMap(new QueryWrapper().select(" IFNULL(SUM(consume_course_hour),0) num ").lambda().eq(CounsellingOrderReservation::getCounsellingInfoId,counsellingInfo.getId()).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,todayEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,todayStartDate) .eq(CounsellingOrderReservation::getReservationType,2)); if (hourMap != null){ myTotalResponseDTO.setTodayCounsellingHours(Integer.parseInt(hourMap.get("num").toString())); } //今日首次咨询 long firstCount = this.counsellingOrderReservationService.count(new LambdaQueryWrapper().eq(CounsellingOrderReservation::getCounsellingInfoId,counsellingInfo.getId()).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,todayEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,todayStartDate).eq(CounsellingOrderReservation::getReservationType,1)); myTotalResponseDTO.setTodayFirstCounsellingNum(firstCount); //本月咨询课时 Map hourMonthMap = this.counsellingOrderReservationService.getMap(new QueryWrapper().select(" IFNULL(SUM(consume_course_hour),0) num ").lambda().eq(CounsellingOrderReservation::getCounsellingInfoId,counsellingInfo.getId()).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,monthEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,monthStartDate) .eq(CounsellingOrderReservation::getReservationType,2)); if (hourMonthMap != null){ myTotalResponseDTO.setMonthCounsellingHours(Integer.parseInt(hourMonthMap.get("num").toString())); } //本月首次咨询 long firstMonthCount = this.counsellingOrderReservationService.count(new LambdaQueryWrapper().eq(CounsellingOrderReservation::getCounsellingInfoId,counsellingInfo.getId()).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,monthEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,monthStartDate).eq(CounsellingOrderReservation::getReservationType,1)); myTotalResponseDTO.setMonthFirstCounsellingNum(firstMonthCount); } } //是否是陪护教练 if (postIds.indexOf(PostIdEnum.PO_23.getCode().toString()) != -1){ //今日新增培训群量 long todayGroupNum = this.imGroupUserService.count(new LambdaQueryWrapper().eq(ImGroupUser::getIsDelete,0).eq(ImGroupUser::getUserId,custoemrId) .le(ImGroupUser::getCreateTime,todayEndDate).gt(ImGroupUser::getCreateTime,todayStartDate)); myTotalResponseDTO.setTodayGroupNum(todayGroupNum); //本月新增培训群量 long monthGroupNum = this.imGroupUserService.count(new LambdaQueryWrapper().eq(ImGroupUser::getIsDelete,0).eq(ImGroupUser::getUserId,custoemrId) .le(ImGroupUser::getCreateTime,monthEndDate).gt(ImGroupUser::getCreateTime,monthStartDate)); myTotalResponseDTO.setMonthGroupNum(monthGroupNum); } //是否是咨询顾问 if (postIds.indexOf(PostIdEnum.PO_21.getCode().toString()) != -1){ //咨询量 long count = this.counsellingOrderReservationService.count(new LambdaQueryWrapper().eq(CounsellingOrderReservation::getConsultantUserId,custoemrId) .eq(CounsellingOrderReservation::getStauts,4)); myTotalResponseDTO.setCounsellingTotal(count); //咨询订单数 long counseOrderNum = this.counsellingOrderService.count(new LambdaQueryWrapper().eq(CounsellingOrder::getConsultantUserId,custoemrId).in(CounsellingOrder::getStatusFlag,1,2)); myTotalResponseDTO.setOrderNum(counseOrderNum); //累计收益 Map map = this.counsellingOrderService.getMap(new QueryWrapper().select(" IFNULL(SUM(pay_amount),0) money ").lambda().eq(CounsellingOrder::getConsultantUserId,custoemrId).in(CounsellingOrder::getStatusFlag,1,2)); if (map != null){ myTotalResponseDTO.setSumMoney(new BigDecimal(map.get("money").toString())); } //今日咨询课时 Map hourMap = this.counsellingOrderReservationService.getMap(new QueryWrapper().select(" IFNULL(SUM(consume_course_hour),0) num ").lambda().eq(CounsellingOrderReservation::getConsultantUserId,custoemrId).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,todayEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,todayStartDate)); if (hourMap != null){ myTotalResponseDTO.setTodayCounsellingHours(Integer.parseInt(hourMap.get("num").toString())); } //今日首次咨询 long firstCount = this.counsellingOrderReservationService.count(new LambdaQueryWrapper().eq(CounsellingOrderReservation::getConsultantUserId,custoemrId).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,todayEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,todayStartDate).eq(CounsellingOrderReservation::getReservationType,1)); myTotalResponseDTO.setTodayFirstCounsellingNum(firstCount); //本月咨询课时 Map hourMonthMap = this.counsellingOrderReservationService.getMap(new QueryWrapper().select(" IFNULL(SUM(consume_course_hour),0) num ").lambda().eq(CounsellingOrderReservation::getConsultantUserId,custoemrId).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,monthEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,monthStartDate)); if (hourMonthMap != null){ myTotalResponseDTO.setMonthCounsellingHours(Integer.parseInt(hourMonthMap.get("num").toString())); } //本月首次咨询 long firstMonthCount = this.counsellingOrderReservationService.count(new LambdaQueryWrapper().eq(CounsellingOrderReservation::getConsultantUserId,custoemrId).in(CounsellingOrderReservation::getStauts,4) .le(CounsellingOrderReservation::getServieCompleteTime,monthEndDate).gt(CounsellingOrderReservation::getServieCompleteTime,monthStartDate).eq(CounsellingOrderReservation::getReservationType,1)); myTotalResponseDTO.setMonthFirstCounsellingNum(firstMonthCount); } //是否是课程辅导 if (postIds.indexOf(PostIdEnum.PO_12.getCode().toString()) != -1){ //今日新增培训群量 long todayGroupNum = this.imGroupUserService.count(new LambdaQueryWrapper().eq(ImGroupUser::getIsDelete,0).eq(ImGroupUser::getUserId,custoemrId) .le(ImGroupUser::getCreateTime,todayEndDate).gt(ImGroupUser::getCreateTime,todayStartDate)); myTotalResponseDTO.setTodayGroupNum(todayGroupNum); //本月新增培训群量 long monthGroupNum = this.imGroupUserService.count(new LambdaQueryWrapper().eq(ImGroupUser::getIsDelete,0).eq(ImGroupUser::getUserId,custoemrId) .le(ImGroupUser::getCreateTime,monthEndDate).gt(ImGroupUser::getCreateTime,monthStartDate)); myTotalResponseDTO.setMonthGroupNum(monthGroupNum); //课程订单数量 long courseNum = this.courseOrderService.count(new LambdaQueryWrapper().eq(CourseOrder::getTutoringUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2)); myTotalResponseDTO.setOrderNum(courseNum); //累计收益 Map map = this.courseOrderService.getMap(new QueryWrapper().select(" IFNULL(SUM(pay_amount),0) money ").lambda().eq(CourseOrder::getTutoringUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2)); if (map != null){ myTotalResponseDTO.setSumMoney(new BigDecimal(map.get("money").toString())); } } //是否是幸福顾问 if (postIds.indexOf(PostIdEnum.PO_11.getCode().toString()) != -1){ //课程订单数量 long courseNum = this.courseOrderService.count(new LambdaQueryWrapper().eq(CourseOrder::getCourseUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2)); myTotalResponseDTO.setOrderNum(courseNum); //累计收益 Map map = this.courseOrderService.getMap(new QueryWrapper().select(" IFNULL(SUM(pay_amount),0) money ").lambda().eq(CourseOrder::getCourseUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2)); if (map != null){ myTotalResponseDTO.setSumMoney(new BigDecimal(map.get("money").toString())); } //今日课程订单 long courseTodayNum = this.courseOrderService.count(new LambdaQueryWrapper().eq(CourseOrder::getCourseUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2) .le(CourseOrder::getCreateTime,todayEndDate).gt(CourseOrder::getCreateTime,todayStartDate)); myTotalResponseDTO.setTodayCourseOrderNum(courseTodayNum); //本月课程订单 long courseMonthNum = this.courseOrderService.count(new LambdaQueryWrapper().eq(CourseOrder::getCourseUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2) .le(CourseOrder::getCreateTime,monthEndDate).gt(CourseOrder::getCreateTime,monthStartDate)); myTotalResponseDTO.setMonthCourseOrderNum(courseMonthNum); //查询课程标签 List courseTags = this.courseTagService.list(new LambdaQueryWrapper().eq(CourseTag::getIsDelete,0)); List courseOrderList = this.courseOrderService.list(new LambdaQueryWrapper().select(CourseOrder::getCourseId,CourseOrder::getCourseJson).eq(CourseOrder::getCourseUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2) .le(CourseOrder::getCreateTime,todayEndDate).gt(CourseOrder::getCreateTime,todayStartDate)); List courseMonthOrderList = this.courseOrderService.list(new LambdaQueryWrapper().select(CourseOrder::getCourseId,CourseOrder::getCourseJson).eq(CourseOrder::getCourseUserId,custoemrId).in(CourseOrder::getStatusFlag,1,2) .le(CourseOrder::getCreateTime,monthEndDate).gt(CourseOrder::getCreateTime,monthStartDate)); if (CollectionUtil.isNotEmpty(courseTags) && CollectionUtil.isNotEmpty(courseMonthOrderList)){ Map todayMap = new HashMap<>(); Map monthMap = new HashMap<>(); courseTags.forEach(courseTag -> { //今日的 if (CollectionUtil.isNotEmpty(courseOrderList)){ courseOrderList.forEach(courseOrder -> { Course course = JSONUtil.toBean(courseOrder.getCourseJson(),Course.class); List tages = Arrays.asList(course.getCourseTagIds().split(",")); if (tages.contains(courseTag.getId().toString())){ Integer num = todayMap.get(courseTag.getTagName()+"课程"); if (num == null){ num = 1; todayMap.put(courseTag.getTagName()+"课程",num); }else{ todayMap.put(courseTag.getTagName()+"课程",num++); } } }); } //今月 if (CollectionUtil.isNotEmpty(courseMonthOrderList)){ courseMonthOrderList.forEach(courseOrder -> { Course course = JSONUtil.toBean(courseOrder.getCourseJson(),Course.class); List tages = Arrays.asList(course.getCourseTagIds().split(",")); if (tages.contains(courseTag.getId().toString())){ Integer num = monthMap.get(courseTag.getTagName()+"课程"); if (num == null){ num = 1; monthMap.put(courseTag.getTagName()+"课程",num); }else{ monthMap.put(courseTag.getTagName()+"课程",num++); } } }); } }); myTotalResponseDTO.setTodayCourseMap(todayMap); myTotalResponseDTO.setMonthCourseMap(monthMap); } } // 是否是性格分析师 if (postIds.indexOf(PostIdEnum.PO_31.getCode().toString()) != -1) { // 订单数 long courseNum = this.orderConsultOneService.count( new LambdaQueryWrapper().eq(OrderConsultOne::getGoodsId, custoemrId).in(OrderConsultOne::getStatusFlag, 1) ); myTotalResponseDTO.setOrderNumP31(courseNum); // 累计收益 Map map = this.orderConsultOneService.getMap( new QueryWrapper().select(" IFNULL(SUM(pay_amount),0) money ").lambda().eq(OrderConsultOne::getGoodsId, custoemrId).in(OrderConsultOne::getStatusFlag, 1) ); if (map != null) { myTotalResponseDTO.setSumMoneyP31(new BigDecimal(map.get("money").toString())); } // 今日咨询群量 long todayGroupNum = this.orderConsultOneService.count( new LambdaQueryWrapper() .eq(OrderConsultOne::getIsDelete, 0) .eq(OrderConsultOne::getGoodsId, custoemrId) .gt(OrderConsultOne::getCreateTime, todayStartDate) .le(OrderConsultOne::getCreateTime, todayEndDate) ); myTotalResponseDTO.setTodayNumP31(todayGroupNum); // 本月咨询群量 long monthGroupNum = this.orderConsultOneService.count( new LambdaQueryWrapper() .eq(OrderConsultOne::getIsDelete, 0) .eq(OrderConsultOne::getGoodsId, custoemrId) .le(OrderConsultOne::getCreateTime, monthEndDate) .gt(OrderConsultOne::getCreateTime, monthStartDate) ); myTotalResponseDTO.setMonthNumP31(monthGroupNum); } } return new SuccessResponseData<>(myTotalResponseDTO); } @ApiOperation("随机客服人员") @GetResource(name = "随机客服人员", path = "/randomServicePersonnel", requiredPermission = false) @ApiImplicitParams({ @ApiImplicitParam(name = "lineStatus", value = "在线状态,0在线,1离线,2登出", dataTypeClass = String.class), }) public ResponseData randomServicePersonnel(String lineStatus) { Customer customer = customerService.randomWorkerByLineStatusAndPost(lineStatus, null, PostIdEnum.PO_41.getCode(), CustomerWorkStatusEnum.ON_WORK.getCode()); CustomerInfo customerInfo = null; if (customer != null) { customerInfo = BeanUtil.toBean(customer, CustomerInfo.class); } return new SuccessResponseData<>(customerInfo); } @ApiOperation("工作人员_重置密码") @PostResource(name = "工作人员_重置密码", path = RuleConstants.NOT_LOGIN + "/sysUser/resetPwd", requiredPermission = false) @BusinessLog public ResponseData resetPwd(@RequestBody SysUserResetPwdRequest req) { return sysUserBusinessService.resetPwd(req); } @ApiOperation("工作人员_ID重置密码") @PostResource(name = "工作人员_ID重置密码", path = "/sysUser/resetPwdById", requiredPermission = false) @BusinessLog public ResponseData resetPwdById(@RequestBody SysUserResetPwdByIdRequest req) { return sysUserBusinessService.resetPwdById(req); } }