Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

小么熊🐻 3 vuotta sitten
vanhempi
commit
ef5f913fd6
38 muutettua tiedostoa jossa 718 lisäystä ja 271 poistoa
  1. 2 2
      jkt-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java
  2. 46 1
      jkt-admin/src/main/java/com/miaxis/pc/controller/vip/VipCodeController.java
  3. 94 0
      jkt-admin/src/main/java/com/miaxis/pc/controller/wx/PcWxController.java
  4. 1 0
      jkt-admin/src/main/java/com/miaxis/system/controller/system/SysConfigController.java
  5. 42 2
      jkt-admin/src/main/java/com/miaxis/system/controller/system/SysLoginController.java
  6. 4 4
      jkt-admin/src/main/java/com/miaxis/system/controller/system/SysUserController.java
  7. 2 1
      jkt-admin/src/main/resources/application-dev.yml
  8. 12 0
      jkt-common/pom.xml
  9. 18 0
      jkt-common/src/main/java/com/miaxis/common/core/domain/WxUserInfo.java
  10. 16 0
      jkt-common/src/main/java/com/miaxis/common/core/domain/entity/SysUser.java
  11. 17 0
      jkt-common/src/main/java/com/miaxis/common/core/domain/model/AppleResult.java
  12. 28 0
      jkt-common/src/main/java/com/miaxis/common/core/domain/vo/AgentVO.java
  13. 2 1
      jkt-common/src/main/java/com/miaxis/common/enums/StudentLoginTypeEnum.java
  14. 106 0
      jkt-common/src/main/java/com/miaxis/common/utils/AppleUtil.java
  15. 2 2
      jkt-framework/src/main/java/com/miaxis/framework/config/SecurityConfig.java
  16. 1 1
      jkt-framework/src/main/java/com/miaxis/framework/security/token/OpenIdAuthenticationToken.java
  17. 2 0
      jkt-framework/src/main/java/com/miaxis/framework/web/service/SysLoginService.java
  18. 23 3
      jkt-framework/src/main/java/com/miaxis/framework/web/service/UserDetailsServiceImpl.java
  19. 11 0
      jkt-service/src/main/java/com/miaxis/apple/service/IAppleService.java
  20. 140 0
      jkt-service/src/main/java/com/miaxis/apple/service/impl/AppleServiceImpl.java
  21. 15 0
      jkt-service/src/main/java/com/miaxis/vip/domain/VipCode.java
  22. 3 0
      jkt-service/src/main/java/com/miaxis/vip/dto/QueryVipCodeListDTO.java
  23. 0 27
      jkt-service/src/main/java/com/miaxis/wx/dto/CinemaData.java
  24. 0 28
      jkt-service/src/main/java/com/miaxis/wx/dto/FilmWxOrderJsonData.java
  25. 0 50
      jkt-service/src/main/java/com/miaxis/wx/dto/FilmWxpayRefundDTO.java
  26. 0 22
      jkt-service/src/main/java/com/miaxis/wx/dto/FuluWxOrderJsonData.java
  27. 0 70
      jkt-service/src/main/java/com/miaxis/wx/dto/WxFuluOrderDetailDTO.java
  28. 0 55
      jkt-service/src/main/java/com/miaxis/wx/dto/WxFuluOrderNotifyDTO.java
  29. 2 0
      jkt-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java
  30. 13 0
      jkt-service/src/main/java/com/miaxis/wx/service/WxService.java
  31. 20 0
      jkt-service/src/main/java/com/miaxis/wx/service/impl/RefundRecordServiceImpl.java
  32. 14 0
      jkt-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java
  33. 3 0
      jkt-service/src/main/resources/mapper/vip/VipCodeMapper.xml
  34. 21 0
      jkt-system/src/main/java/com/miaxis/system/dto/system/AppleTokenDTO.java
  35. 7 0
      jkt-system/src/main/java/com/miaxis/system/mapper/SysUserMapper.java
  36. 7 0
      jkt-system/src/main/java/com/miaxis/system/service/ISysUserService.java
  37. 16 0
      jkt-system/src/main/java/com/miaxis/system/service/impl/SysUserServiceImpl.java
  38. 28 2
      jkt-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 2 - 2
