jiangqs
2023-05-05 aa8f41d3b4fcc7aae0bd50fdea92b126f22485df
商户端主流程
31个文件已修改
13个文件已添加
1369 ■■■■■ 已修改文件
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/AppUserAuthorizeDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCashMemberPageDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppUserInfoVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCashMemberPageVo.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberInfoVo.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/util/HttpUtils.java 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerConsumerController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerGoodsController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/ActivityController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerCloseOrderDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerConsumerGoodsDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerGoodsPageDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerMemberNoClearOrderDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerNewOrderDto.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerSureConsumerGoodsDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerSureConsumerGoodsListDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyOrderVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ConsumerGoodsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ConsumerGoodsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/ConfigController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);