提交 1ae40df2 作者: 刘明祎-运维用途

Merge branch 'master' of ssh://git.mmcuav.cn:8222/iuav/cms

流水线 #8248 已通过 于阶段
in 2 分 15 秒
package com.mmc.iuav.user.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mmc.iuav.user.model.vo.CompanyInfoVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
......
package com.mmc.iuav.user.model.qo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author han
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageUserQO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "页码", required = true, example = "1")
@NotNull(message = "页码不能为空", groups = Page.class)
@Min(value = 1, groups = Page.class)
private Integer pageNo;
@ApiModelProperty(value = "每页显示数", required = true, example = "10")
@NotNull(message = "每页显示数不能为空", groups = Page.class)
@Min(value = 1, groups = Page.class)
private Integer pageSize;
@ApiModelProperty(value = "接收方用户ID")
private Integer receiverUserId;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
}
......@@ -95,5 +95,6 @@ public class UserAccountVO implements Serializable {
@ApiModelProperty(value = "用户对应的后台用户id")
private Integer backUserId;
@ApiModelProperty(value = "密码")
private String password;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author han
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserMessageVO implements Serializable {
private static final long serialVersionUID = 973044768156590099L;
@ApiModelProperty(value = "接收方用户ID")
private Integer receiverUserId;
@ApiModelProperty(value = "消息内容")
private String content;
@ApiModelProperty(value = "发送的图片")
private String imgUrl;
}
package com.mmc.iuav.user.model.vo;
import com.mmc.iuav.group.Insert;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/16 13:56
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WebRegisterVO implements Serializable {
private static final long serialVersionUID = 2500957724470423989L;
@ApiModelProperty(value = "手机号")
@NotNull(message = "手机号不能为空", groups = {Insert.class})
private String phoneNum;
@ApiModelProperty(value = "密码")
@NotNull(message = "密码不能为空", groups = {Insert.class})
private String password;
@ApiModelProperty(value = "请求code")
@NotNull(message = "验证码不能为空", groups = {Insert.class})
private String code;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/16 15:17
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WebUserSucVO implements Serializable {
private static final long serialVersionUID = 7491711282161485720L;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "token")
private String token;
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "昵称")
private String nickName;
}
......@@ -51,7 +51,14 @@ public class HttpsRequestUtil {
if (conn.getResponseCode() == 200) {
rsp = getStreamAsString(conn.getInputStream(), "utf-8");
} else {
rsp = getStreamAsString(conn.getErrorStream(), "utf-8");
// rsp = getStreamAsString(conn.getErrorStream(), "utf-8");
InputStream errorStream = conn.getErrorStream();
if (errorStream != null) {
rsp = getStreamAsString(errorStream, "utf-8");
} else {
// 处理没有错误流的情况,例如返回默认错误信息
rsp = "Invalid Result - invalid business license";
}
}
} catch (Exception e) {
if (null != out) {
......
......@@ -75,7 +75,7 @@ public enum ResultEnum implements BaseErrorInfoInterface {
VALIDATION_INFO_EXPIRED("32815", "认证时间过长信息过期或认证信息不完整,请重新开始认证"),
REAL_IMAGE_AUTHENTICATION_SUCESS("38844", "验证成功"),
REAL_IMAGE_AUTHENTICATION_FAILED("38855", "验证失败,请再次进行人脸识别"),
IDENTITY_HAS_BEEN_AUTHENTICATED("34444", "此身份证信息已经被认证,请重试"),
IDENTITY_HAS_BEEN_AUTHENTICATED("34444", "此身份证信息已经被认证,已经帮你更换为当前用户"),
REAL_NAME_ACCOUNT_ID_ERROR("36771", "账户id错误"),
REAL_NAME_FUSING_ERROR("36772", "认证失败,请重新认证"),
......
......@@ -112,7 +112,10 @@
<artifactId>hutool-all</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
<build>
......@@ -127,4 +130,4 @@
</plugins>
</build>
</project>
\ No newline at end of file
</project>
......@@ -7,10 +7,7 @@ import com.mmc.iuav.user.dao.RoleDao;
import com.mmc.iuav.user.entity.RoleInfoDO;
import com.mmc.iuav.user.enums.UserTypeEnums;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.BackUserAccountVO;
import com.mmc.iuav.user.model.vo.CompanyInfoVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.*;
import com.mmc.iuav.user.service.CompanyService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -52,6 +49,20 @@ public class AuthHandler {
.nickName(userAccountVO.getNickName()).userAccountId(userAccountVO.getId()).portType(UserTypeEnums.APP.getType()).build();
return appUserSucVO;
}
public WebUserSucVO addWebLoginCache(UserAccountVO userAccountVO) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(JwtConstant.USER_ACCOUNT_ID, userAccountVO.getId());
map.put(JwtConstant.TOKEN_TYPE, JwtConstant.IUAV_TOKEN);
String token = JwtUtil.createJwt(map);
LoginSuccessDTO loginSuccessDTO = LoginSuccessDTO.builder().token(token).userAccountId(userAccountVO.getId())
.phoneNum(userAccountVO.getPhoneNum()).portType(UserTypeEnums.APP.getType()).build();
stringRedisTemplate.opsForValue().set(
token, JSONObject.toJSONString(loginSuccessDTO),
JwtConstant.EXPIRATION, TimeUnit.MILLISECONDS);
WebUserSucVO webUserSucVO = WebUserSucVO.builder().token(token).phoneNum(userAccountVO.getPhoneNum())
.nickName(userAccountVO.getNickName()).userAccountId(userAccountVO.getId()).build();
return webUserSucVO;
}
public LoginSuccessDTO addPcLoginCache(BackUserAccountVO user) {
// 查询单位信息
......
package com.mmc.iuav.user.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis的配置类
* 修改redis序列化对象时 key-value的序列化方式
*
* @author han
* @date 2023/08/09
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 关联redis工厂
redisTemplate.setConnectionFactory(factory);
// 设置key的序列化方式
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
return redisTemplate;
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.AppUserSucVO;
import com.mmc.iuav.user.model.vo.WebRegisterVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.service.AuthService;
import com.mmc.iuav.user.service.UserAccountService;
import com.mmc.iuav.user.util.SmsUtil;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @author: zj
* @Date: 2023/5/15 15:50
......@@ -26,7 +36,10 @@ public class AuthController {
private AuthService authService;
@Autowired
private UserAccountService userAccountService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private UserServiceDao userServiceDao;
@ApiOperation(value = "小程序登录/注册")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = AppUserSucVO.class)})
@PostMapping("appletLogin")
......@@ -56,4 +69,36 @@ public class AuthController {
String unionId = userAccountService.selectUnionIdByPhone(phone);
return authService.testAppletLogin(unionId);
}
@ApiOperation(value = "web注册获取手机号验证码")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("getVerifyCode")
public ResultBody getVerifyCode(@RequestParam(value = "phoneNum") String phoneNum) {
if(phoneNum == null){
return ResultBody.error("手机号不能为空");
}
// 根据手机号生成验证码
String verifyCode = CodeUtil.getRandomNum(6);
// 发送给用户
SmsUtil.verifyCode(verifyCode, phoneNum);
Map<String, String> redisData = new HashMap<>();
redisData.put("phoneNum", phoneNum);
redisData.put("verifyCode", verifyCode);
stringRedisTemplate.opsForHash().putAll(verifyCode + phoneNum, redisData);
stringRedisTemplate.expire(verifyCode + phoneNum, 120, TimeUnit.SECONDS);
return ResultBody.success();
}
@ApiOperation(value = "web端注册")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = AppUserSucVO.class)})
@PostMapping("webRegister")
public ResultBody webRegister(@Validated(value = {Insert.class}) @RequestBody WebRegisterVO webRegisterVO) {
return authService.webRegister(webRegisterVO);
}
@ApiOperation(value = "web端账号密码登录")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = LoginSuccessDTO.class)})
@PostMapping("webLogin")
public ResultBody webLogin(
@ApiParam(value = "账号登录QO", required = true) @Validated @RequestBody LoginUserQO param) {
return authService.webLogin(param);
}
}
......@@ -58,7 +58,13 @@ public abstract class BaseController {
if (StringUtils.isBlank(json)){
throw new BizException(ResultEnum.LOGIN_ACCOUNT_STATUS_ERROR);
}
// 版本问题,需要修改json字符串,去除最外侧""和转义\
if (json.startsWith("\"") && json.endsWith("\"")) {
json = json.substring(1, json.length() - 1);
}
json = json.replace("\\","");
LoginSuccessDTO loginSuccessDTO = JSONObject.parseObject(json, LoginSuccessDTO.class);
return loginSuccessDTO;
}
}
......@@ -67,6 +67,7 @@ public class CompanyController extends BaseController {
return companyService.getCompanyInfoByBUId(backUserAccountId);
}
@ApiOperation(value = "单位列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = CompanyInfoVO.class)})
@PostMapping("listCompanyPage")
......
......@@ -2,10 +2,11 @@ package com.mmc.iuav.user.controller;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.qo.MessageQO;
import com.mmc.iuav.user.model.qo.MessageUserQO;
import com.mmc.iuav.user.model.vo.SystemMessageVO;
import com.mmc.iuav.user.model.vo.UserMessageVO;
import com.mmc.iuav.user.service.MessageService;
import io.swagger.annotations.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
......@@ -67,4 +68,38 @@ public class MessageController extends BaseController{
Integer userId = this.getUserLoginInfoFromRedis(request).getUserAccountId();
return messageService.removeMessageByUser(userId,messageId);
}
@ApiOperation(value = "用户发送消息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/insertUserMessage")
public ResultBody insertUserMessage(HttpServletRequest request,@RequestBody UserMessageVO messageVO){
return messageService.insertUserMessage(messageVO,this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "用户聊天详细信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/selectUserMessage")
public ResultBody selectUserMessage(HttpServletRequest request,@RequestBody MessageUserQO messageQO){
return ResultBody.success(messageService.selectUserMessage(messageQO,this.getUserLoginInfoFromRedis(request).getUserAccountId()));
}
@ApiOperation(value = "用户列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/selectUserList")
public ResultBody selectUserList(HttpServletRequest request){
return messageService.selectUserList(this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "用户列表——用户移除")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("/removeUser")
public ResultBody removeUser(HttpServletRequest request,@ApiParam(value = "接收人ID") @RequestParam Integer receiverUserId){
return messageService.removeUser(this.getUserLoginInfoFromRedis(request).getUserAccountId(),receiverUserId);
}
@ApiOperation(value = "用户撤回消息(三分钟之内可以撤回)")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("/removeUserMessage")
public ResultBody removeUserMessage(@ApiParam(value = "消息ID") @RequestParam Integer id){
return messageService.removeUserMessage(id);
}
}
......@@ -96,6 +96,10 @@ public class UserAccountController extends BaseController {
public List<UserAccountSimpleDTO> feignListAppUserAccount(@ApiParam(value = "账号查询QO", required = true) @RequestBody UserAccountQO userAccountQO) {
return userAccountService.feignListUserAccount(userAccountQO);
}
@PostMapping("feignListAppUserAccount1")
public List<UserAccountSimpleDTO> feignListAppUserAccount1(@ApiParam(value = "账号查询QO", required = true) @RequestBody UserAccountQO userAccountQO) {
return userAccountService.feignListUserAccount(userAccountQO);
}
@ApiOperation(value = "根据用户ids上级推荐人信息", hidden = true)
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserAccountSimpleDTO.class)})
......
package com.mmc.iuav.user.controller;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.UserSubInfoDO;
import com.mmc.iuav.user.model.vo.WxMsgVO;
import com.mmc.iuav.user.service.WxService;
import com.mmc.iuav.user.util.WxApiUtil;
......@@ -13,6 +15,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author: zj
......
......@@ -75,8 +75,8 @@ public class PilotCertificationController extends BaseController {
@ApiOperation(value = "小程序——详情————飞手执照及能力认证")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = PilotCertificationDTO.class)})
@GetMapping("/detailPilot")
public ResultBody<PilotCertificationDTO> detailPilot(HttpServletRequest request, @RequestParam(value = "id", required = true) Integer id) {
return ResultBody.success(certificationService.detailPilot(id));
public ResultBody detailPilot(HttpServletRequest request, @RequestParam(value = "id", required = true) Integer id) {
return certificationService.detailPilot(id);
}
@ApiOperation(value = "小程序——用户详情————飞手执照及能力认证")
......@@ -115,8 +115,8 @@ public class PilotCertificationController extends BaseController {
@ApiOperation(value = "后台管理——详情————飞手执照及能力认证")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = PilotCertificationDTO.class)})
@GetMapping("/backDetailPilot")
public ResultBody<PilotCertificationDTO> backDetailPilot(HttpServletRequest request, @RequestParam(value = "id", required = true) Integer id) {
return ResultBody.success(certificationService.detailPilot(id));
public ResultBody backDetailPilot(HttpServletRequest request, @RequestParam(value = "id", required = true) Integer id) {
return certificationService.detailPilot(id);
}
@ApiOperation(value = "后台管理——修改备注————飞手执照及能力认证")
......
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.SystemMessageDO;
import com.mmc.iuav.user.entity.UserMessageDO;
import com.mmc.iuav.user.entity.UserMessageLogDO;
import com.mmc.iuav.user.model.qo.MessageQO;
import com.mmc.iuav.user.model.qo.MessageUserQO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -81,4 +84,33 @@ public interface MessageDao {
* @return
*/
int selectReceiverMessageByDel(@Param("userId") Integer userId,@Param("messageId") Integer messageId);
/**
* 添加用户消息
* @param messageDO
* @return
*/
int insertUserMessage(UserMessageDO messageDO);
List<UserMessageDO> selectUserMessage(@Param("messageQO")MessageUserQO messageQO,@Param("senderUserId")Integer senderUserId);
UserMessageDO selectEndUserMessage(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId")Integer senderUserId);
int countUserMessage(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId") Integer senderUserId);
List<Integer> selectUserListBySenderUserId(@Param("senderUserId")Integer senderUserId);
List<Integer> selectUserListByReceiverUserId(@Param("senderUserId")Integer senderUserId);
int removeUserMessage(Integer id);
int insertUserMessageLog(UserMessageLogDO userMessageLogDO);
Integer isUserMessageLog(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId") Integer senderUserId);
int updateUserMessageLog(@Param("id") Integer logId);
int updateUserMessageCount(@Param("id") Integer logId);
int removeUserMessageCount(@Param("id") Integer logId);
List<UserMessageLogDO> selectUserList(@Param("senderUserId") Integer senderUserId);
void removeUserMessageLog(@Param("id") Integer logId);
UserMessageDO selectUserMessageById(@Param("id") Integer id);
}
......@@ -12,7 +12,7 @@ import java.util.List;
*/
@Mapper
public interface RealNameAuthDao {
int existHasBeenAuth(String unionId, String idNumber);
RealNameAuthDO existHasBeenAuth(String unionId, String idNumber);
RealNameAuthDO getRealNameAuthByUnionId(String unionId);
......
......@@ -35,6 +35,7 @@ public interface UserServiceDao {
* @param userAccountDO
*/
void insertUserAccount(UserAccountDO userAccountDO);
Integer insertUserAccount1(UserAccountDO userAccountDO);
/**
* 根据用户id查询用户信息
......@@ -51,6 +52,7 @@ public interface UserServiceDao {
*/
void update(UserAccountDO userAccountDO);
void updateId(@Param("userAccountDO") UserAccountDO userAccountDO,@Param("newId") Integer newId);
/**
* 查询是否存在这个用户
* @param userId 用户id
......@@ -239,4 +241,20 @@ public interface UserServiceDao {
* 根据手机号查询unionId
*/
String selectUnionIdByPhone(String phone);
/**
* 根据手机号查询用户信息
*
* @param phoneNum
* @return
*/
UserAccountDO getUserByPhoneNum(String phoneNum);
/**
* 删除用户信息
*/
void deleteById(Integer id);
UserAccountDO getUserAccountInfoByPhoneNum(String phoneNum);
}
......@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
public class UserAccountDO implements Serializable {
private static final long serialVersionUID = 5007589179946146721L;
private Integer id;
private Integer newId;
private String uid;
private String phoneNum;
private String userName;
......@@ -88,8 +89,8 @@ public class UserAccountDO implements Serializable {
private String coverPicture;
@ApiModelProperty(value = "地区id")
private Integer districtChildId;
//web端登录密码
private String password;
public UserAccountDO(UserAccountVO userAccountVO) {
this.id = userAccountVO.getId();
this.phoneNum = userAccountVO.getPhoneNum();
......@@ -137,6 +138,7 @@ public class UserAccountDO implements Serializable {
.briefIntroduction(this.briefIntroduction)
.coverPicture(this.coverPicture)
.districtChildId(this.districtChildId)
.password(this.password)
.build();
}
......@@ -154,4 +156,8 @@ public class UserAccountDO implements Serializable {
return TopInviteVO.builder().id(this.id).uid(this.id + "").nickName(this.nickName).userName(this.userName).phoneNum(this.phoneNum)
.inviteCount(this.inviteCount).userImg(this.userImg).build();
}
public UserDO buildUserDO() {
return UserDO.builder().userAccountId(this.id).nickName(this.nickName).userName(this.userName).userImg(this.userImg).phoneNum(this.phoneNum).build();
}
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.TopInviteVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
* @Date: 2023/5/16 17:00
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDO implements Serializable {
private static final long serialVersionUID = 5007589179946146721L;
@ApiModelProperty(value = "用户ID")
private Integer userAccountId;
@ApiModelProperty(value = "用户姓名")
private String userName;
@ApiModelProperty(value = "用户昵称")
private String nickName;
@ApiModelProperty(value = "头像")
private String userImg;
@ApiModelProperty(value = "未读的消息个数")
private Integer unreadCount;
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "最新消息")
private String endMessage;
@ApiModelProperty(value = "最新消息创建时间")
private Date createTime;
}
package com.mmc.iuav.user.entity;
import com.alibaba.fastjson2.annotation.JSONField;
import com.mmc.iuav.user.model.vo.SystemMessageVO;
import com.mmc.iuav.user.model.vo.UserMessageVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author han
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserMessageDO implements Serializable {
private static final long serialVersionUID = 973044768156590099L;
/**
* 消息ID
*/
private Integer id;
/**
* 发送方
*/
private Integer senderUserId;
/**
* 接收方
*/
private Integer receiverUserId;
/**
* 消息内容
*/
private String content;
/**
* 消息图片
*/
private String imgUrl;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
public UserMessageDO(UserMessageVO message) {
this.receiverUserId = message.getReceiverUserId();
this.content = message.getContent();
this.imgUrl = message.getImgUrl();
}
}
package com.mmc.iuav.user.entity;
import com.alibaba.fastjson2.annotation.JSONField;
import com.mmc.iuav.user.model.vo.UserMessageVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author han
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserMessageLogDO implements Serializable {
private static final long serialVersionUID = 973044768156590099L;
/**
* 消息记录ID
*/
private Integer id;
/**
* 发送方
*/
private Integer senderUserId;
/**
* 接收方
*/
private Integer receiverUserId;
/**
* 新消息数量
*/
private Integer messageCount;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date newTime;
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.group.Insert;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.WebRegisterVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author: zj
......@@ -51,4 +55,10 @@ public interface AuthService {
* @return
*/
ResultBody getLoginInfo(String randomLoginCode);
/**
* web端用户注册
*/
ResultBody webRegister(WebRegisterVO webRegisterVO);
ResultBody webLogin(LoginUserQO param);
}
......@@ -2,11 +2,10 @@ package com.mmc.iuav.user.service;
import com.mmc.iuav.page.PageResult;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.SystemMessageDO;
import com.mmc.iuav.user.model.qo.MessageQO;
import com.mmc.iuav.user.model.qo.MessageUserQO;
import com.mmc.iuav.user.model.vo.SystemMessageVO;
import java.util.List;
import com.mmc.iuav.user.model.vo.UserMessageVO;
public interface MessageService {
/**
......@@ -56,4 +55,19 @@ public interface MessageService {
* @return
*/
ResultBody removeMessageByUser(Integer userId, Integer messageId);
/**
* 添加用户消息
* @param messageVO
* @return
*/
ResultBody insertUserMessage(UserMessageVO messageVO,Integer senderUserId);
PageResult selectUserMessage(MessageUserQO messageQO,Integer senderUserId);
ResultBody selectUserList(Integer senderUserId);
ResultBody removeUserMessage(Integer id);
ResultBody removeUser(Integer senderUserId, Integer receiverUserId);
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.BackUserAccountDO;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
......@@ -25,6 +26,7 @@ public interface UserAccountService {
* @return
*/
UserAccountVO getUserAccountInfoByUnionId(String unionId);
UserAccountVO getUserAccountInfoByPhoneNum(String phoneNum);
/**
* Insert the user account
......@@ -187,4 +189,5 @@ public interface UserAccountService {
* 根据手机号查询unionId
*/
String selectUnionIdByPhone(String phone);
}
......@@ -30,7 +30,7 @@ public interface PilotCertificationService {
PageResult pilotList(PilotCertificationQO param);
PilotCertificationDTO detailPilot(Integer id);
ResultBody detailPilot(Integer id);
PilotCertificationDTO userDetailPilot(Integer userAccountId);
......
......@@ -218,8 +218,11 @@ public class PilotCertificationServiceImpl implements PilotCertificationService
@Override
public PilotCertificationDTO detailPilot(Integer id) {
public ResultBody detailPilot(Integer id) {
PilotCertificationDO certificationDO = certificationDao.detailPilot(id);
if(certificationDO.getBirthday() == null){
return ResultBody.error("请先进行实名认证");
}
int yearsOfWorking = 0;
yearsOfWorking = getYearsOfWorking(certificationDO.getTimeOfApplication());
Integer Working = certificationDO.getYearsOfWorking();
......@@ -236,7 +239,7 @@ public class PilotCertificationServiceImpl implements PilotCertificationService
pilotCertificationDTO.setBackUserId(flyingTeam.getBackUserId());
pilotCertificationDTO.setMessageId(flyingTeam.getMessageId());
}
return pilotCertificationDTO;
return ResultBody.success(pilotCertificationDTO);
}
@Override
......@@ -354,7 +357,9 @@ public class PilotCertificationServiceImpl implements PilotCertificationService
if(touser != null){
JSONObject jsonObject = spellMsg("飞手执照及能力认证","审核通过");
ws.setTouser(touser);
ws.setTemplateId("9qvgBhfW9yoQJY91iMfhrog8y5eZUPSbo9PLvQzS_vk");
// ws.setTemplateId("9qvgBhfW9yoQJY91iMfhrog8y5eZUPSbo9PLvQzS_vk");
// 新的公众号消息模版
ws.setTemplateId("4s0xcovQfT89MYPkUEesBsPD_ONRMPsx_9jxi61Qd-c");
ws.setDataObject(jsonObject);
wxService.sendSubTemplateMsg(ws);
}
......
......@@ -36,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
......@@ -94,6 +95,7 @@ public class AuthServiceImpl implements AuthService {
String unionId;
String openId;
String sessionKey;
log.info("登录信息:{}", wxLoginVO);
log.info("上级推荐人:{}", wxLoginVO.getRcdUserId());
if (wxLoginVO.getFromPort().toString().equals(WxConstant.APP.toString())) {
//调用小程序登录接口,里面包含unionId
......@@ -123,17 +125,19 @@ public class AuthServiceImpl implements AuthService {
userAccountDO.setOpenId(openId);
userAccountDO.setPortType(100);
userAccountDO.setSource(wxLoginVO.getSource());
userAccountService.insertUserAccount(userAccountDO);
// userAccountService.insertUserAccount(userAccountDO);
userServiceDao.insertUserAccount(userAccountDO);
userAccountVO = userAccountDO.buildUserAccountVO();
// 创建用户钱包
payWalletService.initPayWallet(userAccountDO.getId());
payClient.createWallet(userAccountDO.getId());
// 查询之前有没有实名过
RealNameAuthDO nameAuthByUnionId = realNameAuthDao.getRealNameAuthBakByUnionId(unionId);
RealNameAuthDO nameAuthByUnionId = realNameAuthDao.getRealNameAuthByUnionId(unionId);
if (nameAuthByUnionId != null) {
nameAuthByUnionId.setUserAccountId(userAccountDO.getId());
nameAuthByUnionId.setId(null);
realNameAuthDao.addRealNameAuth(nameAuthByUnionId);
// nameAuthByUnionId.setId(null);
realNameAuthDao.updateRealNameAuth(nameAuthByUnionId);
}
log.info("用户的id是=====》{}",userAccountDO.getId());
} else {
......@@ -262,6 +266,67 @@ public class AuthServiceImpl implements AuthService {
return ResultBody.success(loginSuccessDTO);
}
@Override
public ResultBody webRegister(WebRegisterVO webRegisterVO) {
Map<Object, Object> redisData = stringRedisTemplate.opsForHash().entries(webRegisterVO.getCode() + webRegisterVO.getPhoneNum());
if (redisData.isEmpty()) {
return ResultBody.error("验证码错误,请重新输入");
}
String code = redisData.get("verifyCode").toString();
String phoneNum = redisData.get("phoneNum").toString();
// 验证码错误则修改失败,并提醒
if (!code.equals(webRegisterVO.getCode())) {
return ResultBody.error("验证码错误,请重新输入");
}
UserAccountDO userAccountDO = userServiceDao.getUserByPhoneNum(phoneNum);
// 小程序未登录过或者未绑定过手机号
if (userAccountDO == null){
userAccountDO = new UserAccountDO();
userAccountDO.setPhoneNum(webRegisterVO.getPhoneNum());
try {
userAccountDO.setPassword(PwdUtil.securityPwd(webRegisterVO.getPassword()));
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CREATE_ERROR);
}
userServiceDao.insertUserAccount1(userAccountDO);
userAccountDO.setNickName("云享飞用户_"+ userAccountDO.getId());
userAccountDO.setUserImg("https://file.iuav.com/file/sharefly-logo-2024.png");
userServiceDao.update(userAccountDO);
}else if(userAccountDO.getPassword() == null){
//小程序登录过且绑定过手机号
try {
userAccountDO.setPassword(PwdUtil.securityPwd(webRegisterVO.getPassword()));
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CREATE_ERROR);
}
userServiceDao.update(userAccountDO);
}else{
return ResultBody.error("已经注册过,请直接登录");
}
return ResultBody.success();
}
@Override
public ResultBody webLogin(LoginUserQO param) {
UserAccountVO user = userAccountService.getUserAccountInfoByPhoneNum(param.getAccountNo());
//查询用户信息
// BackUserAccountDO user = backUserAccountService.getUserLoginInfo(param.getAccountNo(), param.getPassWord());
if (user == null) {
return ResultBody.error(ResultEnum.LOGIN_ACCOUNT_NOT_EXIT_ERROR);
}
String loginPwd = "";
try {
loginPwd = PwdUtil.securityPwd(param.getPassWord());
} catch (NoSuchAlgorithmException e) {
return ResultBody.error(ResultEnum.PWD_CONPARED_ERROR);
}
if (!loginPwd.equals(user.getPassword())) {
return ResultBody.error(ResultEnum.LOGIN_PASSWORD_ERROR);
}
WebUserSucVO webUserSucVO = authHandler.addWebLoginCache(user);
return ResultBody.success(webUserSucVO);
}
private void extracted(Integer id) {
UserPointsVO userPointsVO = new UserPointsVO(id, NumberOfUserPoints.match(0).getMessage());
......
......@@ -3,21 +3,34 @@ package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.page.PageResult;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.MessageDao;
import com.mmc.iuav.user.entity.SystemMessageDO;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.entity.*;
import com.mmc.iuav.user.model.qo.MessageQO;
import com.mmc.iuav.user.model.qo.MessageUserQO;
import com.mmc.iuav.user.model.vo.SystemMessageVO;
import com.mmc.iuav.user.model.vo.UserMessageVO;
import com.mmc.iuav.user.service.MessageService;
import com.mmc.iuav.user.util.ScheduledTaskUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
private MessageDao messageDao;
@Autowired
private UserServiceDao userServiceDao;
@Autowired
private ScheduledTaskUtil scheduledTaskUtil;
@Override
public ResultBody insertSystemMessage(SystemMessageVO messageVO) {
SystemMessageDO systemMessageDO = new SystemMessageDO(messageVO);
......@@ -107,4 +120,117 @@ public class MessageServiceImpl implements MessageService {
return ResultBody.error("删除失败");
}
@Override
public ResultBody insertUserMessage(UserMessageVO messageVO,Integer senderUserId) {
UserMessageDO userMessageDO = new UserMessageDO(messageVO);
if(senderUserId == null){
return ResultBody.success("消息发送失败,请先登录");
}
userMessageDO.setSenderUserId(senderUserId);
if(messageDao.insertUserMessage(userMessageDO) != 0){
UserAccountDO userAccount = userServiceDao.getUserAccountById(userMessageDO.getReceiverUserId());
UserDO userDO = userAccount.buildUserDO();
scheduledTaskUtil.create(userDO);
if(messageDao.isUserMessageLog(userMessageDO.getReceiverUserId(), userMessageDO.getSenderUserId()) == null){
UserMessageLogDO userMessageLogDO = new UserMessageLogDO();
userMessageLogDO.setSenderUserId(userMessageDO.getSenderUserId());
userMessageLogDO.setReceiverUserId(userMessageDO.getReceiverUserId());
messageDao.insertUserMessageLog(userMessageLogDO);
}
Integer logId = messageDao.isUserMessageLog(userMessageDO.getSenderUserId(),userMessageDO.getReceiverUserId());
if(logId == null){
UserMessageLogDO userMessageLogDO = new UserMessageLogDO();
userMessageLogDO.setSenderUserId(userMessageDO.getReceiverUserId());
userMessageLogDO.setReceiverUserId(userMessageDO.getSenderUserId());
userMessageLogDO.setMessageCount(1);
messageDao.insertUserMessageLog(userMessageLogDO);
}else {
messageDao.updateUserMessageLog(logId);
}
return ResultBody.success("消息发送成功");
}
return ResultBody.error("消息发送失败");
}
@Override
public PageResult selectUserMessage(MessageUserQO messageQO,Integer senderUserId) {
scheduledTaskUtil.destroy(senderUserId);
int count = messageDao.countUserMessage(messageQO.getReceiverUserId(),senderUserId);
if (count == 0) {
return PageResult.buildPage(messageQO.getPageNo(), messageQO.getPageSize(), count);
}
Integer pageNo = messageQO.getPageNo();
messageQO.buildCurrentPage();
List<UserMessageDO> messageList = messageDao.selectUserMessage(messageQO,senderUserId);
// Integer logId = messageDao.isUserMessageLog(senderUserId,messageQO.getReceiverUserId());
// if(logId != null){
// messageDao.updateUserMessageCount(logId);
// }
Integer logId2 = messageDao.isUserMessageLog(messageQO.getReceiverUserId(),senderUserId);
if(logId2 != null){
messageDao.updateUserMessageCount(logId2);
}
return PageResult.buildPage(pageNo, messageQO.getPageSize(), count, messageList);
}
@Override
public ResultBody selectUserList(Integer senderUserId) {
List<UserDO> userAccountDOList = new ArrayList<>();
List<UserMessageLogDO> list = messageDao.selectUserList(senderUserId);
for (UserMessageLogDO userMessageLogDO : list) {
UserAccountDO userAccount = userServiceDao.getUserAccountById(userMessageLogDO.getReceiverUserId());
UserDO userDO = userAccount.buildUserDO();
userDO.setUnreadCount(userMessageLogDO.getMessageCount());
UserMessageDO userMessageDO = messageDao.selectEndUserMessage(userMessageLogDO.getReceiverUserId(), senderUserId);
if(userMessageDO.getContent() != null){
userDO.setEndMessage(userMessageDO.getContent());
}else {
userDO.setEndMessage(userMessageDO.getImgUrl());
}
userDO.setCreateTime(userMessageDO.getCreateTime());
userAccountDOList.add(userDO);
}
// 使用 Collections.sort() 方法和自定义的比较器进行排序
Collections.sort(userAccountDOList, Comparator.comparing(UserDO::getCreateTime).reversed());
return ResultBody.success(userAccountDOList);
}
@Override
public ResultBody removeUserMessage(Integer id) {
UserMessageDO userMessageDO = messageDao.selectUserMessageById(id);
Date createTime = userMessageDO.getCreateTime();
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime);
if(isOverThreeMinutes(time)){
return ResultBody.error("消息发送已经超过三分钟,撤回失败");
}
if(messageDao.removeUserMessage(id) != 0){
Integer logId = messageDao.isUserMessageLog(userMessageDO.getSenderUserId(),userMessageDO.getReceiverUserId());
if(logId != null){
messageDao.removeUserMessageCount(logId);
}
return ResultBody.success("消息撤回成功已撤回");
}
return ResultBody.error("消息撤回失败");
}
@Override
public ResultBody removeUser(Integer senderUserId, Integer receiverUserId) {
Integer logId = messageDao.isUserMessageLog(receiverUserId,senderUserId);
if(logId != null){
messageDao.removeUserMessageLog(logId);
return ResultBody.success("删除成功");
}
return ResultBody.error("删除失败");
}
public static boolean isOverThreeMinutes(String createTime) {
// 定义日期时间格式化对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将字符串格式的时间转换为 LocalDateTime 对象
LocalDateTime createDateTime = LocalDateTime.parse(createTime, formatter);
// 计算当前时间与创建时间的时间差(单位:秒)
long secondsDiff = ChronoUnit.SECONDS.between(createDateTime, LocalDateTime.now());
// 如果时间差大于 180 秒(即三分钟),返回 true
return secondsDiff > 180;
}
}
......@@ -7,17 +7,21 @@ import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.controller.userpoints.config.NumberOfUserPoints;
import com.mmc.iuav.user.controller.userpoints.config.UserPointsEnum;
import com.mmc.iuav.user.dao.RealNameAuthDao;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.dao.userpoints.UserPointsDao;
import com.mmc.iuav.user.dao.userpoints.UserPointsDetailsDao;
import com.mmc.iuav.user.entity.RealNameAuthDO;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.userpoints.UserPointsDO;
import com.mmc.iuav.user.entity.userpoints.UserPointsDetails;
import com.mmc.iuav.user.model.dto.RealNameAuthDTO;
import com.mmc.iuav.user.model.dto.RealNameAuthDetailDTO;
import com.mmc.iuav.user.model.qo.RealNameAuthQO;
import com.mmc.iuav.user.model.vo.RealNameAuthVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.userpoints.UserPointsVO;
import com.mmc.iuav.user.service.RealNameAuthService;
import com.mmc.iuav.user.service.UserAccountService;
import com.mmc.iuav.user.util.RealNameAuthUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -43,17 +47,23 @@ public class RealNameAuthServiceImpl implements RealNameAuthService {
@Autowired
private UserPointsDetailsDao userPointsDetailsDao;
@Autowired
private UserServiceDao userServiceDao;
@Override
public ResultBody add(RealNameAuthVO realNameAuthVO) {
log.info("RealNameAuthVO:{}", JSONObject.toJSONString(realNameAuthVO));
UserAccountDO userAccountById = userServiceDao.getUserAccountById(realNameAuthVO.getUserAccountId());
realNameAuthVO.setUnionId(userAccountById.getUnionId());
RealNameAuthDO realNameAuthDO0 = realNameAuthDao.getRealNameAuthByUId(realNameAuthVO.getUserAccountId());
if (realNameAuthDO0 != null && realNameAuthDO0.getCheckStatus().equals(1)) {
return ResultBody.error(ResultEnum.REAL_NAME_PASS_ERROR);
}
// 查询是否已认证
int count = realNameAuthDao.existHasBeenAuth(realNameAuthVO.getUnionId(), realNameAuthVO.getIdNumber());
if (count > 0) {
RealNameAuthDO realNameAuthDO1 = realNameAuthDao.existHasBeenAuth(realNameAuthVO.getUnionId(), realNameAuthVO.getIdNumber());
if (realNameAuthDO1 != null) {
realNameAuthDO1.setUserAccountId(realNameAuthVO.getUserAccountId());
realNameAuthDao.updateRealNameAuth(realNameAuthDO1);
return ResultBody.error(ResultEnum.IDENTITY_HAS_BEEN_AUTHENTICATED);
}
// 校验正面
......@@ -84,6 +94,7 @@ public class RealNameAuthServiceImpl implements RealNameAuthService {
realNameAuthDO.setAddress(faceResultJson.getString("address"));
realNameAuthDO.setNationality(faceResultJson.getString("nationality"));
realNameAuthDO.setIssue(backResultJson.getString("issue"));
realNameAuthDO.setUnionId(realNameAuthVO.getUnionId());
if (faceResultJson.getString("sex").equals("男")) {
realNameAuthDO.setSex(1);
......@@ -156,6 +167,11 @@ public class RealNameAuthServiceImpl implements RealNameAuthService {
public ResultBody<RealNameAuthDetailDTO> detail(Integer id) {
RealNameAuthDO realNameAuthDO = realNameAuthDao.getRealNameAuthById(id);
if (realNameAuthDO != null) {
UserAccountDO userAccountById = userServiceDao.getUserAccountById(realNameAuthDO.getUserAccountId());
if(realNameAuthDO.getUnionId() == null || realNameAuthDO.getUnionId().equals("")){
realNameAuthDO.setUnionId(userAccountById.getUnionId());
realNameAuthDao.updateRealNameAuth(realNameAuthDO);
}
return ResultBody.success(realNameAuthDO.buildRealNameAuthDetailDTO());
}
return ResultBody.success();
......@@ -180,6 +196,11 @@ public class RealNameAuthServiceImpl implements RealNameAuthService {
public ResultBody<RealNameAuthDTO> userDetail(Integer userAccountId) {
RealNameAuthDO realNameAuthDO = realNameAuthDao.userDetail(userAccountId);
if (realNameAuthDO != null) {
UserAccountDO userAccountById = userServiceDao.getUserAccountById(realNameAuthDO.getUserAccountId());
if(realNameAuthDO.getUnionId() == null || realNameAuthDO.getUnionId().equals("")){
realNameAuthDO.setUnionId(userAccountById.getUnionId());
realNameAuthDao.updateRealNameAuth(realNameAuthDO);
}
return ResultBody.success(realNameAuthDO.buildRealNameAuthDTO());
}
return ResultBody.success();
......
......@@ -101,8 +101,19 @@ public class UserAccountServiceImpl implements UserAccountService {
}
@Override
public UserAccountVO getUserAccountInfoByPhoneNum(String phoneNum) {
UserAccountDO userAccountDO = userServiceDao.getUserAccountInfoByPhoneNum(phoneNum);
if (userAccountDO != null) {
return userAccountDO.buildUserAccountVO();
}
return null;
}
@Override
public void insertUserAccount(UserAccountDO userAccountDO) {
userServiceDao.insertUserAccount(userAccountDO);
if(userServiceDao.getUserAccountInfoByUnionId(userAccountDO.getUnionId()) == null){
userServiceDao.insertUserAccount(userAccountDO);
}
}
@Override
......@@ -150,7 +161,7 @@ public class UserAccountServiceImpl implements UserAccountService {
userAccountVO.setCompanyInfoVO(companyInfoVO);
}
Integer backUserId = certificationDao.selectBackUserIdByUserId(userAccountId);
log.info("userAccountId {} 用户对应的backUserId=============》{}",userAccountId,backUserId);
// log.info("userAccountId {} 用户对应的backUserId=============》{}",userAccountId,backUserId);
if(backUserId!=null) {
userAccountVO.setBackUserId(backUserId);
}
......@@ -250,6 +261,20 @@ public class UserAccountServiceImpl implements UserAccountService {
// return ResultBody.error(ResultEnum.AUTH_PHONE_NUMBER_ERROR);
// }
UserAccountDO userAccount = new UserAccountDO();
UserAccountDO user = userServiceDao.getUserByPhoneNum(userPhoneNumber);
if(user != null){
userAccount.setNewId(user.getId());
userServiceDao.deleteById(user.getId());
if(user.getPassword() != null){
userAccount.setPassword(user.getPassword());
}
if(user.getNickName() != null){
userAccount.setNickName(user.getNickName());
}
if(user.getUserImg() != null){
userAccount.setUserImg(user.getUserImg());
}
}
userAccount.setId(id);
userAccount.setPhoneNum(userPhoneNumber);
userServiceDao.update(userAccount);
......@@ -573,4 +598,6 @@ public class UserAccountServiceImpl implements UserAccountService {
}
}
......@@ -129,6 +129,7 @@ public class UserPointsServiceImpl implements UserPointsService {
}
UserPointsDO userPointsDO = userPointsDao.selectUserPoints(userId);
if (userPointsDO == null) {
userPointsDO = new UserPointsDO();
userPointsDO.setUserAccountId(userId);
userPointsDO.setTotalPoints(0);
userPointsDao.insertPoints(userPointsDO);
......
......@@ -258,9 +258,12 @@ public class WithdrawalServiceImpl implements WithdrawalService {
UserSubInfoDO info = userSubInfoDao.getUserSubInfoByUnionId(unionId);
if(info != null && info.getOpenId() != null){
String touser = info.getOpenId();
JSONObject jsonObject = spellMsg(applyInfo.getEmpName(), applyInfo.getPayAmount(), applyInfo.getPayAccount());
// JSONObject jsonObject = spellMsg(applyInfo.getEmpName(), applyInfo.getPayAmount(), applyInfo.getPayAccount());
// 新的公众号修改
JSONObject jsonObject = spellMsg(applyInfo.getPayAmount(), applyInfo.getPayAccount());
ws.setTouser(touser);
ws.setTemplateId("y6PHvZownxqR5hf4dSXaa2Lp1jeq3ccytd6G-kUQla4");
// ws.setTemplateId("y6PHvZownxqR5hf4dSXaa2Lp1jeq3ccytd6G-kUQla4");
ws.setTemplateId("imUvk_v7ogKV-LcavombKoFZT1NrSFDAFyMJU-W8bBI");
ws.setDataObject(jsonObject);
wxService.sendSubTemplateMsg(ws);
}
......@@ -306,28 +309,48 @@ public class WithdrawalServiceImpl implements WithdrawalService {
return cashAmountDTO;
}
public JSONObject spellMsg(String empName, Double payAmount, String payAccount){
// public JSONObject spellMsg(String empName, Double payAmount, String payAccount){
// JSONObject data=new JSONObject();
//
// //提现商户:{{keyword1.DATA}}
// JSONObject keyword1=new JSONObject();
// keyword1.put("value",empName);
// data.put("keyword1",keyword1);
//
// //提现金额:{{keyword2.DATA}}
// JSONObject keyword2=new JSONObject();
// keyword2.put("value",payAmount);
// data.put("keyword2",keyword2);
//
// //提现账户:{{keyword3.DATA}}
// JSONObject keyword3=new JSONObject();
// keyword3.put("value",payAccount);
// data.put("keyword3",keyword3);
//
// //处理时间:{{keyword4.DATA}}
// JSONObject keyword4=new JSONObject();
// keyword4.put("value",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
// data.put("keyword4",keyword4);
// return data;
// }
// 新的公众号消息推送
public JSONObject spellMsg(Double payAmount, String payAccount){
JSONObject data=new JSONObject();
//提现商户:{{keyword1.DATA}}
JSONObject keyword1=new JSONObject();
keyword1.put("value",empName);
data.put("keyword1",keyword1);
//提现金额:{{amount1.DATA}}
JSONObject amount1=new JSONObject();
amount1.put("value",payAmount);
data.put("amount1",amount1);
//提现金额:{{keyword2.DATA}}
JSONObject keyword2=new JSONObject();
keyword2.put("value",payAmount);
data.put("keyword2",keyword2);
//提现账户:{{character_string2.DATA}}
JSONObject character_string2=new JSONObject();
character_string2.put("value",payAccount);
data.put("character_string2",character_string2);
//提现账户:{{keyword3.DATA}}
JSONObject keyword3=new JSONObject();
keyword3.put("value",payAccount);
data.put("keyword3",keyword3);
//处理时间:{{keyword4.DATA}}
JSONObject keyword4=new JSONObject();
keyword4.put("value",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
data.put("keyword4",keyword4);
//处理时间:{{time7.DATA}}
JSONObject time7=new JSONObject();
time7.put("value",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
data.put("time7",time7);
return data;
}
......
package com.mmc.iuav.user.util;
import com.mmc.iuav.user.entity.UserDO;
import com.mmc.iuav.user.service.WxService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.TimerTask;
@Component
public class MyTask extends TimerTask implements Serializable {
private UserDO userDO;
// private WxService wxService;
public void setUserDO(UserDO userDO) {
this.userDO = userDO;
}
// public void setWxService(WxService wxService) {
// this.wxService = wxService;
// }
private static final long serialVersionUID = 1L;
@Override
public void run() {
SmsUtil.sendNewMessage(userDO.getPhoneNum());
System.out.println("定时任务执行完毕!");
}
}
package com.mmc.iuav.user.util;
import com.google.gson.Gson;
import com.mmc.iuav.user.entity.UserDO;
import com.mmc.iuav.user.service.WxService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@Component
public class ScheduledTaskUtil {
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private TaskScheduler taskScheduler;
@Autowired
private WxService wxService;
private final Map<Integer, ScheduledFuture<?>> scheduledTasks = new ConcurrentHashMap<>();
public void create(UserDO userDO){
long delay = 600000; // 延迟10分钟开始执行
MyTask task = new MyTask();
task.setUserDO(userDO);
// task.setWxService(wxService);
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.opsForValue().set("task" + userDO.getUserAccountId(), new Gson().toJson(task), delay, TimeUnit.MILLISECONDS);
// 使用TaskScheduler执行定时任务
System.out.println("定时任务已开启");
ScheduledFuture<?> scheduledFuture = taskScheduler.schedule(task, Instant.now().plusMillis(delay));
scheduledTasks.put(userDO.getUserAccountId(), scheduledFuture);
}
public void destroy(Integer userAccountId){
redisTemplate.setValueSerializer(RedisSerializer.json());
String s = redisTemplate.opsForValue().get("task" + userAccountId);
if(s == null || s == ""){
return;
}
MyTask task = new Gson().fromJson(s, MyTask.class);
ScheduledFuture<?> scheduledFuture = scheduledTasks.get(userAccountId);
if (task != null && scheduledFuture != null) {
scheduledFuture.cancel(false);
redisTemplate.delete("task"+userAccountId);
scheduledTasks.remove(userAccountId);
System.out.println("定时任务已取消");
}
}
}
......@@ -29,8 +29,9 @@ public class SmsUtil {
private static String COOPERATION_TEMPLATE_PASS_CODE_6 = "SMS_464380042";
private static String COOPERATION_TEMPLATE_PASS_CODE_7 = "SMS_464335035";
private static String COOPERATION_TEMPLATE_PASS_CODE_8 = "SMS_465080418";
//短信验证码模板
private static String VERIFYCODE="SMS_211825548";
private static String VERIFYCODE="SMS_291570267";
/**
* 加盟审核未通过
......@@ -55,6 +56,10 @@ public class SmsUtil {
return send(CLOUD_JOIN_WEBSITE, COOPERATION_TEMPLATE_PASS_CODE_7, null, phone);
}
//聊天新消息通知
public static String sendNewMessage(String phone) {
return send(CLOUD_JOIN_WEBSITE, COOPERATION_TEMPLATE_PASS_CODE_8, null, phone);
}
public static String send(String TemplateCode, String param, String phone) {
return send(CLOUD_JOIN_WEBSITE, TemplateCode, param, phone);
}
......
......@@ -53,8 +53,11 @@ spring:
wx:
#公众号
sub:
appid: wx5c6a105a0ddca4c5
secret: ${WECHAT_SUB_SECRET}
# appid: wx5c6a105a0ddca4c5
# secret: 96c75255dd26f82f8d55e15b59e101c7
# 新的公众号配置信息
appid: wx50b22db275f8c320
secret: 7b609851705dd22114fff636d0a2fc4a
#小程序
app:
id: wx18b7883acd204278
......
......@@ -22,8 +22,11 @@ spring:
wx:
sub:
appid: wx5c6a105a0ddca4c5
secret: 96c75255dd26f82f8d55e15b59e101c7
# appid: wx5c6a105a0ddca4c5
# secret: 96c75255dd26f82f8d55e15b59e101c7
# 新的公众号配置信息
appid: wx50b22db275f8c320
secret: 7b609851705dd22114fff636d0a2fc4a
app:
id: wx18b7883acd204278
secret: 28afe74ba373830237a8133a7431ee82
......
......@@ -51,8 +51,11 @@ spring:
wx:
sub:
appid: wx5c6a105a0ddca4c5
secret: ${WECHAT_SUB_SECRET}
# appid: wx5c6a105a0ddca4c5
# secret: ${WECHAT_SUB_SECRET}
# 新的公众号配置信息
appid: wx50b22db275f8c320
secret: 7b609851705dd22114fff636d0a2fc4a
app:
id: wx18b7883acd204278
secret: ${WECHAT_APPLET_SECRET}
......
......@@ -4,6 +4,11 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.MessageDao">
<delete id="removeUserMessageLog">
delete from user_message_log
where id = #{id}
</delete>
<select id="selectSystemMessageById" resultType="com.mmc.iuav.user.entity.SystemMessageDO">
select
......@@ -35,6 +40,59 @@
FROM message
where is_deleted = 0
</select>
<select id="selectUserMessage" resultType="com.mmc.iuav.user.entity.UserMessageDO">
SELECT id, img_url, content, sender_user_id, receiver_user_id, create_time
FROM (
SELECT id, img_url, content, sender_user_id, receiver_user_id, create_time
FROM user_message
WHERE is_deleted = 0 AND sender_user_id IN (#{senderUserId} ,#{messageQO.receiverUserId}) AND receiver_user_id IN (#{senderUserId} ,#{messageQO.receiverUserId})
ORDER BY create_time desc
LIMIT #{messageQO.pageNo},#{messageQO.pageSize}
) AS subquery
ORDER BY create_time ASC;
</select>
<select id="countUserMessage" resultType="java.lang.Integer">
select count(*)
from user_message
where is_deleted = 0 and sender_user_id in(#{senderUserId} ,#{receiverUserId}) and receiver_user_id in(#{senderUserId} ,#{receiverUserId})
</select>
<select id="selectUserListBySenderUserId" resultType="java.lang.Integer">
select
distinct receiver_user_id
from user_message
where is_deleted = 0 and sender_user_id = #{senderUserId}
</select>
<select id="selectUserListByReceiverUserId" resultType="java.lang.Integer">
select
distinct sender_user_id
from user_message
where is_deleted = 0 and receiver_user_id = #{senderUserId}
</select>
<select id="isUserMessageLog" resultType="java.lang.Integer">
select id
from user_message_log
where sender_user_id = #{senderUserId} and receiver_user_id = #{receiverUserId} limit 1
</select>
<select id="selectUserList" resultType="com.mmc.iuav.user.entity.UserMessageLogDO">
select *
from user_message_log
where sender_user_id = #{senderUserId}
</select>
<select id="selectUserMessageById" resultType="com.mmc.iuav.user.entity.UserMessageDO">
select
id, img_url, content, sender_user_id,receiver_user_id, create_time
from user_message
where is_deleted = 0 and id = #{id}
</select>
<select id="selectEndUserMessage" resultType="com.mmc.iuav.user.entity.UserMessageDO">
select
id, img_url, content, sender_user_id,receiver_user_id, create_time
from user_message
where is_deleted = 0 and sender_user_id in(#{senderUserId} ,#{receiverUserId}) and receiver_user_id in(#{senderUserId} ,#{receiverUserId})
order by create_time desc
LIMIT 1
</select>
<insert id="insertSystemMessage">
insert into message
<trim prefix="(" suffix=")" suffixOverrides=",">
......@@ -57,6 +115,34 @@
<if test="messageId != null">#{messageId},</if>
</trim>
</insert>
<insert id="insertUserMessage">
insert into user_message
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">sender_user_id,</if>
<if test="receiverUserId != null">receiver_user_id,</if>
<if test="content != null">content,</if>
<if test="imgUrl != null">img_url,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">#{senderUserId,jdbcType=VARCHAR},</if>
<if test="receiverUserId != null">#{receiverUserId,jdbcType=VARCHAR},</if>
<if test="content != null">#{content,jdbcType=VARCHAR},</if>
<if test="imgUrl != null">#{imgUrl,jdbcType=VARCHAR},</if>
</trim>
</insert>
<insert id="insertUserMessageLog">
insert into user_message_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">sender_user_id,</if>
<if test="receiverUserId != null">receiver_user_id,</if>
<if test="messageCount != null">message_count,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">#{senderUserId,jdbcType=VARCHAR},</if>
<if test="receiverUserId != null">#{receiverUserId,jdbcType=VARCHAR},</if>
<if test="messageCount != null">#{messageCount,jdbcType=VARCHAR},</if>
</trim>
</insert>
<update id="removeMessage">
update message
set is_deleted = 1, deleted_time = NOW()
......@@ -82,5 +168,29 @@
id = #{id}
</where>
</update>
<update id="removeUserMessage">
update user_message
set is_deleted = 1, deleted_time = NOW()
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateUserMessageLog">
update user_message_log
set
message_count = message_count + 1,
new_time = NOW()
where id = #{id}
</update>
<update id="updateUserMessageCount">
update user_message_log
set
message_count = 0
where id = #{id}
</update>
<update id="removeUserMessageCount">
update user_message_log
set
message_count = message_count - 1
where id = #{id}
</update>
</mapper>
......@@ -64,6 +64,12 @@
<if test=" remark != null and remark != '' ">
remark = #{remark},
</if>
<if test=" unionId != null and unionId != '' ">
union_id = #{unionId},
</if>
<if test=" userAccountId != null and userAccountId != '' ">
user_account_id = #{userAccountId},
</if>
<if test="createTime !=null">
create_time = NOW(),
</if>
......@@ -77,12 +83,31 @@
where id = #{id}
</update>
<select id="existHasBeenAuth" resultType="java.lang.Integer">
select count(*)
from real_name_auth
where union_id <![CDATA[<>]]> #{unionId}
and id_number = #{idNumber}
and check_status = 1
<select id="existHasBeenAuth" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
select rna.id,
rna.user_account_id,
rna.union_id,
rna.front_id_img,
rna.back_id_img,
rna.id_number,
rna.user_name,
rna.sex,
rna.nationality,
rna.birthday,
rna.address,
rna.issue,
rna.start_date,
rna.end_date,
rna.is_fake_front,
rna.is_fake_back,
rna.check_status,
rna.remark,
rna.create_time
from real_name_auth rna
where rna.id_number = #{idNumber}
and rna.check_status = 1
and rna.is_deleted = 0
limit 1
</select>
<select id="getRealNameAuthByUnionId" resultType="com.mmc.iuav.user.entity.RealNameAuthDO">
......@@ -224,6 +249,7 @@
from real_name_auth rna
where rna.user_account_id = #{userAccountId}
and rna.is_deleted = 0
limit 1
</select>
<select id="getRealNameAuthCount" resultType="java.lang.Integer">
SELECT count(*)
......
......@@ -38,12 +38,53 @@
useGeneratedKeys="true" keyProperty="id">
insert into user_account(phone_num, user_name, nick_name, user_img, open_id,
union_id, user_sex, email, source, province_code, city_code, district_code, remark,
port_type, create_time)
port_type, create_time,password)
values (#{phoneNum}, #{userName}, #{nickName}, #{userImg}, #{openId},
#{unionId}, #{userSex}, #{email}, #{source}, #{provinceCode}, #{cityCode}, #{districtCode}, #{remark},
#{portType}, NOW())
#{portType}, NOW(), #{password})
</insert>
<insert id="insertUserAccount1" parameterType="com.mmc.iuav.user.entity.UserAccountDO"
useGeneratedKeys="true" keyProperty="id">
insert into user_account
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="phoneNum != null">phone_num,</if>
<if test="userName != null">user_name,</if>
<if test="nickName != null">nick_name,</if>
<if test="userImg != null">user_img,</if>
<if test="openId != null">open_id,</if>
<if test="unionId != null">union_id,</if>
<if test="userSex != null">user_sex,</if>
<if test="email != null">email,</if>
<if test="source != null">source,</if>
<if test="provinceCode != null">province_code,</if>
<if test="cityCode != null">city_code,</if>
<if test="districtCode != null">district_code,</if>
<if test="remark != null">remark,</if>
<if test="portType != null">port_type,</if>
<if test="password != null">password,</if>
create_time
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="phoneNum != null">#{phoneNum},</if>
<if test="userName != null">#{userName},</if>
<if test="nickName != null">#{nickName},</if>
<if test="userImg != null">#{userImg},</if>
<if test="openId != null">#{openId},</if>
<if test="unionId != null">#{unionId},</if>
<if test="userSex != null">#{userSex},</if>
<if test="email != null">#{email},</if>
<if test="source != null">#{source},</if>
<if test="provinceCode != null">#{provinceCode},</if>
<if test="cityCode != null">#{cityCode},</if>
<if test="districtCode != null">#{districtCode},</if>
<if test="remark != null">#{remark},</if>
<if test="portType != null">#{portType},</if>
<if test="password != null">#{password},</if>
NOW()
</trim>
</insert>
<insert id="insertUserRcd" parameterType="com.mmc.iuav.user.entity.UserRcdDO">
insert into user_rcd (user_account_id, rcd_user_id, create_time)
values (#{userAccountId}, #{rcdUserId}, NOW());
......@@ -57,6 +98,9 @@
<update id="update" parameterType="com.mmc.iuav.user.entity.UserAccountDO">
update user_account
<set>
<if test="newId != null">
id = #{newId},
</if>
<if test="phoneNum != null">
phone_num = #{phoneNum},
</if>
......@@ -100,20 +144,25 @@
district_child_id=#{districtChildId},
</if>
<if test="briefIntroduction!='' and briefIntroduction!=null">
brief_introduction=#{briefIntroduction}
brief_introduction=#{briefIntroduction},
</if>
<if test="password !='' and password != null">
password=#{password}
</if>
</set>
<where>
id = #{id}
</where>
</update>
<update id="disableUserAccount">
update user_account
set disable = 1,
union_id = #{removeNO}
where id = #{userAccountId}
</update>
<delete id="deleteById">
delete from user_account where id = #{id}
</delete>
<select id="getUserAccountInfoByUnionId" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id,
......@@ -579,10 +628,10 @@
district_child_id=#{districtChildId},
</if>
<if test="briefIntroduction!='' and briefIntroduction!=null">
brief_introduction=#{briefIntroduction},
brief_introduction=#{briefIntroduction}
</if>
</set>
where id=#{id}
where id=#{id} and is_deleted = 0
</update>
<select id="selectUserAccount" resultType="java.lang.Integer"
......@@ -672,5 +721,54 @@
where phone_num = #{phone} and disable = 0
limit 1
</select>
<select id="isPhoneNums" resultType="java.lang.Integer">
select count(*)
from user_account
where phone_num = #{phoneNum} and disable = 0 and password is not null
</select>
<select id="getUserByPhoneNum" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id,
phone_num,
user_name,
nick_name,
user_img,
open_id,
union_id,
user_sex,
email,
source,
account_status,
remark,
port_type,
disable,
create_time,
update_time,
password
from user_account
where phone_num = #{phoneNum} and disable = 0
limit 1
</select>
<select id="getUserAccountInfoByPhoneNum" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id,
phone_num,
user_name,
nick_name,
user_img,
open_id,
union_id,
user_sex,
email,
source,
account_status,
remark,
port_type,
disable,
create_time,
update_time,
password
from user_account
where phone_num = #{phoneNum}
and disable = 0
</select>
</mapper>
......@@ -52,7 +52,7 @@
<select id="selectUserAppSignIn" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO"
resultType="com.mmc.iuav.user.entity.signin.UserAppSignInDO">
select sign_time,sign_in_days ,user_account_id from user_app_sign_in where user_account_id=#{userAccountId}
select sign_time,sign_in_days ,user_account_id from user_app_sign_in where user_account_id=#{userAccountId} limit 1
</select>
<insert id="userAppSignIn" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO">
......
......@@ -44,4 +44,8 @@ data-filter:
- /userapp/company/getCompanyInfoByBUId
- /userapp/user-account/feignGetUserBaseInfo
- /userapp/back-user/getMessage
- /userapp/user-account/feignListAppUserAccount1
- /userapp/auth/getVerifyCode
- /userapp/auth/webRegister
- /userapp/auth/webLogin
......@@ -18,4 +18,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/cms
newTag: 008c6998be2f74b11f35c08e3e30fbcb48408d60
newTag: dc89a6cdd82582e2e1308b924144dd3c8b2253bc
......@@ -18,4 +18,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly/cms
newTag: c0de8847dd111bf9ed3bc4d4f46b0f787f9234b3
newTag: c149144bcb5fcc2f1607278db746cc1e8beaedb9
......@@ -208,4 +208,4 @@
</repository>
</repositories>
</project>
\ No newline at end of file
</project>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论