ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -21,6 +21,8 @@ import io.jsonwebtoken.Claims; import reactor.core.publisher.Mono; import javax.annotation.Resource; /** * 网关鉴权 * @@ -35,7 +37,7 @@ @Autowired private IgnoreWhiteProperties ignoreWhite; @Autowired @Resource private RedisService redisService; @@ -46,12 +48,14 @@ ServerHttpRequest.Builder mutate = request.mutate(); String url = request.getURI().getPath(); log.info("url"+url); // 跳过不需要验证的路径 if (StringUtils.matches(url, ignoreWhite.getWhites())) { return chain.filter(exchange); } String token = getToken(request); log.info("token"+token); if (StringUtils.isEmpty(token)) { return unauthorizedResponse(exchange, "令牌不能为空"); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
@@ -3,8 +3,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.vo.AppUserInfoVo; import com.ruoyi.member.domain.vo.MerCashMemberPageVo; import com.ruoyi.member.domain.vo.MerMemberInfoVo; import com.ruoyi.member.domain.vo.MerMemberPageVo; import com.ruoyi.member.service.member.MemberService; @@ -34,6 +36,18 @@ @Autowired private MemberService memberService; @RequestMapping(value = "/pageMerCashMember", method = RequestMethod.POST) @ApiOperation(value = "分页获取收银搜索会员列表") public R<Page<MerCashMemberPageVo>> pageMerCashMember(@RequestBody MerCashMemberPageDto merCashMemberPageDto) { Long userId = SecurityUtils.getUserId(); Page<MerCashMemberPageVo> page = new Page<>(); page.setSize(merCashMemberPageDto.getPageSize()); page.setCurrent(merCashMemberPageDto.getPageNum()); List<MerCashMemberPageVo> merCashMemberPageVos = memberService.pageMerCashMember(page,merCashMemberPageDto); return R.ok(page.setRecords(merCashMemberPageVos)); } @RequestMapping(value = "/pageMerMember", method = RequestMethod.POST) @ApiOperation(value = "分页获取商户绑定会员列表") public R<Page<MerMemberPageVo>> pageMerMember(@RequestBody MerMemberPageDto merMemberPageDto) { @@ -45,6 +59,12 @@ return R.ok(page.setRecords(merMemberPageVoList)); } /** * 未完成 * @return */ @RequestMapping(value = "/getMerMemberInfo", method = RequestMethod.POST) @ApiOperation(value = "获取会员信息") public R<MerMemberInfoVo> getMerMemberInfo() { ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -32,7 +32,7 @@ * @author jqs34 * @date: 2023/4/30 12:49 */ @InnerAuth @GetMapping("/getMember") public R<Member> getMember(@RequestBody Long userId) { @@ -63,6 +63,8 @@ * @date 2023/5/3 1:45 * @version 1.0 */ @PostMapping("/listVoUserCouponByUserId") public R<List<AppUserCouponVo>> listVoUserCouponByUserId(@RequestBody Long userId){ List<AppUserCouponVo> appUserCouponVoList = userCouponService.listVoUserCouponByUserId(userId); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/AppUserAuthorizeDto.java
@@ -14,6 +14,9 @@ @Data public class AppUserAuthorizeDto extends AppBaseDto { @ApiModelProperty(value = "手机code") private String mobileCode; @ApiModelProperty(value = "手机iv") private String phoneIv; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCashMemberPageDto.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.member.domain.dto; import com.ruoyi.system.api.domain.dto.MerPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author jqs34 * @ClassName MerCashMemberPageDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerCashMemberPageDto extends MerPageDto { @ApiModelProperty(value = "关键词") private String keyword; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppUserInfoVo.java
@@ -20,6 +20,9 @@ @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "关联id") private Long relationShopId; @ApiModelProperty("会员编号") private String memberNo; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCashMemberPageVo.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.member.domain.vo; import com.ruoyi.system.api.domain.dto.MerPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author jqs34 * @ClassName MerCashMemberPageDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerCashMemberPageVo extends MerPageDto { @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "用户名") private String nickName; @ApiModelProperty(value = "手机号") private String mobile; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberInfoVo.java
@@ -1,6 +1,10 @@ package com.ruoyi.member.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * @author jqs34 @@ -11,4 +15,40 @@ */ @Data public class MerMemberInfoVo { @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(name = "用户名称") private String nickName; @ApiModelProperty(name = "手机号码") private String phonenumber; @ApiModelProperty("用户头像") private String avatar; @ApiModelProperty(value = "用户标签") private String userTags; @ApiModelProperty(value = "次数剩余") private Integer surpNumber; @ApiModelProperty(value = "消费次数") private Integer userNumber; @ApiModelProperty(value = "消费总额") private BigDecimal payMoney; @ApiModelProperty(value = "待支付金额") private BigDecimal unpaidMoney; @ApiModelProperty(value = "最近跟进任务") private String lastTaskContent; @ApiModelProperty(value = "最近跟进任务时间") private Date lastTaskTime; @ApiModelProperty(value = "下次跟进任务时间") private Date nextTaskTime; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.vo.MerCashMemberPageVo; import com.ruoyi.member.domain.vo.MerMemberPageVo; import com.ruoyi.system.api.domain.poji.member.Member; import org.apache.ibatis.annotations.Param; @@ -39,4 +41,12 @@ * @return */ List<MerMemberPageVo> pageMerMember(Page page,@Param("param")MerMemberPageDto merMemberPageDto); /** * 分页获取收银用户列表 * @param page * @param merCashMemberPageDto * @return */ List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -3,19 +3,20 @@ import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.AppUserAuthorizeDto; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.vo.AppUserAuthorizeVo; import com.ruoyi.member.domain.vo.AppUserInfoVo; import com.ruoyi.member.domain.vo.MerMemberInfoVo; import com.ruoyi.member.domain.vo.MerMemberPageVo; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.mapper.member.MemberMapper; import com.ruoyi.member.service.member.MemberService; import com.ruoyi.member.util.HttpUtils; import com.ruoyi.system.api.RemoteOrderService; import com.ruoyi.system.api.RemoteShopService; import com.ruoyi.system.api.RemoteUserService; @@ -28,14 +29,20 @@ import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; import org.apache.commons.lang3.StringUtils; import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j2; import lombok.val; import com.ruoyi.common.core.utils.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.*; import java.util.concurrent.TimeUnit; /** * <p> @@ -46,7 +53,15 @@ * @since 2023-04-25 */ @Service @Log4j2 public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService { private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; private static final String WX_APPID = "wxb7f0ea286fc4e535"; private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; @Resource private RemoteUserService sysUserService; @@ -115,6 +130,7 @@ String password = "hongruitang"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); sysUser = sysUserService.registerUser(sysUser).getData(); log.info("sysUser1"+sysUser.toString()); member = new Member(); member.setUserId(sysUser.getUserId()); member.setDelFlag(0); @@ -123,8 +139,13 @@ member.setMiniOpenid(openid); member.setCreateTime(new Date()); this.save(member); }else{ sysUser = sysUserService.getSysUser(member.getUserId()).getData(); log.info("member2"+member.toString()); R<SysUser> sysUser1 = sysUserService.getSysUser(member.getUserId()); log.info("sysUser1"+ sysUser1.getCode() + " : " + sysUser1.getMsg()); sysUser = sysUser1.getData(); log.info("sysUser"+sysUser.toString()); } appMiniLoginVo.setMiniOpenid(openid); appMiniLoginVo.setWxUnionid(unionid); @@ -132,8 +153,10 @@ appMiniLoginVo.setSessionKey(sessionKey); stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey); }else{ log.info("null"); return null; } log.info("appMiniLoginVo"+appMiniLoginVo.toString()); return appMiniLoginVo; } @@ -154,7 +177,7 @@ String mobile = null; try { //解密微信加密用户信息和手机号 WxMaPhoneNumberInfo wxPhoneInfo; /*WxMaPhoneNumberInfo wxPhoneInfo; if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){ wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv()); }else{ @@ -163,7 +186,31 @@ if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){ throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED); } mobile = wxPhoneInfo.getPhoneNumber(); mobile = wxPhoneInfo.getPhoneNumber();*/ String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token"); if (StringUtils.isBlank(accessToken)) { String responseAccessToken = getAccessTokenByWX(); JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); accessToken = jsonAccessToken.getString("access_token"); String errmsg = jsonAccessToken.getString("errmsg"); Long expiresIn = jsonAccessToken.getLong("expires_in"); if (StringUtils.isBlank(accessToken)) { throw new ServiceException(errmsg); } else { expiresIn = expiresIn - 100; stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS); } } String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode()); JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); String errcode = jsonUserPhoneNumber.getString("errcode"); String errmsg = jsonUserPhoneNumber.getString("errmsg"); if (!errcode.equals("0")) { throw new ServiceException(errmsg); } String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo); mobile = jsonUserPhoneInfo.getString("purePhoneNumber"); } catch (Exception e) { e.printStackTrace(); } @@ -182,6 +229,28 @@ return appUserAuthorizeVo; } public static String getAccessTokenByWX() throws Exception { String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; Map<String, String> headers = new HashMap<>(8); HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null); return EntityUtils.toString(response.getEntity()); } public static String getMobileByWX(String accessToken, String code) throws Exception { String method = "POST"; Map<String, String> headers = new HashMap<>(16); headers.put("Content-Type", "application/json"); headers.put("Accept", "application/json"); Map<String, String> querys = new HashMap<>(16); Map<String, String> bodys = new HashMap<>(16); querys.put("access_token", accessToken ); bodys.put("code", code); String body = JSONObject.toJSONString(bodys); String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body); return EntityUtils.toString(response.getEntity()); } /** * 获取用户信息 * @param userId @@ -193,6 +262,7 @@ SysUser sysUser = sysUserService.getSysUser(userId).getData(); Member member = this.getByUserId(userId); appUserInfoVo.setUserId(userId); appUserInfoVo.setRelationShopId(member.getRelationShopId()); appUserInfoVo.setMemberNo(member.getMemberNo()); appUserInfoVo.setNickName(sysUser.getNickName()); appUserInfoVo.setPhonenumber(sysUser.getPhonenumber()); @@ -267,7 +337,27 @@ @Override public MerMemberInfoVo getMerMemberInfo(Long userId){ MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo(); SysUser sysUser = sysUserService.getSysUser(userId).getData(); Member member = this.getByUserId(userId); merMemberInfoVo.setUserId(userId); merMemberInfoVo.setNickName(sysUser.getNickName()); merMemberInfoVo.setPhonenumber(sysUser.getPhonenumber()); merMemberInfoVo.setAvatar(sysUser.getAvatar()); //未完成 return merMemberInfoVo; } /** * 分页获取收银用户列表 * @param page * @param merCashMemberPageDto * @return */ @Override public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){ List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto); return merCashMemberPageVos; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -1,11 +1,9 @@ package com.ruoyi.member.service.member; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.vo.AppUserAuthorizeVo; import com.ruoyi.member.domain.vo.AppUserInfoVo; import com.ruoyi.member.domain.vo.MerMemberInfoVo; import com.ruoyi.member.domain.vo.MerMemberPageVo; import com.ruoyi.member.domain.vo.*; import com.ruoyi.system.api.domain.dto.AppEditUserDto; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.model.AppMiniLoginDto; @@ -74,4 +72,12 @@ * @version 1.0 */ MerMemberInfoVo getMerMemberInfo(Long userId); /** * 分页获取收银用户列表 * @param page * @param merCashMemberPageDto * @return */ List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/util/HttpUtils.java
New file @@ -0,0 +1,337 @@ package com.ruoyi.member.util; import com.ruoyi.common.core.utils.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @ClassName HttpUtils * @Description TODO * @Author zhanglin * @Date 2020/2/11 10:30 * @Version 1.0 **/ public class HttpUtils { public static void main(String[] args) { BigDecimal payMoney = BigDecimal.valueOf(0.73); System.out.println(BigDecimal.ZERO.compareTo(payMoney)); } /** * get * * @param host * @return * @throws Exception */ public static HttpResponse doGet(String host)throws Exception { return doGet(host, "", "GET", null, null); } /** * get * * @param host * @param path * @param method * @param headers * @param querys * @return * @throws Exception */ public static HttpResponse doGet(String host, String path, String method, Map<String, String> headers, Map<String, String> querys) throws Exception { HttpClient httpClient = wrapClient(host); HttpGet request = new HttpGet(buildUrl(host, path, querys)); if(null != headers) { for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } } return httpClient.execute(request); } /** * post form * * @param host * @param path * @param method * @param headers * @param querys * @param bodys * @return * @throws Exception */ public static HttpResponse doPost(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, Map<String, String> bodys) throws Exception { HttpClient httpClient = wrapClient(host); HttpPost request = new HttpPost(buildUrl(host, path, querys)); for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } if (bodys != null) { List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); for (String key : bodys.keySet()) { nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); } UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); request.setEntity(formEntity); } return httpClient.execute(request); } /** * Post String * * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */ public static HttpResponse doPost(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, String body) throws Exception { HttpClient httpClient = wrapClient(host); HttpPost request = new HttpPost(buildUrl(host, path, querys)); for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } if (StringUtils.isNotBlank(body)) { request.setEntity(new StringEntity(body, "utf-8")); } return httpClient.execute(request); } /** * Post stream * * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */ public static HttpResponse doPost(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, byte[] body) throws Exception { HttpClient httpClient = wrapClient(host); HttpPost request = new HttpPost(buildUrl(host, path, querys)); for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } if (body != null) { request.setEntity(new ByteArrayEntity(body)); } return httpClient.execute(request); } /** * Put String * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */ public static HttpResponse doPut(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, String body) throws Exception { HttpClient httpClient = wrapClient(host); HttpPut request = new HttpPut(buildUrl(host, path, querys)); for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } if (StringUtils.isNotBlank(body)) { request.setEntity(new StringEntity(body, "utf-8")); } return httpClient.execute(request); } /** * Put stream * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */ public static HttpResponse doPut(String host, String path, String method, Map<String, String> headers, Map<String, String> querys, byte[] body) throws Exception { HttpClient httpClient = wrapClient(host); HttpPut request = new HttpPut(buildUrl(host, path, querys)); for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } if (body != null) { request.setEntity(new ByteArrayEntity(body)); } return httpClient.execute(request); } /** * Delete * * @param host * @param path * @param method * @param headers * @param querys * @return * @throws Exception */ public static HttpResponse doDelete(String host, String path, String method, Map<String, String> headers, Map<String, String> querys) throws Exception { HttpClient httpClient = wrapClient(host); HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); for (Map.Entry<String, String> e : headers.entrySet()) { request.addHeader(e.getKey(), e.getValue()); } return httpClient.execute(request); } private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException { StringBuilder sbUrl = new StringBuilder(); sbUrl.append(host); if (!StringUtils.isBlank(path)) { sbUrl.append(path); } if (null != querys) { StringBuilder sbQuery = new StringBuilder(); for (Map.Entry<String, String> query : querys.entrySet()) { if (0 < sbQuery.length()) { sbQuery.append("&"); } if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { sbQuery.append(query.getValue()); } if (!StringUtils.isBlank(query.getKey())) { sbQuery.append(query.getKey()); if (!StringUtils.isBlank(query.getValue())) { sbQuery.append("="); sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); } } } if (0 < sbQuery.length()) { sbUrl.append("?").append(sbQuery); } } return sbUrl.toString(); } private static HttpClient wrapClient(String host) { HttpClient httpClient = new DefaultHttpClient(); if (host.startsWith("https://")) { sslClient(httpClient); } return httpClient; } private static void sslClient(HttpClient httpClient) { try { SSLContext ctx = SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] xcs, String str) { } public void checkServerTrusted(X509Certificate[] xcs, String str) { } }; ctx.init(null, new TrustManager[] { tm }, null); SSLSocketFactory ssf = new SSLSocketFactory(ctx); ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ClientConnectionManager ccm = httpClient.getConnectionManager(); SchemeRegistry registry = ccm.getSchemeRegistry(); registry.register(new Scheme("https", 443, ssf)); } catch (KeyManagementException ex) { throw new RuntimeException(ex); } catch (NoSuchAlgorithmException ex) { throw new RuntimeException(ex); } } } ruoyi-modules/ruoyi-member/src/main/resources/logback.xml
@@ -58,7 +58,7 @@ </appender> <!-- 系统模块日志级别控制 --> <logger name="com.ruoyi" level="info" /> <logger name="com.ruoyi" level="debug" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -134,7 +134,7 @@ </delete> <select id="getOneByMiniOpenid" parameterType="com.ruoyi.system.api.domain.poji.member.Member"> <select id="getOneByMiniOpenid" resultType="com.ruoyi.system.api.domain.poji.member.Member"> SELECT * FROM t_member WHERE mini_openid = #{miniOpenid} </select> @@ -156,4 +156,16 @@ AND (tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%') OR tm.referrer LIKE CONCAT('%',#{param.keyword},'%')) </if> </select> <select id="pageMerCashMember" resultType="com.ruoyi.member.domain.vo.MerCashMemberPageVo"> SELECT tm.user_id userId, tm.real_name nickName, tm.mobile mobile FROM t_member tm WHERE tm.relationShopId = #{param.shopId} <if test="param.keyword != null and param.keyword != ''"> AND (tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%')) </if> </select> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerConsumerController.java
New file @@ -0,0 +1,52 @@ package com.ruoyi.order.controller.business; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.domain.dto.MerConsumerGoodsDto; import com.ruoyi.order.domain.dto.MerMemberNoClearOrderDto; import com.ruoyi.order.domain.dto.MerSureConsumerGoodsDto; import com.ruoyi.order.domain.vo.MerConsumerGoodsVo; import com.ruoyi.order.domain.vo.MerMemberNoClearOrderVo; import com.ruoyi.order.service.order.ConsumerGoodsService; import io.swagger.annotations.ApiOperation; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import java.util.List; /** * @author jqs34 * @ClassName MerConsumerController * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerConsumerController { @Autowired private ConsumerGoodsService consumerGoodsService; @RequestMapping(value = "/listMerConsumerGoods", method = RequestMethod.POST) @ApiOperation(value = "获取用户服务列表") public R<MerConsumerGoodsVo> listMerConsumerGoods(@RequestBody MerConsumerGoodsDto merConsumerGoodsDto) { Long userId = SecurityUtils.getUserId(); merConsumerGoodsDto.setUserId(userId); MerConsumerGoodsVo merConsumerGoodsVo = consumerGoodsService.listMerConsumerGoods(merConsumerGoodsDto); return R.ok(merConsumerGoodsVo); } @RequestMapping(value = "/sureMerConsumerGoods", method = RequestMethod.POST) @ApiOperation(value = "确认商品次数") public R sureMerConsumerGoods(@RequestBody MerSureConsumerGoodsDto merSureConsumerGoodsDto) { Long userId = SecurityUtils.getUserId(); merSureConsumerGoodsDto.setUserId(userId); consumerGoodsService.sureMerConsumerGoods(merSureConsumerGoodsDto); return R.ok(); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerGoodsController.java
@@ -52,6 +52,7 @@ @ApiOperation(value = "编辑商户商品价格") public R editMerShopGoods(@RequestBody MerShopGoodsEditDto merShopGoodsEditDto) { Long userId = SecurityUtils.getUserId(); merShopGoodsEditDto.setUserId(userId); goodsService.editMerShopGoods(merShopGoodsEditDto); return R.ok(); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -1,14 +1,15 @@ package com.ruoyi.order.controller.business; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.domain.dto.AppSureOrderDto; import com.ruoyi.order.domain.dto.MerVerifyCodeDto; import com.ruoyi.order.domain.dto.MerVerifyOrderDto; import com.ruoyi.order.domain.dto.*; import com.ruoyi.order.domain.vo.*; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.poji.member.Member; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author jqs34 @@ -39,6 +42,7 @@ @ApiOperation(value = "核销code") public R<MerVerifyCodeVo> verifyCode(@RequestBody MerVerifyCodeDto merVerifyCodeDto) { Long userId = SecurityUtils.getUserId(); merVerifyCodeDto.setUserId(userId); String verifyCode = merVerifyCodeDto.getVerifyCode(); String[] verifyCodeArr = verifyCode.split("-"); MerVerifyCodeVo merVerifyCodeVo = new MerVerifyCodeVo(); @@ -68,8 +72,42 @@ @ApiOperation(value = "核销订单") public R<MerVerifyOrderVo> sureVerifyOrder(@RequestBody MerVerifyOrderDto merVerifyOrderDto) { Long userId = SecurityUtils.getUserId(); merVerifyOrderDto.setUserId(userId); MerVerifyOrderVo merVerifyOrderVo = orderService.sureVerifyOrder(merVerifyOrderDto); return R.ok(merVerifyOrderVo); } @RequestMapping(value = "/pageMerMemberNoClearOrder", method = RequestMethod.POST) @ApiOperation(value = "分页获取用户未结清订单") public R<Page<MerMemberNoClearOrderVo>> pageMerMemberNoClearOrder(@RequestBody MerMemberNoClearOrderDto merMemberNoClearOrderDto) { Long userId = SecurityUtils.getUserId(); merMemberNoClearOrderDto.setUserId(userId); Page<MerMemberNoClearOrderVo> page = new Page<>(); page.setSize(merMemberNoClearOrderDto.getPageSize()); page.setCurrent(merMemberNoClearOrderDto.getPageNum()); List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderService.pageMerMemberNoClearOrder(page,merMemberNoClearOrderDto); return R.ok(page.setRecords(merMemberNoClearOrderVoList)); } @RequestMapping(value = "/merCloseOrder", method = RequestMethod.POST) @ApiOperation(value = "结清订单") public R merCloseOrder(@RequestBody MerCloseOrderDto merCloseOrderDto) { Long userId = SecurityUtils.getUserId(); merCloseOrderDto.setUserId(userId); orderService.merCloseOrder(merCloseOrderDto); return R.ok(); } @RequestMapping(value = "/createNewOrder", method = RequestMethod.POST) @ApiOperation(value = "创建新订单") public R createNewOrder(@RequestBody MerNewOrderDto merNewOrderDto) { Long userId = SecurityUtils.getUserId(); merNewOrderDto.setUserId(userId); orderService.createNewOrder(merNewOrderDto); return R.ok(); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/ActivityController.java
@@ -25,7 +25,6 @@ @Autowired private ActivityGoodsService activityGoodsService; @InnerAuth @PostMapping("/getActivityGoods") public R<ActivityGoods> getActivityGoods(@RequestBody String goodsId) { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java
@@ -25,14 +25,14 @@ @Autowired private OrderService orderService; @InnerAuth @PostMapping("/getAppOrderTotal") public R<AppOrderTotalVo> getAppOrderTotal(@RequestBody Long userId){ AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId); return R.ok(appOrderTotalVo); } @InnerAuth @PostMapping("/getMerHomeTotal") public R<MerHomeShopTotalVo> getMerHomeTotal(@RequestBody MerHomeShopTotalVo merHomeShopTotalVo){ merHomeShopTotalVo = orderService.getMerHomeTotal(merHomeShopTotalVo); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerCloseOrderDto.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.order.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @author jqs34 * @ClassName MerCloseOrderDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerCloseOrderDto extends MerBaseDto { @ApiModelProperty(value = "订单id") private String orderId; @ApiModelProperty(value = "支付金额") private BigDecimal payMoney; @ApiModelProperty(value = "支付备注") private String payRemark; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerConsumerGoodsDto.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.order.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author jqs34 * @ClassName MerConsumerGoodsDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerConsumerGoodsDto extends MerBaseDto { @ApiModelProperty(name = "会员用户id") private Long memberUserId; @ApiModelProperty("商品类型1周期2服务3体验") private Integer goodsType; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerGoodsPageDto.java
@@ -15,6 +15,9 @@ @Data public class MerGoodsPageDto extends MerPageDto { @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") private Integer goodsType; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerMemberNoClearOrderDto.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.order.domain.dto; import com.ruoyi.system.api.domain.dto.MerPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author jqs34 * @ClassName MerMemberNoClearOrderDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerMemberNoClearOrderDto extends MerPageDto { @ApiModelProperty(value = "会员用户id") private Long memberUserId; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerNewOrderDto.java
New file @@ -0,0 +1,34 @@ package com.ruoyi.order.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; /** * @author jqs34 * @ClassName MerNewOrderDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerNewOrderDto extends MerBaseDto { @ApiModelProperty(value = "购买用户id") private Long buyUserId; @ApiModelProperty(value = "购买列表") List<AppBuyGoodsDto> appBuyGoodsDtoList; @ApiModelProperty(value = "支付金额") private BigDecimal payMoney; @ApiModelProperty(value = "支付方式") private Integer payType; @ApiModelProperty(value = "订单备注") private String orderRemark; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerSureConsumerGoodsDto.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.order.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author jqs34 * @ClassName MerSureConsumerGoodsDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerSureConsumerGoodsDto extends MerBaseDto { @ApiModelProperty(name = "会员用户id") private Long memberUserId; @ApiModelProperty(name = "确认服务列表") private List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerSureConsumerGoodsListDto.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.order.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author jqs34 * @ClassName MerSureConsumerGoodsListDto * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerSureConsumerGoodsListDto { @ApiModelProperty(name = "服务id") private String consumerGoodsId; @ApiModelProperty(name = "服务次数") private Integer service_num; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java
@@ -103,6 +103,11 @@ @TableField("use_time") private String useTime; /** * 商品类型1周期2服务3体验 */ @TableField("goods_type") private Integer goodsType; @Override protected Serializable pkVal() { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java
@@ -150,6 +150,11 @@ */ @TableField("goods_num") private Integer goodsNum; /** * 结清标记 */ @TableField("close_flag") private Integer closeFlag; @Override protected Serializable pkVal() { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java
New file @@ -0,0 +1,45 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author jqs34 * @ClassName MerConsumerGoodsVo * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerConsumerGoodsListVo { @ApiModelProperty("服务id") private String consumerGoodsId; @ApiModelProperty("服务状态-1删除1未完成2完成") private Integer serviceStatus; @ApiModelProperty("商户id") private Long shopId; @ApiModelProperty("商品类型1周期2服务3体验4单品") private Integer goodsType; @ApiModelProperty("商品名称") private String goodsName; @ApiModelProperty("商品图片") private String goodsPicture; @ApiModelProperty("商品调理问题") private String goodsNurses; @ApiModelProperty("周期标记") private Integer cycleNumFlag; @ApiModelProperty("服务次数") private Integer serviceNum; @ApiModelProperty("消耗次数") private Integer usedNum; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsVo.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author jqs34 * @ClassName MerConsumerGoodsVo * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerConsumerGoodsVo { @ApiModelProperty("未确认商品") private List<MerConsumerGoodsListVo> noSureList; @ApiModelProperty("确认商品") private List<MerConsumerGoodsListVo> sureList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java
New file @@ -0,0 +1,42 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; /** * @author jqs34 * @ClassName MerMemberUnclearOrder * @description: TODO * @date 2023年05月05日 * @version: 1.0 */ @Data public class MerMemberNoClearOrderVo { @ApiModelProperty(value = "订单id") private String orderId; @ApiModelProperty("订单编号") private String orderNo; @ApiModelProperty(value = "商品总价") private BigDecimal orderGoodsMoney; @ApiModelProperty(value = "优惠券抵扣") private BigDecimal couponDiscount; @ApiModelProperty("应收金额") private BigDecimal receivableMoney; @ApiModelProperty("应收订金") private BigDecimal receivableDeposit; @ApiModelProperty("订单实际支付金额") private BigDecimal payMoney; @ApiModelProperty("订单未支付金额") private BigDecimal unPaidMoney; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyOrderVo.java
@@ -1,5 +1,6 @@ package com.ruoyi.order.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -64,4 +65,7 @@ @ApiModelProperty(value = "用户电话") private String userMobile; @ApiModelProperty("结清标记0否1是") private Integer closeFlag; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ConsumerGoodsMapper.java
@@ -2,9 +2,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.order.domain.dto.AppConsumerPageDto; import com.ruoyi.order.domain.dto.MerConsumerGoodsDto; import com.ruoyi.order.domain.pojo.order.ConsumerGoods; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.order.domain.vo.AppConsumerPageVo; import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -26,4 +28,18 @@ * @return */ List<AppConsumerPageVo> pageUserConsumerGoods(Page page, @Param("param") AppConsumerPageDto appConsumerPageDto); /** * 获取未确认服务商品 * @param merConsumerGoodsDto * @return */ List<MerConsumerGoodsListVo> listMerNoSureConsumerGoods(@Param("param") MerConsumerGoodsDto merConsumerGoodsDto); /** * 获取已确认服务商品 * @param merConsumerGoodsDto * @return */ List<MerConsumerGoodsListVo> listMerConsumerGoods(@Param("param") MerConsumerGoodsDto merConsumerGoodsDto); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -5,6 +5,8 @@ import com.ruoyi.order.domain.pojo.order.Order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.order.domain.vo.AppUserOrderPageVo; import com.ruoyi.order.domain.vo.MerMemberNoClearOrderVo; import com.ruoyi.system.api.domain.dto.MerPageDto; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -26,4 +28,12 @@ * @return */ List<AppUserOrderPageVo> pageUserOrder(Page page, @Param("param") AppUserOrderPageDto appUserOrderPageDto); /** * 收银未结清订单列表 * @param page * @param userId * @return */ List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, @Param("userId") Long userId); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
@@ -4,8 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.order.domain.dto.AppConsumerPageDto; import com.ruoyi.order.domain.dto.MerConsumerGoodsDto; import com.ruoyi.order.domain.dto.MerSureConsumerGoodsDto; import com.ruoyi.order.domain.dto.MerSureConsumerGoodsListDto; import com.ruoyi.order.domain.pojo.order.ConsumerGoods; import com.ruoyi.order.domain.vo.AppConsumerPageVo; import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo; import com.ruoyi.order.domain.vo.MerConsumerGoodsVo; import com.ruoyi.order.mapper.order.ConsumerGoodsMapper; import com.ruoyi.order.service.order.ConsumerGoodsService; import org.springframework.stereotype.Service; @@ -37,4 +42,39 @@ public List<AppConsumerPageVo> pageUserConsumerGoods(Page page, AppConsumerPageDto appConsumerPageDto){ return consumerGoodsMapper.pageUserConsumerGoods(page, appConsumerPageDto); } /** * 获取会员服务商品 * @param merConsumerGoodsDto * @return */ @Override public MerConsumerGoodsVo listMerConsumerGoods(MerConsumerGoodsDto merConsumerGoodsDto){ MerConsumerGoodsVo merConsumerGoodsVo = new MerConsumerGoodsVo(); if(merConsumerGoodsDto.getGoodsType()==1){ List<MerConsumerGoodsListVo> noSureList = consumerGoodsMapper.listMerNoSureConsumerGoods(merConsumerGoodsDto); merConsumerGoodsVo.setNoSureList(noSureList); } List<MerConsumerGoodsListVo> sureList = consumerGoodsMapper.listMerConsumerGoods(merConsumerGoodsDto); merConsumerGoodsVo.setSureList(sureList); return merConsumerGoodsVo; } /** * 确认商品次数 * @param merSureConsumerGoodsDto */ @Override public void sureMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){ List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList(); if(merSureConsumerGoodsListDtoList!=null && !merSureConsumerGoodsListDtoList.isEmpty()){ ConsumerGoods consumerGoods; for(MerSureConsumerGoodsListDto merSureConsumerGoodsListDto : merSureConsumerGoodsListDtoList){ consumerGoods = this.getById(merSureConsumerGoodsListDto.getConsumerGoodsId()); consumerGoods.setCycleNumFlag(1); consumerGoods.setServiceNum(merSureConsumerGoodsListDto.getService_num()); this.saveOrUpdate(consumerGoods); } } } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -34,7 +34,6 @@ import com.ruoyi.order.service.goods.GoodsService; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; import io.swagger.annotations.ApiModelProperty; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -340,10 +339,12 @@ order.setPayMoney(orderPayMoney); order.setOnlinePayMoney(orderPayMoney); appPlaceOrderVo.setPayMoney(orderPayMoney); order.setCloseFlag(1); }else if(order.getPayType()==2){ order.setPayMoney(orderPayDeposit); order.setOnlinePayMoney(orderPayDeposit); appPlaceOrderVo.setPayMoney(orderPayDeposit); order.setCloseFlag(0); } order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); @@ -500,6 +501,7 @@ SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData(); merVerifyOrderVo.setUserName(sysUser.getNickName()); merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); return merVerifyOrderVo; } @@ -520,6 +522,7 @@ order.setUseUserId(merVerifyOrderDto.getUserId()); order.setOfflinePayMoney(relReceiveMoney); order.setPayMoney(order.getPayMoney().add(relReceiveMoney)); order.setCloseFlag(1); this.saveOrUpdate(order); //创建服务商品 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listVoByOrderId(orderId); @@ -539,6 +542,7 @@ consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); consumerGoods.setCreateTime(nowTime); consumerGoodsService.save(consumerGoods); } @@ -560,4 +564,189 @@ merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); return merVerifyOrderVo; } /** * 收银未结清订单列表 * @param page * @param merMemberNoClearOrderDto * @return */ @Override public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto){ List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page,merMemberNoClearOrderDto.getMemberUserId()); if(merMemberNoClearOrderVoList!=null&&!merMemberNoClearOrderVoList.isEmpty()){ for(MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList){ merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney())); } } return merMemberNoClearOrderVoList; } /** * 结清订单 * @param merCloseOrderDto */ @Override public void merCloseOrder(MerCloseOrderDto merCloseOrderDto){ Order order = this.getById(merCloseOrderDto.getOrderId()); order.setOfflinePayMoney(merCloseOrderDto.getPayMoney()); order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney())); order.setCloseFlag(1); this.saveOrUpdate(order); } /** * 创建新订单 * @param merNewOrderDto */ @Override public void createNewOrder(MerNewOrderDto merNewOrderDto){ Long userId = merNewOrderDto.getBuyUserId(); //创建订单 List<AppBuyGoodsDto> appBuyGoodsDtoList = merNewOrderDto.getAppBuyGoodsDtoList(); String goodsId; Integer buyNum; BigDecimal buyNumBig; Integer serviceNum; Integer goodsNum = 0; Long userCouponId; Goods goods; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; BigDecimal goodsRealPrice; List<AppUserCouponVo> appUserCouponVoList = remoteMemberService.listVoUserCouponByUserId(userId).getData(); Map<Long,AppUserCouponVo> appUserCouponVoMap = appUserCouponVoList.stream().collect(Collectors.toMap(AppUserCouponVo::getUserCouponId, Function.identity())); AppUserCouponVo appUserCouponVo; Integer couponType; BigDecimal moneyThreshold; BigDecimal discountMoney = new BigDecimal("0.00"); BigDecimal discountPercent; BigDecimal goodsDeposit; BigDecimal orderGoodsMoney = new BigDecimal("0.00"); BigDecimal couponDiscount = new BigDecimal("0.00"); BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); String orderId = IdUtils.simpleUUID(); String orderNo = CodeFactoryUtil.getShopOrderNo(); OrderGoods orderGoods; String orderGoodsId; for(AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList){ goodsId = appBuyGoodsDto.getGoodsId(); userCouponId = appBuyGoodsDto.getUserCouponId(); goods = goodsService.getById(goodsId); buyNum = appBuyGoodsDto.getBuyNum(); goodsPrice = goods.getSalesPrice(); serviceNum = goods.getServiceNum(); //商户定制价格 ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(merNewOrderDto.getShopId(),goods.getGoodsId()); if(shopGoods!=null){ goodsPrice = shopGoods.getSalesPrice(); serviceNum = shopGoods.getServiceNum(); } buyNumBig = BigDecimal.valueOf(buyNum); goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; if(userCouponId!=null){ appUserCouponVo = appUserCouponVoMap.get(userCouponId); if(StringUtils.isBlank(appUserCouponVo.getRelGoodsIds()) || appUserCouponVo.getRelGoodsIds().contains(goodsId)){ couponType = appUserCouponVo.getCouponType(); if(couponType == 1 && appUserCouponVo.getMoneyThreshold()!=null && appUserCouponVo.getDiscountMoney()!=null){ moneyThreshold = appUserCouponVo.getMoneyThreshold(); if(goodsTotalPrice.compareTo(moneyThreshold)>=0){ discountMoney = appUserCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); } }else if(couponType == 2 && appUserCouponVo.getDiscountPercent()!=null){ discountPercent = appUserCouponVo.getDiscountPercent(); goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2,BigDecimal.ROUND_HALF_UP); discountMoney = goodsRealPrice.subtract(goodsTotalPrice); }else if(couponType == 3 && appUserCouponVo.getDiscountMoney()!=null){ discountMoney = appUserCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); } } } goodsDeposit = goods.getSubscription(); if(goodsDeposit == null){ goodsDeposit = new BigDecimal("0.00"); } goodsNum = goodsNum + buyNum; orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice); couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); //创建OrderGoods orderGoods = new OrderGoods(); orderGoodsId = IdUtils.simpleUUID(); orderGoods.setOrderGoodsId(orderGoodsId); orderGoods.setDelFlag(0); orderGoods.setOrderId(orderId); orderGoods.setGoodsId(goodsId); orderGoods.setBuyNum(buyNum); orderGoods.setCouponId(userCouponId.toString()); orderGoods.setGoodsPrice(goodsPrice); orderGoods.setGoodsTotalMoney(orderGoodsMoney); orderGoods.setGoodsReceivableMoney(goodsRealPrice); orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); orderGoods.setServiceNum(serviceNum); orderGoods.setGoodsType(goods.getGoodsType()); orderGoodsService.save(orderGoods); } Order order = new Order(); order.setOrderId(orderId); order.setDelFlag(0); order.setOrderStatus(3); order.setOrderNo(orderNo); order.setOrderFrom(1); order.setShopId(merNewOrderDto.getShopId()); order.setUserId(userId); order.setOrderMoney(orderGoodsMoney); order.setCouponMoney(couponDiscount); order.setDiscountMoney(couponDiscount); order.setReceivableMoney(orderPayMoney); order.setPayType(1); if(order.getPayType()==1){ order.setPayMoney(orderPayMoney); order.setOnlinePayMoney(orderPayMoney); order.setCloseFlag(1); }else if(order.getPayType()==2){ order.setPayMoney(orderPayDeposit); order.setOnlinePayMoney(orderPayDeposit); order.setCloseFlag(0); } order.setOrderRemark(merNewOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(new Date()); order.setPayTime(new Date()); order.setUseTime(new Date()); order.setUseUserId(merNewOrderDto.getUserId()); order.setPayMoney(merNewOrderDto.getPayMoney()); order.setOnlinePayMoney(new BigDecimal("0.00")); order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); order.setCloseFlag(1); this.save(order); //创建服务 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listVoByOrderId(orderId); ConsumerGoods consumerGoods; String consumerGoodsId; for(AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList){ consumerGoods = new ConsumerGoods(); consumerGoodsId = IdUtils.simpleUUID(); consumerGoods.setConsumerGoodsId(consumerGoodsId); consumerGoods.setDelFlag(0); consumerGoods.setServiceStatus(1); consumerGoods.setShopId(order.getShopId()); consumerGoods.setUserId(order.getUserId()); consumerGoods.setOrderId(orderId); consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); consumerGoods.setCreateTime(new Date()); consumerGoodsService.save(consumerGoods); } } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ConsumerGoodsService.java
@@ -2,9 +2,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.order.domain.dto.AppConsumerPageDto; import com.ruoyi.order.domain.dto.MerConsumerGoodsDto; import com.ruoyi.order.domain.dto.MerSureConsumerGoodsDto; import com.ruoyi.order.domain.pojo.order.ConsumerGoods; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.order.domain.vo.AppConsumerPageVo; import com.ruoyi.order.domain.vo.MerConsumerGoodsVo; import java.util.List; @@ -25,4 +28,17 @@ * @return */ List<AppConsumerPageVo> pageUserConsumerGoods(Page page, AppConsumerPageDto appConsumerPageDto); /** * 获取会员服务商品 * @param merConsumerGoodsDto * @return */ MerConsumerGoodsVo listMerConsumerGoods(MerConsumerGoodsDto merConsumerGoodsDto); /** * 确认商品次数 * @param merSureConsumerGoodsDto */ void sureMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -1,14 +1,12 @@ package com.ruoyi.order.service.order; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.order.domain.dto.MerVerifyOrderDto; import com.ruoyi.order.domain.dto.*; import com.ruoyi.order.domain.vo.*; import com.ruoyi.system.api.domain.dto.AppBaseGetDto; import com.ruoyi.order.domain.dto.AppPlaceOrderDto; import com.ruoyi.order.domain.dto.AppSureOrderDto; import com.ruoyi.order.domain.dto.AppUserOrderPageDto; import com.ruoyi.order.domain.pojo.order.Order; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; @@ -88,4 +86,26 @@ * @return */ MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto); /** * 收银未结清订单列表 * @param page * @param merMemberNoClearOrderDto * @return */ List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto); /** * 结清订单 * @param merCloseOrderDto */ void merCloseOrder(MerCloseOrderDto merCloseOrderDto); /** * 创建新订单 * @param merNewOrderDto */ void createNewOrder(MerNewOrderDto merNewOrderDto); } ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -303,6 +303,12 @@ LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId} WHERE tg.del_flag = 0 AND tg.goods_status = 1 <if test="param.goodsType != null"> AND tg.goods_type = #{param.goodsType} </if> <if test="param.goodsName != null and param.goodsName != ''"> AND tg.goods_name LIKE CONCAT('%',#{param.goodsName},'%') </if> ORDER BY tg.create_time DESC </select> </mapper> ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml
@@ -122,7 +122,7 @@ tcg.consumer_goods_id consumerGoodsId, tcg.service_status serviceStatus, tcg.shop_id shopId, tg.goods_type goodsType, tcg.goods_type goodsType, tg.goods_name goodsName, tgf.file_url goodsPicture, tg.goods_nurses goodsNurses, @@ -138,4 +138,44 @@ </if> ORDER BY tcg.cycle_num_flag ASC, tcg.create_time DESC </select> <select id="pageUserConsumerGoods" resultType="com.ruoyi.order.domain.vo.MerConsumerGoodsListVo"> SELECT tcg.consumer_goods_id consumerGoodsId, tcg.service_status serviceStatus, tcg.shop_id shopId, tcg.goods_type goodsType, tg.goods_name goodsName, tgf.file_url goodsPicture, tg.goods_nurses goodsNurses, tcg.cycle_num_flag cycleNumFlag, tcg.service_num serviceNum, tcg.used_num usedNum FROM t_consumer_goods tcg INNER JOIN t_goods tg ON tcg.goods_id = tg.goods_id INNER JOIN t_goods_file tgf ON tgf.goods_id = tg.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 WHERE tcg.del_flag = 0 AND tcg.user_id = #{param.userId} AND tcg.shop_id = #{param.shopId} AND tcg.goods_type = 1 AND tcg.cycle_num_flag = 0 ORDER BY tcg.create_time DESC </select> <select id="listMerConsumerGoods" resultType="com.ruoyi.order.domain.vo.MerConsumerGoodsListVo"> SELECT tcg.consumer_goods_id consumerGoodsId, tcg.service_status serviceStatus, tcg.shop_id shopId, tcg.goods_type goodsType, tg.goods_name goodsName, tgf.file_url goodsPicture, tg.goods_nurses goodsNurses, tcg.cycle_num_flag cycleNumFlag, tcg.service_num serviceNum, tcg.used_num usedNum FROM t_consumer_goods tcg INNER JOIN t_goods tg ON tcg.goods_id = tg.goods_id INNER JOIN t_goods_file tgf ON tgf.goods_id = tg.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 WHERE tcg.del_flag = 0 AND tcg.user_id = #{param.userId} AND tcg.shop_id = #{param.shopId} AND tcg.goods_type = #{param.goodsType} AND tcg.cycle_num_flag = 1 ORDER BY tcg.create_time DESC </select> </mapper> ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -174,7 +174,7 @@ toc.order_id orderId, toc.order_no orderNo, toc.order_status orderStatus, tooc.order_from orderFrom, toc.order_from orderFrom, toc.receivable_money receivableMoney, toc.goods_num goodsNum, toc.shop_id shopId, @@ -198,4 +198,17 @@ ORDER BY toc.create_time DESC </select> <select id="pageUserOrder" resultType="com.ruoyi.order.domain.vo.MerMemberNoClearOrderVo"> SELECT toc.order_id orderId, toc.order_no orderNo, toc.order_money orderGoodsMoney, toc.coupon_money couponDiscount, toc.receivable_money receivableMoney, toc.receivable_deposit receivableDeposit, toc.pay_money payMoney FROM t_order toc WHERE toc.del_flag = 0 AND toc.user_id = #{userId} AND toc.orderStatus = 2 AND toc.close_flag = 0 ORDER BY toc.create_time DESC </select> </mapper> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -27,7 +27,7 @@ @Resource private ShopService shopService; @InnerAuth @PostMapping("/getShop") public R<Shop> getShop(@RequestBody Long shopId) { ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/ConfigController.java
@@ -23,7 +23,7 @@ @Resource private SysTagService sysTagService; @InnerAuth @PostMapping("/getSysTag") public R<SysTag> getSysTag(@RequestBody Long sysTagId) { ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java
@@ -352,10 +352,11 @@ * @date 2023/4/30 15:36 * @version 1.0 */ @InnerAuth @PostMapping("/getSysUser") public R<SysUser> getSysUser(@RequestBody Long userId){ logger.info("userId"+userId); SysUser sysUser = userService.selectUserById(userId); logger.info("sysUser"+sysUser.toString()); return R.ok(sysUser); } @@ -367,7 +368,7 @@ */ @PostMapping("/registerUser") public R<SysUser> registerUser(@RequestBody SysUser sysUser){ sysUser = userService.registerUser(sysUser); userService.registerUser(sysUser); return R.ok(sysUser); } @@ -379,7 +380,6 @@ * @date 2023/4/30 15:32 * @version 1.0 */ @InnerAuth @PostMapping("/updateUserMobile") public R updateUserMobile(@RequestBody SysUser sysUser){ userService.updateUserMobile(sysUser); @@ -391,7 +391,6 @@ * @param appEditUserDto * @return */ @InnerAuth @PostMapping("/editUserInfo") public R editUserInfo(@RequestBody AppEditUserDto appEditUserDto){ userService.editUserInfo(appEditUserDto);