server/pom.xml
@@ -37,6 +37,7 @@ <jna.version>5.7.0</jna.version> <poi.version>5.0.0</poi.version> <jjwt.version>0.9.1</jjwt.version> <weixin-java-pay.version>4.1.0</weixin-java-pay.version> </properties> <dependencyManagement> <dependencies> @@ -230,6 +231,24 @@ <artifactId>bcprov-jdk15on</artifactId> <version>1.60</version> </dependency> <!-- WeChat å°ç¨åº --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> <version>4.7.0</version> </dependency> <!-- WeChat æ¯ä» --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>${weixin-java-pay.version}</version> </dependency> <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>0.2.12</version> </dependency> <!-- <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-storage-blob</artifactId> server/services/src/main/java/com/doumee/config/jwt/JwtProperties.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.doumee.config.jwt; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @ConfigurationProperties(prefix = "auth.jwt") @Component public class JwtProperties { //æ¯å¦å¼å¯JWTï¼å³æ³¨å ¥ç¸å ³ç类对象 private Boolean enabled; //JWTå¯é¥ private String secret; //JWTæææ¶é´ private Long expiration; //å端ååç«¯ä¼ éJWTæ¶ä½¿ç¨HTTPçheaderåç§°ï¼åå端è¦ç»ä¸ private String header; //ç¨æ·ç»å½-ç¨æ·ååæ°åç§° private String userParamName = "username"; //ç¨æ·ç»å½-å¯ç åæ°åç§° private String pwdParamName = "password"; //æ¯å¦ä½¿ç¨é»è®¤çJWTAuthController private Boolean useDefaultController = false; } server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,137 @@ package com.doumee.config.jwt; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.utils.HttpsUtil; import com.doumee.dao.business.model.Member; import com.doumee.dao.system.SystemUserMapper; import com.doumee.dao.system.model.SystemUser; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; @Component @Slf4j public class JwtTokenUtil { public static final String HEADER_KEY = "token"; public static final String MEMBER_ID = "MEMBER_ID"; public static final String MEMBER_INFO = "MEMBER_INFO"; @Resource private RedisTemplate<String,Object> redisTemplate; @Resource private JwtProperties jwtProperties; /** * çætoken令ç * * @param member 令ç䏿ºå¸¦çéå ä¿¡æ¯ * @return 令tokenç */ public String generateToken(Member member) { if(member == null){ return null; } Map<String,Object> map = new HashMap<>(); map.put("id",member.getId()); return generateTokenDo(member); } public Member getUserInfoByToken(String token) { try { Member member = getClaimsFromToken(token); return member; } catch (Exception e) { e.printStackTrace(); } return null; } /** * å·æ°ä»¤ç * * @param token å令ç * @return æ°ä»¤ç */ public void refreshToken(String token,Member member) { try { if(Objects.nonNull(member)){ redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(member),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS); } } catch (Exception e) { } } /** * éåºç»é * * @param token å令ç * @return æ°ä»¤ç */ public void logoutForH5(String token) { try { //å é¤èçtoken redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token); } catch (Exception e) { e.printStackTrace(); } } /** * ä»claimsçæä»¤ç,妿ç䏿就çè°è°ç¨å® * * @return 令ç */ private String generateTokenDo(Member member) { Map<String, Object> claims = new HashMap<>(); claims.put("id",member.getId()); Date expirationDate = new Date(System.currentTimeMillis() + jwtProperties.getExpiration()); String token = Jwts.builder().setClaims(claims) .setExpiration(expirationDate) .signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret()) .compact(); redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(member),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS); return token; } /** * ä»ä»¤çä¸è·åæ°æ®å£°æ,éªè¯JWTç¾å * * @param token 令ç * @return æ°æ®å£°æ */ private Member getClaimsFromToken(String token) { Member claims; try { String userInfo = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token); claims = JSONObject.toJavaObject(JSONObject.parseObject(userInfo),Member.class); } catch (Exception e) { claims = null; } return claims; } } server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,110 @@ package com.doumee.config.jwt; import com.alibaba.fastjson.JSONObject; import com.doumee.core.annotation.LoginRequired; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.model.Member; import io.jsonwebtoken.JwtException; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.client.RestTemplate; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Objects; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private JdbcTemplate dao; @Resource private JwtTokenUtil jwtTokenUtil; /** * æ·»å æ¦æªå¨ */ @Override public void addInterceptors(InterceptorRegistry registry) { //APIæ¥å£JwtTokenæ¦æªå¨ HandlerInterceptor TokenInterceptor = new HandlerInterceptor() { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 妿䏿¯æ å°å°æ¹æ³ç´æ¥éè¿ if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod = (HandlerMethod) handler; Class<?> beanType = handlerMethod.getBeanType(); // æ @LoginRequired 注解ï¼éè¦ç»å½è®¤è¯ if (beanType.isAnnotationPresent(LoginRequired.class)) { //è·åtoken String token = request.getHeader(JwtTokenUtil.HEADER_KEY); // ä» http 请æ±å¤´ä¸ååº token if (StringUtils.isNotBlank(token)) { checkLogin(request,response); } else { throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"æªç»å½"); } }else if (handlerMethod.hasMethodAnnotation(LoginRequired.class)){ //è·åtoken String token = request.getHeader(JwtTokenUtil.HEADER_KEY); // ä» http 请æ±å¤´ä¸ååº token if (StringUtils.isNotBlank(token)) { checkLogin(request,response); } else { throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"æªç»å½"); } } return true; } }; registry.addInterceptor(TokenInterceptor).addPathPatterns("/web/**"); } public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){ String token = request.getHeader(JwtTokenUtil.HEADER_KEY); try { Member member = jwtTokenUtil.getUserInfoByToken(token); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"é¿æ¶é´æªæä½,è¯·éæ°ç»å½"); } Integer isDeleted = dao.queryForObject(" select COALESCE(isdeleted,1) from member where id = ?", Integer.class, member.getId()); if(isDeleted.equals(Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ç¨æ·å·²å é¤,请è系管çå"); } Integer count = dao.queryForObject("select count(1) from member where id = ?", Integer.class, member.getId()); if (count != null && count > 0) { jwtTokenUtil.refreshToken(token,member); request.setAttribute(JwtTokenUtil.MEMBER_INFO, JSONObject.toJSONString(member)); request.setAttribute(JwtTokenUtil.MEMBER_ID, member.getId()); return true; }else{ throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"ç¨æ·ä¿¡æ¯åºé"); } } catch (IllegalArgumentException | JwtException e) { throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"æªç»å½"); } } @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } } server/services/src/main/java/com/doumee/config/mybatis/SpringUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,69 @@ package com.doumee.config.mybatis; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * NOTICE: NEVER USE IT WHEN REGISTERING A SPRING BEAN. * * @author Guang YANG */ @Component public class SpringUtils implements ApplicationContextAware { private static ApplicationContext CTX; public static ApplicationContext get() { return CTX; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { CTX = applicationContext; } /** * å容å¨ä¸å¨ææ·»å Bean * * @param ctx * @param beanName * @param beanClass */ public static void addBean(ApplicationContext ctx, String beanName, Class beanClass) { BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory)ctx.getAutowireCapableBeanFactory(); BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass); BeanDefinition beanDef = beanDefBuilder.getBeanDefinition(); if (!beanDefReg.containsBeanDefinition(beanName)) { beanDefReg.registerBeanDefinition(beanName, beanDef); } } /** * ä»å®¹å¨ä¸ç§»é¤Bean * * @param ctx * @param beanName */ public static void removeBean(ApplicationContext ctx, String beanName) { BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory) ctx.getAutowireCapableBeanFactory(); beanDefReg.getBeanDefinition(beanName); beanDefReg.removeBeanDefinition(beanName); } /** * éåè¾åºææBeançä¿¡æ¯ */ static void showAllBeans(ApplicationContext ctx) { //éå for (String name : ctx.getBeanDefinitionNames()) { System.out.println("name:" + name + ",class:" + ctx.getBean(name).getClass()); } } } server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,76 @@ package com.doumee.config.wx; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.mybatis.SpringUtils; import com.doumee.core.constants.Constants; import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; /** * 微信å°ç¨åºç»ä»¶ */ @Configuration public class WxMiniConfig { @Autowired private SystemDictDataBiz systemDictDataBiz; /********微信å°ç¨åºæå¡**********/ public static WxMaService wxMaService; /********微信å°ç¨åºæ¯ä»**********/ public static WxPayService wxPayService; public static WxMiniConfig me() { return SpringUtils.get().getBean(WxMiniConfig.class); } @PostConstruct void init() { this.load_WxMaService(); // this.load_wxPayService(); } /** * åå§å微信å°ç¨åº */ public void load_WxMaService() { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode())); config.setSecret(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.SECRET).getCode())); config.setMsgDataFormat("JSON"); //config.setToken(""); //config.setAesKey(""); WxMaService wxMaService = new WxMaServiceImpl(); wxMaService.setWxMaConfig(config); this.wxMaService = wxMaService; } /** * åå§å微信å°ç¨åºæ¯ä» */ // public void load_wxPayService() { // WxPayConfig payConfig = new WxPayConfig(); // payConfig.setTradeType(WxPayConstants.TradeType.JSAPI); // payConfig.setSignType(WxPayConstants.SignType.MD5); // payConfig.setAppId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_AppID.getCode()))); // payConfig.setMchId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchId.getCode()))); // payConfig.setMchKey(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchKey.getCode()))); // payConfig.setKeyPath(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_KeyPath.getCode()))); // payConfig.setNotifyUrl(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_NotifyUrl.getCode()))); // WxPayService wxPayService = new WxPayServiceImpl(); // wxPayService.setConfig(payConfig); // this.wxPayService = wxPayService; // } } server/services/src/main/java/com/doumee/core/annotation/LoginRequired.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.doumee.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface LoginRequired { } server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -42,6 +42,15 @@ public static final String WISDOM_SYSTEM ="WISDOM_SYSTEM" ; public static final String FOOT_WORDS ="FOOT_WORDS" ; public static final String WX_CONFIG ="WX_CONFIG" ; public static final String APPID ="APPID" ; public static final String SECRET ="SECRET" ; public static final String ACCESS_TOKEN ="ACCESS_TOKEN" ; public static final String SERVER_INTRODUCE ="SERVER_INTRODUCE" ; public static final String FEE_STANDARDS ="FEE_STANDARDS" ; public static final String ABOUT_US ="ABOUT_US" ; public static final String QYWX = "QYWX"; public static final Integer ONE = 1; server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -28,7 +28,8 @@ REPEAT_REQUEST(5100, "请å¿éå¤æäº¤"), MASSIVE_REQUEST(5101, "请æ±è¿äºé¢ç¹"), NOT_ALLOWED(5110, "ä¸å 许çæä½"), NO_LOGIN(5112, "æªç»å½"), BE_OVERDUE(5112, "æªç»å½"), TOKEN_EXCEED_TIME(5113, "ç»éå·²è¿æ"), ; private int code; server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
@@ -1,5 +1,6 @@ package com.doumee.dao.business.model; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -55,8 +56,8 @@ @ExcelColumn(name="ç±»å:0=ç¨å·¥èº«ä»½ï¼1=è´§è¿èº«ä»½ï¼2=ä¾é¤èº«ä»½ï¼") private Integer type; @ApiModelProperty(value = "ä¼å鿏", example = "1") @ExcelColumn(name="ä¼å鿏") @ApiModelProperty(value = "ä¼å主é®", example = "1") @ExcelColumn(name="ä¼å主é®") private Integer memberId; @ApiModelProperty(value = "认è¯ç±»å:0=个人ï¼1=ä¼ä¸", example = "1") @@ -87,33 +88,21 @@ @ExcelColumn(name="ç»åº¦") private BigDecimal lgt; @ApiModelProperty(value = "身份è¯äººåé¢") @ExcelColumn(name="身份è¯äººåé¢") private String identityFront; @ApiModelProperty(value = "身份è¯äººåé¢/è¥ä¸æ§ç §") @ExcelColumn(name="身份è¯äººåé¢/è¥ä¸æ§ç §") private String img1; @ApiModelProperty(value = "身份è¯å½å¾½é¢") @ExcelColumn(name="身份è¯å½å¾½é¢") private String identityBack; @ApiModelProperty(value = "è¥ä¸æ§ç §ï¼ä¼ä¸ç±»ä½¿ç¨ï¼") @ExcelColumn(name="è¥ä¸æ§ç §ï¼ä¼ä¸ç±»ä½¿ç¨ï¼") private String businessLicense; @ApiModelProperty(value = "å ¶ä»è®¤è¯èµæï¼ä¼ä¸ç±»ä½¿ç¨ï¼") @ExcelColumn(name="å ¶ä»è®¤è¯èµæï¼ä¼ä¸ç±»ä½¿ç¨ï¼") private String otherFile; @ApiModelProperty(value = "éè·¯è¿è¾ç»éªè®¸å¯è¯ï¼ä¼ä¸ç±»è´§è¿èº«ä»½ä½¿ç¨ï¼") @ExcelColumn(name="éè·¯è¿è¾ç»éªè®¸å¯è¯ï¼ä¼ä¸ç±»è´§è¿èº«ä»½ä½¿ç¨ï¼") private String transportFile; @ApiModelProperty(value = "é£åç»è¥è®¸å¯è¯ï¼ä¼ä¸ç±»ä¾é¤èº«ä»½ä½¿ç¨ï¼") @ExcelColumn(name="é£åç»è¥è®¸å¯è¯ï¼ä¼ä¸ç±»ä¾é¤èº«ä»½ä½¿ç¨ï¼") private String foodBusinessFile; @ApiModelProperty(value = "身份è¯å½å¾½é¢/é路交éè¥è¿è®¸å¯è¯/é£åç»è¥è®¸å¯è¯") @ExcelColumn(name="身份è¯å½å¾½é¢/é路交éè¥è¿è®¸å¯è¯/é£åç»è¥è®¸å¯è¯") private String img2; @ApiModelProperty(value = "ä»ä¸äººåå¥åº·è¯") @ExcelColumn(name="ä»ä¸äººåå¥åº·è¯") private String healthFile; private String img3; @ApiModelProperty(value = "å ¶ä»è®¤è¯èµæ") @ExcelColumn(name="å ¶ä»è®¤è¯èµæ") private String img4; @ApiModelProperty(value = "认è¯å®¡æ¹ç¶æ:1=ç³è¯·ä¸ï¼2=å·²éè¿ï¼3=æªéè¿ï¼", example = "1") @ExcelColumn(name="认è¯å®¡æ¹ç¶æ:1=ç³è¯·ä¸ï¼2=å·²éè¿ï¼3=æªéè¿ï¼") @@ -128,4 +117,7 @@ @ExcelColumn(name="认è¯å®¡æ¹å¤æ³¨") private String auditRemark; @ApiModelProperty(value = "å¾çåç¼") @TableField(exist = false) private String prefix; } server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -1,11 +1,14 @@ package com.doumee.dao.business.model; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import com.doumee.dao.vo.UserCenterVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.models.auth.In; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; @@ -27,7 +30,7 @@ @ApiModelProperty(value = "æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤", example = "1") @ExcelColumn(name="æ¯å¦å·²å é¤ 0æªå é¤ 1å·²å é¤") private Byte deleted; private Integer deleted; @ApiModelProperty(value = "å建人ç¼ç ", example = "1") @ExcelColumn(name="å建人ç¼ç ") @@ -106,7 +109,7 @@ @ApiModelProperty(value = "æ»æ¥åé", example = "1") @ExcelColumn(name="æ»æ¥åé") private Long reciveNum; private Long receiveNum; @ApiModelProperty(value = "æ»ååé", example = "1") @ExcelColumn(name="æ»ååé") @@ -118,7 +121,7 @@ @ApiModelProperty(value = "å®ä½å°å") @ExcelColumn(name="å®ä½å°å") private String localtion; private String location; @ApiModelProperty(value = "纬度", example = "1") @ExcelColumn(name="纬度") @@ -142,6 +145,16 @@ @ApiModelProperty(value = "æ¯å¦æ¥åèªå¨æ´¾å:0=å¦ï¼1=æ¯ï¼", example = "1") @ExcelColumn(name="æ¯å¦æ¥åèªå¨æ´¾å:0=å¦ï¼1=æ¯ï¼") private Integer autoReciveStatus; private Integer autoReceiveStatus; @ApiModelProperty(value = "å½å使ç¨èº«ä»½:0=ç¨å·¥å叿¹;1=ç¨å·¥æ¥åæ¹;", example = "1") @ExcelColumn(name="å½å使ç¨èº«ä»½:0=ç¨å·¥å叿¹;1=ç¨å·¥æ¥åæ¹;") private Integer useIdentity; @ApiModelProperty(value = "æç - æ°æ®ä¿¡æ¯", example = "1") @TableField(exist = false) private UserCenterVO userCenterVO; } server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -1,5 +1,6 @@ package com.doumee.dao.business.model; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; import java.math.BigDecimal; import java.util.List; /** * 订åä¿¡æ¯è®°å½ @@ -131,7 +133,7 @@ @ApiModelProperty(value = "宿¶è´¹ç¨", example = "1") @ExcelColumn(name="宿¶è´¹ç¨") private Long reviceAccount; private Long receiveAccount; @ApiModelProperty(value = "è´¹ç¨è¯´æ") @ExcelColumn(name="è´¹ç¨è¯´æ") @@ -240,6 +242,10 @@ @ApiModelProperty(value = "æ¥åæ¹é»ååmember:id å¤ä¸ªä»¥,åå²") @ExcelColumn(name="æ¥åæ¹é»ååmember:id å¤ä¸ªä»¥,åå²") private String blackRecive; private String blackReceive; @ApiModelProperty @TableField(exist = false) private List<Multifile> multifileList; } server/services/src/main/java/com/doumee/dao/dto/WxPhoneRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.doumee.dao.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotEmpty; import java.io.Serializable; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/3/23 9:50 */ @Data @ApiModel("å¾®ä¿¡ææææºå·è¯·æ±ç±»") public class WxPhoneRequest implements Serializable { @NotEmpty(message = "openid ä¸è½ä¸ºç©º") @ApiModelProperty(value = "openid") private String openid; @NotEmpty(message = "code") @ApiModelProperty(value = "code") private String code; } server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package com.doumee.dao.vo; import com.doumee.core.constants.Constants; import com.doumee.dao.business.model.Member; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/3/23 9:25 */ @Data @ApiModel("ç»å½è¿åç±»") public class AccountResponse implements Serializable { @ApiModelProperty(value = "ç¨æ·token") private String token; @ApiModelProperty(value = "openid") private String openid; @ApiModelProperty(value = "ç¨æ·ä¿¡æ¯") private Member member; } server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.doumee.dao.vo; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2025/7/10 15:09 */ @Data public class UserCenterVO { @ApiModelProperty(value = "åå¸ä»»å¡æ»æ° - ååæ¹ä½¿ç¨") private Integer releaseTaskTotal; @ApiModelProperty(value = "å¾ æ¥å任塿»æ° - ååæ¹ä½¿ç¨") private Integer waitReceiveTotal; @ApiModelProperty(value = "è¿è¡ä¸ä»»å¡æ»æ° - ååæ¹ä½¿ç¨") private Integer doingTotal; @ApiModelProperty(value = "å¾ è¯ä»·ä»»å¡æ»æ° - ååæ¹ä½¿ç¨") private Integer waitCommentTotal; @ApiModelProperty(value = "è¿è¡ä¸ä»»å¡æ°é - æ¥åæ¹ä½¿ç¨") private Integer taskingTotal; @ApiModelProperty(value = "宿任塿°é - æ¥åæ¹ä½¿ç¨") private Integer doneTotal; @ApiModelProperty(value = "å·²æ¥å任塿°é - æ¥åæ¹ä½¿ç¨") private Integer receiveTotal; @ApiModelProperty(value = "æå¡ä»ç»") private String serverIntroduce; @ApiModelProperty(value = "æ¶è´¹æ å") private String feeStandards; @ApiModelProperty(value = "å ³äºæä»¬") private String aboutUs; } server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
@@ -94,4 +94,9 @@ * @return long */ long count(IdentityInfo identityInfo); IdentityInfo findByMemberType(Integer type,Integer memberId); void updateLocation(IdentityInfo identityInfo); } server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -1,9 +1,23 @@ package com.doumee.service.business; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.doumee.config.wx.WxMiniConfig; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Member; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import java.util.Date; import java.util.List; import java.util.Objects; /** * ä¼åä¿¡æ¯è¡¨Serviceå®ä¹ @@ -94,4 +108,42 @@ * @return long */ long count(Member member); /***************å°ç¨åºæ¥å£*************/ /** * ææç»å½ æ ¹æ®openidæ¥è¯¢è´¦å· 妿æ¥è¯¢å° åèªå¨ç»å½ * @param code * @return */ AccountResponse wxLogin(String code); /** * ææææºå· æ ¹æ®ææºå·æ¥è¯¢ç¨æ·ä¿¡æ¯ 妿æ¥è¯¢å° è¿åç»å½ä¿¡æ¯ * @param wxPhoneRequest * @return */ AccountResponse wxAuthPhone(WxPhoneRequest wxPhoneRequest); /** * æ´æ°ä¸ªäººä¿¡æ¯ * @param member */ void editMemberInfo(Member member); /** * 忢ç¨å·¥èº«ä»½ * @param member */ void editUseIdentity(Member member); /** * ä¸ªäººä¿¡æ¯ * @param memberId * @return */ Member getMemberInfo(Integer memberId); } server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
@@ -1,5 +1,8 @@ package com.doumee.service.business.impl; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; @@ -13,8 +16,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.Date; import java.util.List; import java.util.Objects; /** * ä¼å身份认è¯ä¿¡æ¯è¡¨Serviceå®ç° @@ -29,6 +35,30 @@ @Override public Integer create(IdentityInfo identityInfo) { if(Objects.isNull(identityInfo) || Objects.isNull(identityInfo.getType()) || Objects.isNull(identityInfo.getMemberId()) || Objects.isNull(identityInfo.getAuthType()) || StringUtils.isEmpty(identityInfo.getLinkName()) || StringUtils.isEmpty(identityInfo.getTelephone()) || StringUtils.isEmpty(identityInfo.getLocation()) || StringUtils.isEmpty(identityInfo.getImg1()) || Objects.isNull(identityInfo.getLat()) || Objects.isNull(identityInfo.getLgt()) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName())) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2())) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2())) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3()))) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //æ¥è¯¢ç¨æ·æ¯å¦å·²åå¨å½å身份 if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getMemberId,identityInfo.getMemberId()) .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å·²åå¨è¯¥èº«ä»½è¯·å·æ°æ¥çï¼"); }; identityInfo.setCreateTime(new Date()); identityInfo.setAuditStatus(Constants.ZERO); identityInfoMapper.insert(identityInfo); return identityInfo.getId(); } @@ -54,7 +84,65 @@ @Override public void updateById(IdentityInfo identityInfo) { if(Objects.isNull(identityInfo) || Objects.isNull(identityInfo.getId()) || Objects.isNull(identityInfo.getType()) || Objects.isNull(identityInfo.getMemberId()) || Objects.isNull(identityInfo.getAuthType()) || StringUtils.isEmpty(identityInfo.getLinkName()) || StringUtils.isEmpty(identityInfo.getTelephone()) || StringUtils.isEmpty(identityInfo.getLocation()) || StringUtils.isEmpty(identityInfo.getImg1()) || Objects.isNull(identityInfo.getLat()) || Objects.isNull(identityInfo.getLgt()) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName())) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2())) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2())) || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3()))) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId()); if (Objects.isNull(model)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"éæ¨çæ°æ®æ æ³è¿è¡è¯¥æä½"); } if(!Constants.equalsInteger(model.getAuditStatus(),Constants.THREE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å½åç¶ææ æ³è¿è¡è¯¥æä½"); } identityInfo.setUpdateTime(new Date()); identityInfoMapper.updateById(identityInfo); } @Override public void updateLocation(IdentityInfo identityInfo) { if(Objects.isNull(identityInfo) || Objects.isNull(identityInfo.getId()) || Objects.isNull(identityInfo.getMemberId()) || StringUtils.isEmpty(identityInfo.getLocation()) || Objects.isNull(identityInfo.getLat()) || Objects.isNull(identityInfo.getLgt()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId()); if (Objects.isNull(model)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"éæ¨çæ°æ®æ æ³è¿è¡è¯¥æä½"); } if(!Constants.equalsInteger(model.getAuditStatus(),Constants.TWO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å½åç¶ææ æ³è¿è¡è¯¥æä½"); } model.setLocation(identityInfo.getLocation()); model.setLat(identityInfo.getLat()); model.setLgt(identityInfo.getLgt()); model.setUpdateTime(new Date()); identityInfoMapper.updateById(model); } @Override @@ -69,8 +157,27 @@ @Override public IdentityInfo findById(Integer id) { return identityInfoMapper.selectById(id); IdentityInfo identityInfo = identityInfoMapper.selectById(id); //缺失åç¼ identityInfo.setPrefix(""); return identityInfo; } @Override public IdentityInfo findByMemberType(Integer type,Integer memberId){ IdentityInfo identityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,memberId).eq(IdentityInfo::getType,type)); if(Objects.nonNull(identityInfo)){ //缺失åç¼ identityInfo.setPrefix(""); }else{ identityInfo = new IdentityInfo(); } return identityInfo; } @Override public IdentityInfo findOne(IdentityInfo identityInfo) { @@ -138,27 +245,6 @@ } if (pageWrap.getModel().getLgt() != null) { queryWrapper.lambda().eq(IdentityInfo::getLgt, pageWrap.getModel().getLgt()); } if (pageWrap.getModel().getIdentityFront() != null) { queryWrapper.lambda().eq(IdentityInfo::getIdentityFront, pageWrap.getModel().getIdentityFront()); } if (pageWrap.getModel().getIdentityBack() != null) { queryWrapper.lambda().eq(IdentityInfo::getIdentityBack, pageWrap.getModel().getIdentityBack()); } if (pageWrap.getModel().getBusinessLicense() != null) { queryWrapper.lambda().eq(IdentityInfo::getBusinessLicense, pageWrap.getModel().getBusinessLicense()); } if (pageWrap.getModel().getOtherFile() != null) { queryWrapper.lambda().eq(IdentityInfo::getOtherFile, pageWrap.getModel().getOtherFile()); } if (pageWrap.getModel().getTransportFile() != null) { queryWrapper.lambda().eq(IdentityInfo::getTransportFile, pageWrap.getModel().getTransportFile()); } if (pageWrap.getModel().getFoodBusinessFile() != null) { queryWrapper.lambda().eq(IdentityInfo::getFoodBusinessFile, pageWrap.getModel().getFoodBusinessFile()); } if (pageWrap.getModel().getHealthFile() != null) { queryWrapper.lambda().eq(IdentityInfo::getHealthFile, pageWrap.getModel().getHealthFile()); } if (pageWrap.getModel().getAuditStatus() != null) { queryWrapper.lambda().eq(IdentityInfo::getAuditStatus, pageWrap.getModel().getAuditStatus()); server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1,20 +1,45 @@ package com.doumee.service.business.impl; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.jwt.JwtTokenUtil; import com.doumee.config.wx.WxMiniConfig; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.IdentityInfoMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.OrdersMapper; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Orders; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import com.doumee.dao.vo.UserCenterVO; import com.doumee.service.business.MemberService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import io.swagger.annotations.ApiModelProperty; import me.chanjar.weixin.common.error.WxErrorException; import nonapi.io.github.classgraph.json.Id; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Random; import java.util.stream.Collectors; /** * ä¼åä¿¡æ¯è¡¨Serviceå®ç° @@ -26,6 +51,18 @@ @Autowired private MemberMapper memberMapper; @Autowired private IdentityInfoMapper identityInfoMapper; @Autowired private OrdersMapper ordersMapper; @Autowired private JwtTokenUtil jwtTokenUtil; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override public Integer create(Member member) { @@ -152,17 +189,11 @@ if (pageWrap.getModel().getLoginTimes() != null) { queryWrapper.lambda().eq(Member::getLoginTimes, pageWrap.getModel().getLoginTimes()); } if (pageWrap.getModel().getReciveNum() != null) { queryWrapper.lambda().eq(Member::getReciveNum, pageWrap.getModel().getReciveNum()); } if (pageWrap.getModel().getPublishNum() != null) { queryWrapper.lambda().eq(Member::getPublishNum, pageWrap.getModel().getPublishNum()); } if (pageWrap.getModel().getScore() != null) { queryWrapper.lambda().eq(Member::getScore, pageWrap.getModel().getScore()); } if (pageWrap.getModel().getLocaltion() != null) { queryWrapper.lambda().eq(Member::getLocaltion, pageWrap.getModel().getLocaltion()); } if (pageWrap.getModel().getLat() != null) { queryWrapper.lambda().eq(Member::getLat, pageWrap.getModel().getLat()); @@ -179,9 +210,6 @@ if (pageWrap.getModel().getArea() != null) { queryWrapper.lambda().eq(Member::getArea, pageWrap.getModel().getArea()); } if (pageWrap.getModel().getAutoReciveStatus() != null) { queryWrapper.lambda().eq(Member::getAutoReciveStatus, pageWrap.getModel().getAutoReciveStatus()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); @@ -197,4 +225,174 @@ QueryWrapper<Member> wrapper = new QueryWrapper<>(member); return memberMapper.selectCount(wrapper); } /***************å°ç¨åºæ¥å£*************/ /** * 微信å°ç¨åºç»å½ * @param code * @return */ @Override public AccountResponse wxLogin(String code) { if(StringUtils.isBlank(code)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } try { //è·åå¾®ä¿¡æææ°æ® WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); String unionId = session.getUnionid(); if (StringUtils.isBlank(openId)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "è·åopenid失败ï¼è¯·è系管çå"); } Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("openid", openId).eq("isdeleted", Constants.ZERO).last("limit 1")); AccountResponse accountResponse = new AccountResponse(); accountResponse.setOpenid(openId); if(Objects.isNull(member)){ return accountResponse; } accountResponse.setToken(jwtTokenUtil.generateToken(member)); accountResponse.setMember(member); return accountResponse; } catch (WxErrorException e) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信ç»å½å¼å¸¸ï¼è¯·è系管çå"); } } @Override public AccountResponse wxAuthPhone(WxPhoneRequest wxPhoneRequest) { try { if(Objects.isNull(wxPhoneRequest) || StringUtils.isBlank(wxPhoneRequest.getCode()) || StringUtils.isBlank(wxPhoneRequest.getOpenid())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNumber(wxPhoneRequest.getCode()); String mobile = userPhoneInfo.getPhoneNumber(); if(Objects.isNull(mobile)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æªè·åå°ææºå·"); } Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,mobile).last("limit 1")); member.setOpenid(wxPhoneRequest.getOpenid()); if(Objects.nonNull(member)){ memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getTelephone,mobile) .set(Member::getOpenid,wxPhoneRequest.getOpenid()).set(Member::getUpdateTime,new Date()).eq(Member::getId,member.getId())); }else{ member = new Member(); member.setCreateTime(new Date()); member.setDeleted(Constants.ZERO); member.setOpenid(wxPhoneRequest.getOpenid()); member.setTelephone(mobile); member.setNickName(mobile); member.setCoverImage(""); member.setWorkerIdentity(Constants.ZERO); member.setDriverIdentity(Constants.ZERO); member.setChefIdentity(Constants.ZERO); member.setAmount(Constants.ZERO.longValue()); member.setTotalAmount(Constants.ZERO.longValue()); member.setStatus(Constants.ZERO); member.setLoginTime(new Date()); member.setLoginTimes(Constants.ONE.longValue()); member.setReceiveNum(Constants.ZERO.longValue()); member.setPublishNum(Constants.ZERO.longValue()); member.setAutoReceiveStatus(Constants.ONE); member.setUseIdentity(Constants.ZERO); memberMapper.insert(member); } AccountResponse accountResponse = new AccountResponse(); accountResponse.setToken(jwtTokenUtil.generateToken(member)); accountResponse.setMember(member); return accountResponse; } catch (Exception e) { e.printStackTrace(); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æªè§£æå°ææºå·"); } } @Override public void editMemberInfo(Member member){ if(Objects.isNull(member) || ( StringUtils.isBlank(member.getCoverImage()) || StringUtils.isBlank(member.getName()) || StringUtils.isBlank(member.getNickName()) || Objects.isNull(member.getAutoReceiveStatus()) )){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } memberMapper.update(new UpdateWrapper<Member>().lambda() .set(StringUtils.isNotBlank(member.getNickName()),Member::getNickName,member.getNickName()) .set(StringUtils.isNotBlank(member.getName()),Member::getName,member.getName()) .set(StringUtils.isNotBlank(member.getCoverImage()),Member::getCoverImage,member.getCoverImage()) .set(Objects.nonNull(member.getAutoReceiveStatus()),Member::getCoverImage,member.getAutoReceiveStatus()) .set(Member::getUpdateTime,new Date()) .eq(Member::getId,member.getId())); } @Override public void editUseIdentity(Member member){ if(Objects.isNull(member) || Objects.isNull(member.getUseIdentity())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){ member.setUseIdentity(Constants.ZERO); memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId())); }else{ if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO) .eq(IdentityInfo::getMemberId,member.getId()) .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){ memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId())); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å½åæ å¯ç¨æ¥å身份!"); } } } @Override public Member getMemberInfo(Integer memberId){ Member member = this.findById(memberId); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } UserCenterVO userCenterVO = new UserCenterVO(); userCenterVO.setReleaseTaskTotal(Constants.ZERO); userCenterVO.setWaitReceiveTotal(Constants.ZERO); userCenterVO.setDoingTotal(Constants.ZERO); userCenterVO.setWaitCommentTotal(Constants.ZERO); userCenterVO.setTaskingTotal(Constants.ZERO); userCenterVO.setDoneTotal(Constants.ZERO); userCenterVO.setReceiveTotal(Constants.ZERO); List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getReleaseMemberId,member)); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){ userCenterVO.setReleaseTaskTotal(releaseOrders.size()); userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size()); userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size()); userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size()); } List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member)); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){ userCenterVO.setReceiveTotal(acceptOrders.size()); userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size()); userCenterVO.setDoneTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size()); } userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode())); userCenterVO.setFeeStandards(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FEE_STANDARDS).getCode())); userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode())); member.setUserCenterVO(userCenterVO); return member; } } server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -1,5 +1,8 @@ package com.doumee.service.business.impl; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; @@ -10,11 +13,14 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jodd.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.List; import java.util.Objects; /** * 订åä¿¡æ¯è®°å½Serviceå®ç° @@ -29,9 +35,44 @@ @Override public Integer create(Orders orders) { ordersMapper.insert(orders); return orders.getId(); } public void initVerification(Orders orders){ if(Objects.isNull(orders) || Objects.isNull(orders.getType()) || Objects.isNull(orders.getStartDate()) || Objects.isNull(orders.getEndDate()) || StringUtil.isBlank(orders.getLocation()) || StringUtil.isBlank(orders.getLocationRemark()) || Objects.isNull(orders.getLat()) || Objects.isNull(orders.getLgt()) || Objects.isNull(orders.getCategoryId()) || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.isNull(orders.getWorkType())) || Objects.isNull(orders.getPriceNum1()) || (!( Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) ) && Objects.isNull(orders.getPrice()) ) || ( Constants.equalsInteger(orders.getType(),Constants.ONE) && Objects.isNull(orders.getTransportTypeId()) ) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ } } @Override public void deleteById(Integer id) { @@ -171,9 +212,6 @@ if (pageWrap.getModel().getPayAccount() != null) { queryWrapper.lambda().eq(Orders::getPayAccount, pageWrap.getModel().getPayAccount()); } if (pageWrap.getModel().getReviceAccount() != null) { queryWrapper.lambda().eq(Orders::getReviceAccount, pageWrap.getModel().getReviceAccount()); } if (pageWrap.getModel().getPriceRemark() != null) { queryWrapper.lambda().eq(Orders::getPriceRemark, pageWrap.getModel().getPriceRemark()); } @@ -253,9 +291,6 @@ } if (pageWrap.getModel().getIsUpdate() != null) { queryWrapper.lambda().eq(Orders::getIsUpdate, pageWrap.getModel().getIsUpdate()); } if (pageWrap.getModel().getBlackRecive() != null) { queryWrapper.lambda().eq(Orders::getBlackRecive, pageWrap.getModel().getBlackRecive()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { server/web/src/main/java/com/doumee/api/web/AccountApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.doumee.api.web; import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.Member; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import com.doumee.service.business.MemberService; 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.Autowired; import org.springframework.web.bind.annotation.*; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2025/7/10 9:29 */ @Api(tags = "1ãç»å½ä¸å¡") @Trace(exclude = true) @RestController @RequestMapping("/web/account") @Slf4j public class AccountApi extends ApiController{ @Autowired private MemberService memberService; @Trace @ApiOperation(value = "微信ææ", notes = "å°ç¨åºç«¯") @GetMapping("/wxLogin") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true) }) public ApiResponse<AccountResponse> wxLogin(@RequestParam String code) { return ApiResponse.success("æä½æå",memberService.wxLogin(code)); } @ApiOperation(value = "ææææºå·", notes = "å°ç¨åºç«¯") @PostMapping("/wxAuthPhone") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true) }) public ApiResponse<AccountResponse> wxAuthPhone(@RequestBody WxPhoneRequest wxPhoneRequest) { return ApiResponse.success("æä½æå",memberService.wxAuthPhone(wxPhoneRequest)); } } server/web/src/main/java/com/doumee/api/web/ApiController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.doumee.api.web; import com.alibaba.fastjson.JSONObject; import com.doumee.config.jwt.JwtTokenUtil; import com.doumee.dao.business.model.Member; import com.doumee.service.business.MemberService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /** * Controlleråºç±» * @author Eva.Caesar Liu * @date 2022/03/15 09:54 */ @Slf4j @Service public class ApiController { /** * å¾å°request对象 * * @return */ public HttpServletRequest getRequest() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); return request; } protected Integer getMemberId() { Object obj = this.getRequest().getAttribute(JwtTokenUtil.MEMBER_ID); return obj != null ? (Integer) obj : null; } /** * è·åç»å½ç¨æ·å¯¹è±¡ä¿¡æ¯ * @return */ protected Member getMemberResponse(){ Object obj = this.getRequest().getAttribute(JwtTokenUtil.MEMBER_INFO); if(obj != null){ return JSONObject.parseObject(obj.toString(),Member.class); } return null; } } server/web/src/main/java/com/doumee/api/web/OrdersApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.doumee.api.web; import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.service.business.IdentityInfoService; import com.doumee.service.business.MemberService; import com.doumee.service.business.OrdersService; 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.Autowired; import org.springframework.web.bind.annotation.*; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2025/7/10 9:29 */ @Api(tags = "1ã订åä¸å¡") @Trace(exclude = true) @RestController @RequestMapping("/web/orders") @Slf4j public class OrdersApi extends ApiController{ @Autowired private MemberService memberService; @Autowired private OrdersService ordersService; @LoginRequired @ApiOperation(value = "ç¼è¾ä¸ªäººä¿¡æ¯", notes = "å°ç¨åºç«¯") @GetMapping("/getMemberInfo") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<Member> getMemberInfo() { return ApiResponse.success("æ¥è¯¢æå",memberService.getMemberInfo(getMemberId())); } } server/web/src/main/java/com/doumee/api/web/UserApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,127 @@ package com.doumee.api.web; import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import com.doumee.service.business.IdentityInfoService; import com.doumee.service.business.MemberService; 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.Autowired; import org.springframework.web.bind.annotation.*; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2025/7/10 9:29 */ @Api(tags = "2ãç¨æ·ä¿¡æ¯") @Trace(exclude = true) @RestController @RequestMapping("/web/user") @Slf4j public class UserApi extends ApiController{ @Autowired private MemberService memberService; @Autowired private IdentityInfoService identityInfoService; @LoginRequired @ApiOperation(value = "ç¼è¾ä¸ªäººä¿¡æ¯", notes = "å°ç¨åºç«¯") @GetMapping("/getMemberInfo") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<Member> getMemberInfo() { return ApiResponse.success("æ¥è¯¢æå",memberService.getMemberInfo(getMemberId())); } @LoginRequired @ApiOperation(value = "ç¼è¾ä¸ªäººä¿¡æ¯", notes = "å°ç¨åºç«¯") @PostMapping("/editMemberInfo") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse editMemberInfo(@RequestBody Member member) { member.setId(getMemberId()); memberService.editMemberInfo(member); return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation(value = "忢ç¨å·¥èº«ä»½", notes = "å°ç¨åºç«¯") @PostMapping("/editUseIdentity") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse editUseIdentity(@RequestBody Member member) { member.setId(getMemberId()); memberService.editUseIdentity(member); return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation(value = "è·å身份认è¯ä¿¡æ¯", notes = "å°ç¨åºç«¯") @GetMapping("/getIdentityInfo") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<IdentityInfo> getIdentityInfo(@RequestParam Integer type) { return ApiResponse.success("æ¥è¯¢æå",identityInfoService.findByMemberType(type,getMemberId())); } @LoginRequired @ApiOperation(value = "ç³è¯·èº«ä»½ä¿¡æ¯", notes = "å°ç¨åºç«¯") @PostMapping("/applyForIdentity") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse applyForIdentity(@RequestBody IdentityInfo identityInfo) { identityInfo.setMemberId(getMemberId()); identityInfoService.create(identityInfo); return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation(value = "ä¿®æ¹èº«ä»½ä¿¡æ¯ï¼è®¤è¯å¤±è´¥å使ç¨ï¼", notes = "å°ç¨åºç«¯") @PostMapping("/updateIdentity") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse updateIdentity(@RequestBody IdentityInfo identityInfo) { identityInfo.setMemberId(getMemberId()); identityInfoService.updateById(identityInfo); return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation(value = "ä¿®æ¹èº«ä»½ä¿¡æ¯ä½ç½®ï¼è®¤è¯æåå使ç¨ï¼", notes = "å°ç¨åºç«¯") @PostMapping("/updateLocation") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse updateLocation(@RequestBody IdentityInfo identityInfo) { identityInfo.setMemberId(getMemberId()); identityInfoService.updateLocation(identityInfo); return ApiResponse.success("æä½æå"); } }