jkt-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -77,8 +77,8 @@ public class WxController extends BaseController {
 
 
 
-//
-//
+
+
 //    @GetMapping("/order/list")
 //    @ApiOperation("查询订单列表")
 //    @ApiImplicitParams({

+ 46 - 1
jkt-admin/src/main/java/com/miaxis/pc/controller/vip/VipCodeController.java

@@ -6,6 +6,13 @@ import java.util.List;
 import java.util.Arrays;
 import java.util.Random;
 
+import com.miaxis.common.core.domain.entity.SysRole;
+import com.miaxis.common.core.domain.entity.SysUser;
+import com.miaxis.common.core.domain.vo.AgentVO;
+import com.miaxis.common.exception.CustomException;
+import com.miaxis.common.utils.SecurityUtils;
+import com.miaxis.system.service.ISysRoleService;
+import com.miaxis.system.service.ISysUserService;
 import com.miaxis.vip.dto.QueryVipCodeListDTO;
 import io.swagger.annotations.*;
 import com.miaxis.common.core.domain.Response;
@@ -41,6 +48,12 @@ public class VipCodeController extends BaseController{
     @Autowired
     private IVipCodeService vipCodeService;
 
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private ISysRoleService roleService;
+
     /**
      * 查询激活码列表
      */
@@ -51,12 +64,30 @@ public class VipCodeController extends BaseController{
             @ApiImplicitParam(name = "pageNum",value = "当前页码" ,dataType = "int", paramType = "query", required = false),
             @ApiImplicitParam(name = "pageSize",value = "每页数据量" , dataType = "int", paramType = "query", required = false),
     })
-    public ResponsePageInfo<VipCode> list(@ModelAttribute QueryVipCodeListDTO dto){
+    public ResponsePageInfo<VipCode> list(QueryVipCodeListDTO dto){
         startPage();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        dto.setAgentId(user.getUserId()==1l? dto.getAgentId(): user.getUserId());
         List<VipCode> list = vipCodeService.selectVipCodeList(dto);
         return toResponsePageInfo(list);
     }
 
+
+    /**
+     * 查询代理商列表
+     */
+    @PreAuthorize("@ss.hasPermi('vip:code:list')")
+    @GetMapping("/agentList")
+    @ApiOperation("查询代理商列表")
+    public Response<List<AgentVO>> agentList(String agentName){
+        SysRole sysRole = new SysRole();
+        sysRole.setRoleKey("agent");
+        List<SysRole> sysRoles = roleService.selectRoleList(sysRole);
+        Long roleId = sysRoles.get(0).getRoleId();
+        List<AgentVO> sysUsersList =  userService.getAgentList(roleId,agentName);
+        return Response.success(sysUsersList);
+    }
+
     /**
      * 导出激活码列表
      */
@@ -91,13 +122,27 @@ public class VipCodeController extends BaseController{
     @PostMapping
     @ApiOperation("新增激活码")
     public Response<String> add(){
+        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+        if (sysUser.getAgentType() == null) {
+            throw new CustomException("用户还未成为会员");
+        }
+        if ( "1".equals(sysUser.getAgentType()) && sysUser.getAgentRemainingNumber() <= 0){
+            throw new CustomException("剩余券码已不足");
+        }
+        if ( "2".equals(sysUser.getAgentType()) && sysUser.getAgentExpireTime().getTime()< System.currentTimeMillis()){
+            throw new CustomException("代理权限已过期");
+        }
         VipCode vipCode = new VipCode();
         String rVipCode = null ;
         do {
             rVipCode  = randomVipcode();
         }while (isRepeat(rVipCode));
         vipCode.setVipCode(rVipCode);
+        vipCode.setAgentId(SecurityUtils.getLoginUser().getUser().getUserId());
         vipCodeService.save(vipCode);
+        if ( "1".equals(sysUser.getAgentType()) ){
+            userService.updateAgentRemainingNumber(sysUser.getUserId());
+        }
         return Response.success(rVipCode);
     }
 

+ 94 - 0
jkt-admin/src/main/java/com/miaxis/pc/controller/wx/PcWxController.java

@@ -0,0 +1,94 @@
+package com.miaxis.pc.controller.wx;
+
+import com.miaxis.common.annotation.Log;
+import com.miaxis.common.core.controller.BaseController;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.page.ResponsePageInfo;
+import com.miaxis.common.enums.BusinessTypeEnum;
+import com.miaxis.common.enums.OrderStatusEnum;
+import com.miaxis.common.exception.CustomException;
+import com.miaxis.common.utils.StringUtils;
+import com.miaxis.wx.domain.WxOrder;
+import com.miaxis.wx.dto.PcWxOrderListDTO;
+import com.miaxis.wx.dto.WxNotifyReturnDTO;
+import com.miaxis.wx.service.IRefundRecordService;
+import com.miaxis.wx.service.IWxOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
+
+/**
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/activities/wx")
+@Api(tags = {"【pc-订单】"})
+@Slf4j
+class PcWxController extends BaseController {
+
+
+
+    @Autowired
+    private IWxOrderService wxOrderService;
+
+    @Autowired
+    private IRefundRecordService refundRecordService;
+
+
+
+
+    @GetMapping("/order/list")
+    @ApiOperation("查询订单列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum",value = "当前页码" ,dataType = "int", paramType = "query", required = false),
+            @ApiImplicitParam(name = "pageSize",value = "每页数据量" , dataType = "int", paramType = "query", required = false),
+    })
+    @PreAuthorize("@ss.hasPermi('activities:order:list')")
+    public ResponsePageInfo<WxOrder> list(@ModelAttribute PcWxOrderListDTO pcWxOrderListDTO){
+        startPage();
+        List<WxOrder> list = wxOrderService.selectPcOrderList(pcWxOrderListDTO);
+        return toResponsePageInfo(list);
+    }
+
+
+
+    /**
+     * 订单退款
+     */
+    @PreAuthorize("@ss.hasPermi('activities:order:refund')")
+    @Log(title = "订单退款", businessType = BusinessTypeEnum.UPDATE)
+    @PutMapping
+    @ApiOperation("订单退款")
+    public Response refund(String outTradeNo) throws Exception {
+        if (StringUtils.isEmpty(outTradeNo)){
+            throw new CustomException("订单号必传");
+        }
+        WxOrder wxOrder = wxOrderService.getByOutTradeNo(outTradeNo);
+        String refundCode = getOrderCode(null);
+        refundRecordService.refund(wxOrder, refundCode, "学车会员退款");
+        return Response.success();
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 1 - 0
jkt-admin/src/main/java/com/miaxis/system/controller/system/SysConfigController.java

@@ -2,6 +2,7 @@ package com.miaxis.system.controller.system;
 
 import com.miaxis.common.annotation.Log;
 import com.miaxis.common.annotation.RepeatSubmit;
+import com.miaxis.common.constant.Constants;
 import com.miaxis.common.constant.UserConstants;
 import com.miaxis.common.core.controller.BaseController;
 import com.miaxis.common.core.domain.Response;

+ 42 - 2
jkt-admin/src/main/java/com/miaxis/system/controller/system/SysLoginController.java

@@ -1,7 +1,9 @@
 package com.miaxis.system.controller.system;
 
 import com.alibaba.fastjson.JSONObject;
+import com.miaxis.apple.service.IAppleService;
 import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.domain.WxUserInfo;
 import com.miaxis.common.core.domain.entity.SysMenu;
 import com.miaxis.common.core.domain.entity.SysUser;
 import com.miaxis.common.core.domain.model.LoginBody;
@@ -9,12 +11,14 @@ import com.miaxis.common.core.domain.model.LoginBodyNoCode;
 import com.miaxis.common.core.domain.model.LoginUser;
 import com.miaxis.common.enums.StudentLoginTypeEnum;
 import com.miaxis.common.exception.CustomException;
+import com.miaxis.common.utils.AppleUtil;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.ServletUtils;
 import com.miaxis.framework.web.service.SysLoginService;
 import com.miaxis.framework.web.service.SysPermissionService;
 import com.miaxis.framework.web.service.TokenService;
 import com.miaxis.system.dto.common.RouterDTO;
+import com.miaxis.system.dto.system.AppleTokenDTO;
 import com.miaxis.system.dto.system.TokenDTO;
 import com.miaxis.system.dto.system.UserInfoDTO;
 import com.miaxis.system.service.ISysMenuService;
@@ -31,7 +35,11 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -55,6 +63,9 @@ public class SysLoginController
     @Autowired
     private TokenService tokenService;
 
+    @Resource
+    private IAppleService appleService;
+
 
     @Autowired
     private WxService wxService;
@@ -124,7 +135,11 @@ public class SysLoginController
         if (wxResult.getErrcode() != null){
             throw new CustomException("微信授权无效,请重新授权");
         }
-        String token = loginService.login(wxResult.getOpenid(),null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
+        String userInfoStr = wxService.getUserInfo("zh_CN", wxResult.getAccess_token(), wxResult.getOpenid());
+        WxUserInfo wxUserInfo = JSONObject.parseObject(userInfoStr,WxUserInfo.class);
+        ServletUtils.getRequest().setAttribute("headImage",wxUserInfo.getHeadimgurl());
+        ServletUtils.getRequest().setAttribute("nickName",wxUserInfo.getNickname());
+        String token = loginService.login(wxUserInfo.getOpenid(),null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
         TokenDTO tokenDTO = new TokenDTO();
         tokenDTO.setToken(token);
         tokenDTO.setWxResult(wxResult);
@@ -136,13 +151,38 @@ public class SysLoginController
     @PostMapping("/login/code/test")
     @ApiOperation("用户授权码模式登录--测试")
     public Response<TokenDTO> testloginByAuthorizationCode(String authorizationCode ){
-        String token = loginService.login("oN0Np5sK6JeTRa06hlE4-OkHDlDY",null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
+        WxUserInfo wxUserInfo = new WxUserInfo();
+        wxUserInfo.setOpenid("oN0Np5sK6JeTRa06hlE4-OkHDlDY");
+        wxUserInfo.setNickname("Sss");
+        wxUserInfo.setSex("0");
+        wxUserInfo.setHeadimgurl("https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erGMFzKaOmz6cIaA0J1nicWSlBLdLKY46N5CNCoASiajT7Z3RIfPngPhJsjmqsSjGCFibPU4vCtfz3aw/132");
+        ServletUtils.getRequest().setAttribute("headImage",wxUserInfo.getHeadimgurl());
+        ServletUtils.getRequest().setAttribute("nickName",wxUserInfo.getNickname());
+        String token = loginService.login(wxUserInfo.getOpenid(),null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
         TokenDTO tokenDTO = new TokenDTO();
         tokenDTO.setToken(token);
         return Response.success(tokenDTO) ;
 
 
 
+    }
+
+    @PostMapping("/login/code/ios")
+    @ApiOperation("IOS登录")
+    public Response<AppleTokenDTO> ioslogin(String identityToken){
+        try {
+            JSONObject appleUser = appleService.getAppleUserInfo(identityToken);
+            String token = loginService.login(appleUser.getString("sub"),null, StudentLoginTypeEnum.IOS_CODE_LOGIN.getCode());
+            AppleTokenDTO tokenDTO = new AppleTokenDTO();
+            tokenDTO.setAppleUserInfo(appleUser);
+            tokenDTO.setToken(token);
+            return Response.success(tokenDTO);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new CustomException("获取苹果用户信息失败");
+        }
+
+
     }
 
 //

+ 4 - 4
jkt-admin/src/main/java/com/miaxis/system/controller/system/SysUserController.java

@@ -146,10 +146,10 @@ public class SysUserController extends BaseController
         {
             return Response.error(ResponseEnum.USER_ADD_ERROR_PHONE);
         }
-        else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
-        {
-            return Response.error(ResponseEnum.USER_ADD_ERROR_MAIL);
-        }
+//        else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+//        {
+//            return Response.error(ResponseEnum.USER_ADD_ERROR_MAIL);
+//        }
         user.setCreateBy(SecurityUtils.getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         return toResponse(userService.insertUser(user));

+ 2 - 1
jkt-admin/src/main/resources/application-dev.yml

@@ -6,7 +6,8 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://192.168.8.213:3306/jkt?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                #url: jdbc:mysql://192.168.8.213:3306/jkt?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+                url: jdbc:mysql://1.15.26.233:3307/twzd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
                 username: root
                 password: miaxis110
             # 从库数据源

+ 12 - 0
jkt-common/pom.xml

@@ -169,6 +169,18 @@
             </exclusions>
         </dependency>
 
+        <!--IOS登录-->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>jwks-rsa</artifactId>
+            <version>0.9.0</version>
+        </dependency>
+
         <!--<dependency>-->
             <!--<groupId>com.tencentcloudapi</groupId>-->
             <!--<artifactId>tencentcloud-sdk-java</artifactId>-->

+ 18 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/WxUserInfo.java

@@ -0,0 +1,18 @@
+package com.miaxis.common.core.domain;
+
+
+import lombok.Data;
+
+@Data
+public class WxUserInfo {
+     String openid;
+     String nickname;
+     String sex;
+     String province;
+     String city;
+     String country;
+     String headimgurl;
+     String[] privilege;
+     String unionid;
+
+}

+ 16 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/entity/SysUser.java

@@ -1,5 +1,6 @@
 package com.miaxis.common.core.domain.entity;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.miaxis.common.annotation.Excel;
@@ -96,6 +97,21 @@ public class SysUser extends BaseEntity
     @ApiModelProperty(value = "最后登录时间")
     private Date loginDate;
 
+
+    /** 代理类型 1-限制数量 2-限制时间 */
+    @ApiModelProperty(value = "代理类型 1-限制数量 2-限制时间")
+    private String agentType;
+
+
+    /** 剩余数量 */
+    @ApiModelProperty(value = "剩余数量")
+    private Integer agentRemainingNumber;
+
+    /** 限时过期时间 */
+    @Excel(name = "限时过期时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date agentExpireTime;
+
     /** 部门对象 */
     @Excels({
         @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),

+ 17 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/model/AppleResult.java

@@ -0,0 +1,17 @@
+package com.miaxis.common.core.domain.model;
+
+
+import lombok.Data;
+
+@Data
+public class AppleResult {
+     String openid;
+     String access_token;
+     String refresh_token;
+     Integer expire_in;
+     String scope;
+     String unionid;
+     String errcode;
+     String errmsg;
+
+}

+ 28 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/vo/AgentVO.java

@@ -0,0 +1,28 @@
+package com.miaxis.common.core.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+public class AgentVO {
+    private static final long serialVersionUID = 1L;
+
+
+    @TableId(value = "user_id")
+    @ApiModelProperty(value = "主键")
+    private Long userId;
+
+
+
+    @TableField("user_name")
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+
+
+
+
+
+}

+ 2 - 1
jkt-common/src/main/java/com/miaxis/common/enums/StudentLoginTypeEnum.java

@@ -7,7 +7,8 @@ package com.miaxis.common.enums;
  */
 public enum StudentLoginTypeEnum
 {
-    AUTHORIZATION_CODE_LOGIN("1", "授权码登录");
+    AUTHORIZATION_CODE_LOGIN("1", "授权码登录"),
+    IOS_CODE_LOGIN("2", "IOS授权码登录");
 
     private final String code;
     private final String info;

+ 106 - 0
jkt-common/src/main/java/com/miaxis/common/utils/AppleUtil.java

@@ -0,0 +1,106 @@
+package com.miaxis.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.auth0.jwk.Jwk;
+import io.jsonwebtoken.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.client.RestTemplate;
+
+import java.security.PublicKey;
+
+public class AppleUtil {
+
+    private static final Logger logger = LoggerFactory.getLogger(AppleUtil.class);
+    /**
+     * 获取苹果的公钥
+     * @return
+     * @throws Exception
+     */
+    private static JSONArray getAuthKeys() throws Exception {
+        String url = "https://appleid.apple.com/auth/keys";
+        RestTemplate restTemplate = new RestTemplate();
+        JSONObject json = restTemplate.getForObject(url,JSONObject.class);
+        JSONArray arr = json.getJSONArray("keys");
+        return arr;
+    }
+
+    public static Boolean verify(String jwt) throws  Exception{
+        JSONArray arr = getAuthKeys();
+        if(arr == null){
+            return false;
+        }
+        JSONObject authKey = null;
+
+        //先取苹果第一个key进行校验
+        authKey = JSONObject.parseObject(arr.getString(0));
+        if(verifyExc(jwt, authKey)){
+            return true;
+        }else{
+            //再取第二个key校验
+            authKey = JSONObject.parseObject(arr.getString(1));
+            return verifyExc(jwt, authKey);
+        }
+
+    }
+
+    /**
+     * 对前端传来的identityToken进行验证
+     * @param jwt 对应前端传来的 identityToken
+     * @param authKey 苹果的公钥 authKey
+     * @return
+     * @throws Exception
+     */
+    public static Boolean verifyExc(String jwt, JSONObject authKey) throws Exception {
+
+        Jwk jwa = Jwk.fromValues(authKey);
+        PublicKey publicKey = jwa.getPublicKey();
+
+        String aud = "";
+        String sub = "";
+        if (jwt.split("\\.").length > 1) {
+            String claim = new String(Base64.decode(jwt.split("\\.")[1]));
+            aud = JSONObject.parseObject(claim).get("aud").toString();
+            sub = JSONObject.parseObject(claim).get("sub").toString();
+        }
+        JwtParser jwtParser = Jwts.parser().setSigningKey(publicKey);
+        jwtParser.requireIssuer("https://appleid.apple.com");
+        jwtParser.requireAudience(aud);
+        jwtParser.requireSubject(sub);
+
+        try {
+            Jws<Claims> claim = jwtParser.parseClaimsJws(jwt);
+            if (claim != null && claim.getBody().containsKey("auth_time")) {
+                System.out.println(claim);
+                return true;
+            }
+            return false;
+        } catch (ExpiredJwtException e) {
+            logger.error("apple identityToken expired", e);
+            return false;
+        } catch (Exception e) {
+            logger.error("apple identityToken illegal", e);
+            return false;
+        }
+    }
+
+
+
+    /**
+     * 对前端传来的JWT字符串identityToken的第二部分进行解码
+     * 主要获取其中的aud和sub,aud大概对应ios前端的包名,sub大概对应当前用户的授权的openID
+     * @param identityToken
+     * @return  {"aud":"com.xkj.****","sub":"000***.8da764d3f9e34d2183e8da08a1057***.0***","c_hash":"UsKAuEoI-****","email_verified":"true","auth_time":1574673481,"iss":"https://appleid.apple.com","exp":1574674081,"iat":1574673481,"email":"****@qq.com"}
+     */
+    public static JSONObject parserIdentityToken(String identityToken){
+        String[] arr = identityToken.split("\\.");
+        Base64 base64 = new Base64();
+        String decode = new String (base64.decode(arr[1]));
+        String substring = decode.substring(0, decode.indexOf("}")+1);
+        JSONObject jsonObject = JSON.parseObject(substring);
+        return  jsonObject;
+    }
+
+}

+ 2 - 2
jkt-framework/src/main/java/com/miaxis/framework/config/SecurityConfig.java

@@ -100,9 +100,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 .authorizeRequests()
                 // 对于app 开放页面,允许任意访问
-                .antMatchers("/**/open-api/**").permitAll()
+                .antMatchers("/**/open-api/**","/system/config/configKey/**").permitAll()
                 // 对于登录login 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/login/noCode","/captchaImage","/login/code","/login/code/test","/login/jscode-test").anonymous()
+                .antMatchers("/login", "/login/noCode","/captchaImage","/login/code","/login/code/test","/login/jscode-test","/login/code/ios").anonymous()
                 //.antMatchers("/student/open/**").permitAll()
                 .antMatchers("/student/**").hasRole("STUDENT")
                 .antMatchers(

+ 1 - 1
jkt-framework/src/main/java/com/miaxis/framework/security/token/OpenIdAuthenticationToken.java

@@ -57,8 +57,8 @@ public class OpenIdAuthenticationToken extends AbstractAuthenticationToken {
 	 */
 	public OpenIdAuthenticationToken(Object principal, Collection<? extends GrantedAuthority> authorities) {
 		super(authorities);
-		this.principal = principal;
 		super.setAuthenticated(true); // must use super, as we override
+		this.principal = principal;
 	}
 
 	// ~ Methods

+ 2 - 0
jkt-framework/src/main/java/com/miaxis/framework/web/service/SysLoginService.java

@@ -1,6 +1,7 @@
 package com.miaxis.framework.web.service;
 
 import com.miaxis.common.constant.Constants;
+import com.miaxis.common.core.domain.WxUserInfo;
 import com.miaxis.common.core.domain.model.LoginUser;
 import com.miaxis.common.core.redis.RedisCache;
 import com.miaxis.common.enums.StudentLoginTypeEnum;
@@ -97,6 +98,7 @@ public class SysLoginService
     public String login(String principal, String credential, String loginType) {
 
         ServletUtils.getRequest().setAttribute("loginType",loginType);
+
         // 用户验证
         if (StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode().equals(loginType)){
             return authenticate(principal,new OpenIdAuthenticationToken(principal));

+ 23 - 3
jkt-framework/src/main/java/com/miaxis/framework/web/service/UserDetailsServiceImpl.java

@@ -69,14 +69,34 @@ public class UserDetailsServiceImpl implements UserDetailsService
                 UserInfo userInfo = userService.getStudentByOpenId(identification);
                 if (userInfo == null) {
                     userInfo = new UserInfo();
-//                    userInfo.setHeadImage(configService.selectConfigByKey("xcx_user_image"));
-//                    userInfo.setNickName("用户未授权_"+RandomNameUtils.generateName());
+                    userInfo.setHeadImage((String) ServletUtils.getRequest().getAttribute("headImage"));
+                    userInfo.setNickName((String) ServletUtils.getRequest().getAttribute("nickName"));
                     userInfo.setOpenid(identification);
+                    userInfo.setIsVip(0);
                     userService.saveUserInfo(userInfo);
+                    userInfo = userService.getStudentByOpenId(identification);
+                }else {
+                    userInfo.setHeadImage((String) ServletUtils.getRequest().getAttribute("headImage"));
+                    userInfo.setNickName((String) ServletUtils.getRequest().getAttribute("nickName"));
+                    userService.updateStudent(userInfo);
                 }
                 return createLoginUser(userInfo);
             }
-        } else{
+        }
+        else if (StudentLoginTypeEnum.IOS_CODE_LOGIN.getCode().equals(loginType)){
+            {
+                UserInfo userInfo = userService.getStudentByOpenId(identification);
+                if (userInfo == null) {
+                    userInfo = new UserInfo();
+                    userInfo.setOpenid(identification);
+                    userService.saveUserInfo(userInfo);
+                }
+                return createLoginUser(userInfo);
+            }
+        }
+
+
+        else{
             throw new CustomException("登录类型不存在");
         }
 

+ 11 - 0
jkt-service/src/main/java/com/miaxis/apple/service/IAppleService.java

@@ -0,0 +1,11 @@
+package com.miaxis.apple.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Map;
+
+public interface IAppleService {
+
+    JSONObject getAppleUserInfo(String identityToken) throws Exception;
+
+}

+ 140 - 0
jkt-service/src/main/java/com/miaxis/apple/service/impl/AppleServiceImpl.java

@@ -0,0 +1,140 @@
+package com.miaxis.apple.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.auth0.jwk.Jwk;
+import com.miaxis.apple.service.IAppleService;
+import com.miaxis.common.exception.CustomException;
+import io.jsonwebtoken.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+import org.apache.tomcat.util.codec.binary.Base64;
+
+import java.security.PublicKey;
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Slf4j
+@Service
+public class AppleServiceImpl  implements IAppleService {
+    @Override
+    public JSONObject getAppleUserInfo(String identityToken) throws Exception {
+
+        Map<String, Object> result = new HashMap<>(1);
+
+        //验证identityToken
+        if (!verify(identityToken)) {
+           throw new CustomException("验证identityToken失败");
+        }
+        //对identityToken解码
+        JSONObject json = parserIdentityToken(identityToken);
+        if (json == null) {
+            throw new CustomException("identityToken解码失败");
+        }
+        return json;
+    }
+
+    /**
+     * 对前端传来的JWT字符串identityToken的第二部分进行解码
+     * 主要获取其中的aud和sub,aud大概对应ios前端的包名,sub大概对应当前用户的授权的openID
+     *
+     * @param identityToken 身份token
+     * @return {"aud":"com.xkj.****","sub":"000***.8da764d3f9e34d2183e8da08a1057***.0***","c_hash":"UsKAuEoI-****","email_verified":"true","auth_time":1574673481,"iss":"https://appleid.apple.com","exp":1574674081,"iat":1574673481,"email":"****@qq.com"}
+     */
+    private JSONObject parserIdentityToken(String identityToken) {
+        String[] arr = identityToken.split("\\.");
+        String decode = new String(Base64.decodeBase64(arr[1]));
+        String substring = decode.substring(0, decode.indexOf("}") + 1);
+        return JSONObject.parseObject(substring);
+    }
+
+
+    public Boolean verify(String jwt) throws Exception {
+        JSONArray arr = getAuthKeys();
+        if (arr == null) {
+            return false;
+        }
+        for (int i=0; i < arr.size() ; i ++ ){
+            JSONObject authKey = null;
+            authKey = arr.getJSONObject(i);
+            if (verifyExc(jwt, authKey)) {
+                return true;
+            }
+        }
+        return false;
+
+
+
+    }
+
+
+    /**
+     * 对前端传来的identityToken进行验证
+     *
+     * @param jwt     对应前端传来的 identityToken
+     * @param authKey 苹果的公钥 authKey
+     * @return
+     * @throws Exception
+     */
+    private static Boolean verifyExc(String jwt, JSONObject authKey) throws Exception {
+
+        Jwk jwa = Jwk.fromValues(authKey);
+        PublicKey publicKey = jwa.getPublicKey();
+
+        String aud = "";
+        String sub = "";
+        String kid = "";
+        if (jwt.split("\\.").length > 1) {
+            System.out.println(jwt.split("\\.")[1]);
+            String claim = new String(Base64.decodeBase64(jwt.split("\\.")[1]));
+            aud = JSONObject.parseObject(claim).get("aud").toString();
+            sub = JSONObject.parseObject(claim).get("sub").toString();
+            String firstClaim = new String(Base64.decodeBase64(jwt.split("\\.")[0]));
+            kid = JSONObject.parseObject(firstClaim).get("kid").toString();
+        }
+        if (!kid.equals(authKey.getString("kid"))){
+            return false;
+        }
+
+
+            JwtParser jwtParser = Jwts.parser().setSigningKey(publicKey);
+            jwtParser.requireIssuer("https://appleid.apple.com");
+            jwtParser.requireAudience(aud);
+            jwtParser.requireSubject(sub);
+
+            try {
+                Jws<Claims> claim = jwtParser.parseClaimsJws(jwt);
+                if (claim != null && claim.getBody().containsKey("auth_time")) {
+                    System.out.println(claim);
+                    return true;
+                }
+                return false;
+            } catch (ExpiredJwtException e) {
+                log.error("[AppleServiceImpl.verifyExc] [error] [apple identityToken expired]", e);
+                return false;
+            } catch (Exception e) {
+                log.error("[AppleServiceImpl.verifyExc] [error] [apple identityToken illegal]", e);
+                return false;
+            }
+
+    }
+
+
+    /**
+     * 获取苹果的公钥
+     *
+     * @return
+     */
+    private static JSONArray getAuthKeys() {
+        String url = "https://appleid.apple.com/auth/keys";
+        RestTemplate restTemplate = new RestTemplate();
+        JSONObject json = restTemplate.getForObject(url, JSONObject.class);
+        if (json != null) {
+            return json.getJSONArray("keys");
+        }
+        return null;
+    }
+}

+ 15 - 0
jkt-service/src/main/java/com/miaxis/vip/domain/VipCode.java

@@ -56,6 +56,21 @@ public class VipCode extends BaseBusinessEntity{
     @ApiModelProperty(value = "激活用户id")
     private Long activationUserId;
 
+    /** 激活码 */
+    @Excel(name = "代理商id")
+    @TableField("agent_id")
+    @ApiModelProperty(value = "代理商id")
+    private Long agentId;
+
+//    /** 激活码 */
+//    @Excel(name = "代理商名称")
+//    @TableField("agent_name")
+//    @ApiModelProperty(value = "代理商名称")
+//    private String agentName;
+
+
+
+
     public void setId(Long id){
         this.id = id;
     }

+ 3 - 0
jkt-service/src/main/java/com/miaxis/vip/dto/QueryVipCodeListDTO.java

@@ -49,5 +49,8 @@ public class QueryVipCodeListDTO extends BaseBusinessEntity{
 //    @JsonFormat(pattern="yyyyMMdd",timezone = "GMT+8")
     private String endTime;
 
+    @ApiModelProperty(value = "代理商id")
+    private Long agentId;
+
 
 }

+ 0 - 27
jkt-service/src/main/java/com/miaxis/wx/dto/CinemaData.java

@@ -1,27 +0,0 @@
-package com.miaxis.wx.dto;
-
-
-import lombok.Data;
-
-
-/**
- * 排期数据
- */
-@Data
-public class CinemaData {
-    Integer netPrice;
-    String planType;
-    String showTime;
-    String language;
-    Integer duration;
-    String showId;
-    String stopSellTime;
-    Integer cinemaId;
-    String cinemaName;
-    Integer filmId;
-    String scheduleArea;
-    String filmName;
-    String hallName;
-    String showVersionType;
-
-}

+ 0 - 28
jkt-service/src/main/java/com/miaxis/wx/dto/FilmWxOrderJsonData.java

@@ -1,28 +0,0 @@
-package com.miaxis.wx.dto;
-
-import com.miaxis.feign.dto.FilmMcpData;
-import lombok.Data;
-
-/**
- * 电影数据
- */
-@Data
-public class FilmWxOrderJsonData {
-    private static final long serialVersionUID = 1L;
-    //电影下单信息
-    private  WxOrderCreateDTO wxOrderCreateDTO;
-    //电影排场信息
-    private CinemaData cinemaData;
-    //电影订单回调信息
-    private WxOrderNotifyDTO wxOrderNotifyDTO ;
-    //快速出票
-    private FilmMcpData filmMcpData;
-
-
-
-
-
-
-
-
-}

+ 0 - 50
jkt-service/src/main/java/com/miaxis/wx/dto/FilmWxpayRefundDTO.java

@@ -1,50 +0,0 @@
-package com.miaxis.wx.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * 微信支付退款 dto
- */
-@Data
-public class FilmWxpayRefundDTO {
-    private static final long serialVersionUID = 1L;
-
-
-    @ApiModelProperty(value = "商户订单号")
-    private String out_trade_no;
-
-    @ApiModelProperty(value = "商户系统内部的退款单号")
-    private String out_refund_no;
-
-
-    @ApiModelProperty(value = "原因")
-    private String reason;
-
-
-    @ApiModelProperty(value = "是否允许调座,1-允许,0-不允许")
-    private WxpaySource resource;
-
-    @ApiModelProperty(value = "回调摘要")
-    private String summary;
-
-
-    @Data
-    public class WxpaySource{
-        @ApiModelProperty(value = "对开启结果数据进行加密的加密算法,目前只支持AEAD_AES_256_GCM")
-        private String algorithm;
-        @ApiModelProperty(value = "Base64编码后的开启/停用结果数据密文")
-        private String ciphertext;
-        @ApiModelProperty(value = "附加数据")
-        private String associated_data;
-        @ApiModelProperty(value = "原始回调类型,为transaction")
-        private String original_type;
-        @ApiModelProperty(value = "加密使用的随机串")
-        private String nonce;
-
-
-    }
-
-
-
-}

+ 0 - 22
jkt-service/src/main/java/com/miaxis/wx/dto/FuluWxOrderJsonData.java

@@ -1,22 +0,0 @@
-package com.miaxis.wx.dto;
-
-import com.miaxis.feign.dto.fulu.FuluGoodsInfo;
-import lombok.Data;
-
-/**
- * 电影数据
- */
-@Data
-public class FuluWxOrderJsonData {
-    private static final long serialVersionUID = 1L;
-    //视频会员下单信息
-    private  WxOrderCreateFuluDTO wxOrderCreateDTO;
-
-    //Fulu商品信息
-    private FuluGoodsInfo fuluGoodsInfo;
-
-
-    //Fulu订单详情
-    private WxFuluOrderDetailDTO wxFuluOrderDetailDTO;
-
-}

+ 0 - 70
jkt-service/src/main/java/com/miaxis/wx/dto/WxFuluOrderDetailDTO.java

@@ -1,70 +0,0 @@
-package com.miaxis.wx.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * 福禄订单详情
- */
-@Data
-public class WxFuluOrderDetailDTO {
-    private static final long serialVersionUID = 1L;
-
-
-
-    @ApiModelProperty(value = "福禄开放平台订单号")
-    private String order_id;
-
-    @ApiModelProperty(value = "合作商家订单号")
-    private String customer_order_no;
-
-    @ApiModelProperty(value = "充值描述")
-    private String recharge_description;
-
-    @ApiModelProperty(value = "运营商流水号")
-    private String operator_serial_number;
-
-
-    @ApiModelProperty(value = "商品Id")
-    private String product_id;
-
-    @ApiModelProperty(value = "商品名称")
-    private String product_name;
-
-    @ApiModelProperty(value = "创建时间,格式为:yyyy-MM-dd HH:mm:ss")
-    private String create_time;
-
-    @ApiModelProperty(value = "交易完成时间,格式为:yyyy-MM-dd HH:mm:ss")
-    private String charge_finish_time;
-
-
-    @ApiModelProperty(value = "充值账号")
-    private String charge_account;
-
-
-
-    @ApiModelProperty(value = "购买数量")
-    private Integer buy_num;
-
-    @ApiModelProperty(value = "订单类型:1-话费 2-流量 3-卡密 4-直充")
-    private Integer order_type;
-
-    @ApiModelProperty(value = "交易单价")
-    private Double order_price;
-
-
-    @ApiModelProperty(value = "订单状态: (success:成功,processing:处理中,failed:失败,untreated:未处理)")
-    private String order_status;
-
-    @ApiModelProperty(value = "签名")
-    private String sign;
-
-
-
-
-
-
-
-
-
-}

+ 0 - 55
jkt-service/src/main/java/com/miaxis/wx/dto/WxFuluOrderNotifyDTO.java

@@ -1,55 +0,0 @@
-package com.miaxis.wx.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * 微信支付回调 dto
- */
-@Data
-public class WxFuluOrderNotifyDTO {
-    private static final long serialVersionUID = 1L;
-
-
-
-    @ApiModelProperty(value = "福禄开放平台订单号")
-    private String order_id;
-
-
-    @ApiModelProperty(value = "交易完成时间,格式为:yyyy-MM-dd HH:mm:ss")
-    private String charge_finish_time;
-
-
-    @ApiModelProperty(value = "合作商家订单号")
-    private String customer_order_no;
-
-    @ApiModelProperty(value = "订单状态")
-    private String order_status;
-
-
-    @ApiModelProperty(value = "充值描述")
-    private String recharge_description;
-
-
-    @ApiModelProperty(value = "商品Id")
-    private String product_id;
-
-    @ApiModelProperty(value = "购买数量")
-    private String buy_num;
-
-    @ApiModelProperty(value = "运营商流水号")
-    private String operator_serial_number;
-
-
-    @ApiModelProperty(value = "签名")
-    private String sign;
-
-
-
-
-
-
-
-
-
-}

+ 2 - 0
jkt-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java

@@ -19,5 +19,7 @@ public interface IWxOrderService extends IService<WxOrder>{
 
     WxOrder getByOutTradeNo(String outTradeNo);
 
+    List<WxOrder> selectPcOrderList(PcWxOrderListDTO pcWxOrderListDTO);
+
 
 }

+ 13 - 0
jkt-service/src/main/java/com/miaxis/wx/service/WxService.java

@@ -30,4 +30,17 @@ public interface WxService {
             @RequestParam("code") String code,
             @RequestParam("grant_type") String grantType);
 
+
+
+    /**
+     * 获取用户信息
+     */
+    @GetMapping(value = "/sns/userinfo")
+    String getUserInfo(
+            @RequestParam("lang") String lang,
+            @RequestParam("access_token") String accessToken,
+            @RequestParam("openid") String openid
+    );
+
+
 }

+ 20 - 0
jkt-service/src/main/java/com/miaxis/wx/service/impl/RefundRecordServiceImpl.java

@@ -1,11 +1,15 @@
 package com.miaxis.wx.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.miaxis.common.config.WxpayConfig;
+import com.miaxis.common.core.domain.entity.UserInfo;
+import com.miaxis.common.enums.OrderStatusEnum;
 import com.miaxis.common.exception.CustomException;
+import com.miaxis.user.service.IUserInfoService;
 import com.miaxis.wx.domain.RefundRecord;
 import com.miaxis.wx.domain.WxOrder;
 import com.miaxis.wx.dto.WxNotifyReturnDTO;
@@ -41,6 +45,9 @@ public class RefundRecordServiceImpl extends ServiceImpl<RefundRecordMapper, Ref
 
     @Autowired
     private WxpayConfig wxpayConfig;
+
+    @Autowired
+    private IUserInfoService userInfoService;
     /**
      * 查询微信退款记录列表
      *
@@ -78,6 +85,7 @@ public class RefundRecordServiceImpl extends ServiceImpl<RefundRecordMapper, Ref
         // 返回数据:
         String bodyAsString = EntityUtils.toString(response.getEntity());
         if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
+            wxOrder.setOutRefundNo(refundCode);
             //  保存退款数据到数据库
             RefundRecord refundRecord = new RefundRecord();
             JSONObject jsonObject = JSONObject.parseObject(bodyAsString);
@@ -89,6 +97,7 @@ public class RefundRecordServiceImpl extends ServiceImpl<RefundRecordMapper, Ref
             refundRecord.setUserReceivedAccount(jsonObject.getString("user_received_account"));
             if (jsonObject.getString("success_time")!=null){
                 refundRecord.setSuccessTime(new DateTime(jsonObject.getString("success_time")).toDate());
+                wxOrder.setTradeState("");
             }
             refundRecord.setCreateTime(new DateTime(jsonObject.getString("create_time")).toDate());
             refundRecord.setStatus(jsonObject.getString("status"));
@@ -104,6 +113,17 @@ public class RefundRecordServiceImpl extends ServiceImpl<RefundRecordMapper, Ref
             refundRecord.setCurrency(amount.getString("currency"));
             this.save(refundRecord);
 
+            //退款完成 解除会员vip身份
+            UserInfo userInfo = userInfoService.getOne(new QueryWrapper<UserInfo>().eq("openid", wxOrder.getOpenid()));
+            userInfo.setIsVip(0);
+            userInfoService.updateById(userInfo);
+
+
+            //改变订单状态
+
+
+
+
             WxNotifyReturnDTO wxNotifyReturnDTO = new WxNotifyReturnDTO();
             wxNotifyReturnDTO.setCode("SUCCESS");
             wxNotifyReturnDTO.setMessage("成功");

+ 14 - 0
jkt-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java

@@ -4,13 +4,16 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.miaxis.common.enums.OrderStatusEnum;
 import com.miaxis.system.service.ISysConfigService;
 import com.miaxis.wx.domain.WxOrder;
+import com.miaxis.wx.dto.PcWxOrderListDTO;
 import com.miaxis.wx.mapper.WxOrderMapper;
+import com.miaxis.wx.service.IRefundRecordService;
 import com.miaxis.wx.service.IWxOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 电影订单Service业务层处理
@@ -29,6 +32,10 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     private ISysConfigService configService;
 
 
+    @Autowired
+    private IRefundRecordService refundRecordService;
+
+
 
     @Override
     public void createVipOrder(WxOrder wxOrder) {
@@ -43,4 +50,11 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     public WxOrder getByOutTradeNo(String outTradeNo) {
         return wxOrderMapper.getByOutTradeNo(outTradeNo);
     }
+
+    @Override
+    public List<WxOrder> selectPcOrderList(PcWxOrderListDTO pcWxOrderListDTO) {
+        return wxOrderMapper.selectPcOrderList(pcWxOrderListDTO);
+    }
+
+
 }

+ 3 - 0
jkt-service/src/main/resources/mapper/vip/VipCodeMapper.xml

@@ -30,6 +30,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="endTime != null">
                 and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ < ]]> #{endTime}
             </if>
+            <if test="agentId != null">
+                and agent_id =  #{agentId}
+            </if>
             order by create_time desc
         </where>
     </select>

+ 21 - 0
jkt-system/src/main/java/com/miaxis/system/dto/system/AppleTokenDTO.java

@@ -0,0 +1,21 @@
+package com.miaxis.system.dto.system;
+
+import com.alibaba.fastjson.JSONObject;
+import com.miaxis.common.core.domain.model.WxResult;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 【Token】DTO
+ *
+ */
+@ApiModel(value = "AppleTokenDTO", description = "AppleTokenDTO")
+@Data
+public class AppleTokenDTO {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "令牌")
+    private String token;
+    @ApiModelProperty(value = "apple用户对象")
+    private JSONObject appleUserInfo;
+}

+ 7 - 0
jkt-system/src/main/java/com/miaxis/system/mapper/SysUserMapper.java

@@ -2,6 +2,7 @@ package com.miaxis.system.mapper;
 
 import com.miaxis.common.core.domain.entity.SysUser;
 import com.miaxis.common.core.domain.entity.UserInfo;
+import com.miaxis.common.core.domain.vo.AgentVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -116,4 +117,10 @@ public interface SysUserMapper
     UserInfo getStudentByName(String username);
 
     void saveUserInfo(UserInfo userInfo);
+
+    List<AgentVO> getAgentList(@Param("roleId")Long roleId, @Param("userName")String userName);
+
+    void updateStudent(UserInfo userInfo);
+
+    void updateAgentRemainingNumber(Long userId);
 }

+ 7 - 0
jkt-system/src/main/java/com/miaxis/system/service/ISysUserService.java

@@ -2,6 +2,7 @@ package com.miaxis.system.service;
 
 import com.miaxis.common.core.domain.entity.SysUser;
 import com.miaxis.common.core.domain.entity.UserInfo;
+import com.miaxis.common.core.domain.vo.AgentVO;
 
 import java.util.List;
 
@@ -176,4 +177,10 @@ public interface ISysUserService
 
 
     void saveUserInfo(UserInfo userInfo);
+
+    List<AgentVO> getAgentList(Long roleId, String agentName);
+
+    void updateStudent(UserInfo userInfo);
+
+    void updateAgentRemainingNumber(Long userId);
 }

+ 16 - 0
jkt-system/src/main/java/com/miaxis/system/service/impl/SysUserServiceImpl.java

@@ -5,6 +5,7 @@ import com.miaxis.common.constant.UserConstants;
 import com.miaxis.common.core.domain.entity.SysRole;
 import com.miaxis.common.core.domain.entity.SysUser;
 import com.miaxis.common.core.domain.entity.UserInfo;
+import com.miaxis.common.core.domain.vo.AgentVO;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.StringUtils;
@@ -462,4 +463,19 @@ public class SysUserServiceImpl implements ISysUserService
     public void saveUserInfo(UserInfo userInfo) {
         userMapper.saveUserInfo(userInfo);
     }
+
+    @Override
+    public List<AgentVO> getAgentList(Long roleId, String agentName) {
+        return userMapper.getAgentList(roleId,agentName);
+    }
+
+    @Override
+    public void updateStudent(UserInfo userInfo) {
+        userMapper.updateStudent(userInfo);
+    }
+
+    @Override
+    public void updateAgentRemainingNumber(Long userId) {
+        userMapper.updateAgentRemainingNumber(userId);
+    }
 }

+ 28 - 2
jkt-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -23,6 +23,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"     column="update_by"    />
 		<result property="updateTime"   column="update_time"  />
 		<result property="remark"       column="remark"       />
+		<result property="agentType"     column="agent_type"    />
+		<result property="agentRemainingNumber"   column="agent_remaining_number"  />
+		<result property="agentExpireTime"       column="agent_expire_time"       />
 		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
 		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 	</resultMap>
@@ -46,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</resultMap>
 
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
+        select u.agent_type,u.agent_remaining_number,u.agent_expire_time,u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
@@ -60,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
 
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, dept_name from sys_user u
+		select u.agent_type,u.agent_remaining_number,u.agent_expire_time,u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, dept_name from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
 		<if test="userName != null and userName != ''">
@@ -102,8 +105,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		insert into user_info (head_image,nick_name,openid) values (#{headImage},#{nickName},#{openid})
 	</insert>
 
+	<select id="getAgentList" resultType="com.miaxis.common.core.domain.vo.AgentVO">
+		  select t.user_id,t.user_name from sys_user t where
+		  1 =1
+		<if test="userName != null and userName != ''">
+			AND user_name like concat('%', #{userName}, '%')
+		</if>
+		and exists (select 1 from sys_user_role where role_id =#{roleId} and user_id = t.user_id)
 
+	</select>
 
+	<insert id="updateStudent" parameterType="com.miaxis.common.core.domain.entity.UserInfo" >
+		update user_info set head_image = #{headImage},nick_name = #{nickName} where openid = #{openid}
+	</insert>
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.user_id = #{userId}
@@ -135,6 +149,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+			<if test="agentType != null and agentType != ''">agent_type,</if>
+			<if test="agentRemainingNumber != null and agentRemainingNumber != ''">agent_remaining_number,</if>
+			<if test="agentExpireTime != null ">agent_expire_time,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -149,6 +166,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+			<if test="agentType != null and agentType != ''">#{agentType},</if>
+			<if test="agentRemainingNumber != null and agentRemainingNumber != ''">#{agentRemainingNumber},</if>
+			<if test="agentExpireTime != null">#{agentExpireTime},</if>
  			sysdate()
  		)
 	</insert>
@@ -169,10 +189,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="loginDate != null">login_date = #{loginDate},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			<if test="remark != null">remark = #{remark},</if>
+			<if test="agentType != null and agentType != ''">agent_type = #{agentType},</if>
+			<if test="agentRemainingNumber != null and agentRemainingNumber != ''">agent_remaining_number = #{agentRemainingNumber},</if>
+			<if test="agentExpireTime != null and agentExpireTime != ''">agent_expire_time = #{agentExpireTime},</if>
  			update_time = sysdate()
  		</set>
  		where user_id = #{userId}
 	</update>
+	<update id="updateAgentRemainingNumber" parameterType="long">
+ 		update sys_user set agent_remaining_number = agent_remaining_number-1 where user_id = #{userId}
+	</update>
 
 	<update id="updateUserStatus" parameterType="SysUser">
  		update sys_user set status = #{status} where user_id = #{userId}