소스 검색

益寿缘app-完善奖品接口出参

cgp 1 주 전
부모
커밋
ca782415d4

+ 25 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderAddRewardsParam.java

@@ -0,0 +1,25 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+/**
+ *  App首次注册/看课奖励 创建订单参数
+ * */
+@Data
+public class FsPackageOrderAddRewardsParam {
+    private Long patientId;
+    private Integer payType;
+    @NotNull(message = "packageId不能为空")
+    private Long packageId;
+    private Long userId;
+    private Long addressId;
+    private Long companyId;
+    private Long companyUserId;
+    /**
+     * 订单来源
+     * 10000-首次注册登录App0元订单
+     * 10001-App看课0元订单
+     * */
+    private Integer orderResource;
+}

+ 17 - 8
fs-service/src/main/java/com/fs/his/service/IAppUserRewardService.java

@@ -1,18 +1,11 @@
 package com.fs.his.service;
 
+import com.fs.app.domain.FsAppRole;
 import com.fs.his.domain.FsUserRewards;
 
 import java.util.List;
 
 public interface IAppUserRewardService {
-
-    /**
-     * 判断指定用户是否满足首次注册登录的条件
-     * @param fsUserId 用户ID
-     * @return {@code true} 如果用户是首次登录;否则返回 {@code false}。
-     * */
-    public boolean checkFirstLoginRewardStatus(Long fsUserId);
-
     /**
      * 为当前用户增加首次注册登录待领取的奖励
      * @param fsUserId 用户ID
@@ -32,4 +25,20 @@ public interface IAppUserRewardService {
      * @param rewardsId 奖品ID
      * */
     public void claimRewards(Long fsUserId,Long rewardsId);
+
+    /**
+     * 判断指定用户是否满足首次注册登录的条件
+     * @param fsUserId 用户ID
+     * @return {@code true} 如果用户是首次登录;否则返回 {@code false}。
+     * */
+    public boolean checkFirstLoginRewardStatus(Long fsUserId);
+
+    /**
+     * 首次登录注册App弹窗
+     * */
+    public FsAppRole showFirstLoginRewardWindows(Long fsUserId);
+    /**
+     * App连续看课奖励弹窗
+     * */
+    public FsAppRole showWatchCourseRewardWindows(Long fsUserId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/service/IFsPackageOrderService.java

@@ -106,6 +106,9 @@ public interface IFsPackageOrderService
 
     R addPackageOrder(FsPackageOrderAddParam fsPackageOrder);
 
+    //app首次登陆注册、看课奖励创建0元订单接口
+    R addAppPackageOrder(FsPackageOrderAddRewardsParam rewardsParam);
+
     byte[] getWxaCodeUnLimit(Long orderId);
 
     R aliPayment(FsPackageOrderDoPayParam param);

+ 56 - 18
fs-service/src/main/java/com/fs/his/service/impl/AppUserRewardServiceImpl.java

@@ -42,24 +42,6 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
     @Autowired
     private RewardStrategyFactory strategyFactory;
 
-    @Override
-    public boolean checkFirstLoginRewardStatus(Long fsUserId) {
-        // 1. 查用户表判断是否首次登录注册App
-        FsUser fsUser = fsUserMapper.selectFsUserById(fsUserId);
-        if (fsUser != null && fsUser.getFirstLoginTime() != null) {
-            log.info("用户:{}已注册登录过,非首次登录", fsUserId);
-            return false;
-        }
-
-        // 2. 查奖品表判断是否已发放奖励
-        String activityType = ActivityTypeEnum.FIRST_LOGIN.getCode();
-        FsUserRewards queryReward = rewardsMapper.selectByUserIdAndActivityType(fsUserId, activityType);
-        if (queryReward != null) {
-            log.info("用户:{}已下发过首次注册奖励, status={}", fsUserId, queryReward.getStatus());
-            return false;
-        }
-        return true;
-    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -192,6 +174,62 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
         }
     }
 
+    @Override
+    public boolean checkFirstLoginRewardStatus(Long fsUserId) {
+        // 1. 查用户表判断是否首次登录注册App
+        FsUser fsUser = fsUserMapper.selectFsUserById(fsUserId);
+        if (fsUser != null && fsUser.getFirstLoginTime() != null) {
+            log.info("用户:{}已注册登录过,非首次登录", fsUserId);
+            return false;
+        }
+
+        // 2. 查奖品表判断是否已发放奖励
+        String activityType = ActivityTypeEnum.FIRST_LOGIN.getCode();
+        FsUserRewards queryReward = rewardsMapper.selectByUserIdAndActivityType(fsUserId, activityType);
+        if (queryReward != null) {
+            log.info("用户:{}已下发过首次注册奖励, status={}", fsUserId, queryReward.getStatus());
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public FsAppRole showFirstLoginRewardWindows(Long fsUserId) {
+        FsAppRole fsAppRole =new FsAppRole();
+        // 1. 查用户表判断是否首次登录注册App
+        FsUser fsUser = fsUserMapper.selectFsUserById(fsUserId);
+        if (fsUser != null && fsUser.getFirstLoginTime() != null) {
+            log.info("用户:{}已注册登录过,非首次登录", fsUserId);
+            return fsAppRole;
+        }
+
+        // 2. 查奖品表判断是否已发放奖励
+        String activityType = ActivityTypeEnum.FIRST_LOGIN.getCode();
+        FsUserRewards queryReward = rewardsMapper.selectByUserIdAndActivityType(fsUserId, activityType);
+        if (queryReward == null) {
+            //TODO 查询当前用户对应的角色配置返回红包、积分、商品弹窗信息
+            fsAppRole = appRoleMapper.selectFsAppRoleById(1L);
+            return fsAppRole;
+        }
+        return fsAppRole;
+    }
+
+    @Override
+    public FsAppRole showWatchCourseRewardWindows(Long fsUserId) {
+        FsAppRole fsAppRole =new FsAppRole();
+        FsUser fsUser = fsUserMapper.selectFsUserById(fsUserId);
+        // 2. 查奖品表判断是否已发放奖励
+        String activityType = ActivityTypeEnum.FIRST_LOGIN.getCode();
+        FsUserRewards queryReward = rewardsMapper.selectByUserIdAndActivityType(fsUserId, activityType);
+        if (queryReward == null) {
+            //TODO 查询当前用户对应的角色配置返回红包、积分、商品弹窗信息(还需要判断当前用户是否满足看课奖励)
+            fsAppRole = appRoleMapper.selectFsAppRoleById(1L);
+            //从缓存查询当前用户看课天数对比角色要求的看课天数,达标才返回
+            return fsAppRole;
+        }
+        return fsAppRole;
+    }
+
     //奖品是否过期的判断方法
     private boolean isExpired(Date createTime) {
         // TODO 实现过期判断逻辑

+ 102 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -2139,6 +2139,108 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         }
     }
 
+    @Override
+    @Transactional
+    public R addAppPackageOrder(FsPackageOrderAddRewardsParam param) {
+        Long doctorId = null;
+        FsPackage fsPackage=fsPackageMapper.selectFsPackageByPackageId(param.getPackageId());
+        if(fsPackage.getStatus().equals(0)){
+            return R.error("套餐包已下架");
+        }
+        if (fsPackage.getIsShow()==0){
+            return R.error("商品信息过期");
+        }
+        Integer num = fsPackage.getNum();
+        if (num!=0){
+            int i = fsPackageMapper.selectFsPackageListByUser(param.getUserId(), fsPackage.getPackageId());
+            if (i>=num){
+                return R.error("超过限购次数");
+            }
+        }
+        FsPackageOrder  order=new FsPackageOrder();
+        String orderSn =  OrderCodeUtils.getOrderSn();
+        if(StringUtils.isEmpty(orderSn)){
+            return R.error("订单生成失败,请重试");
+        }
+        order.setOrderSn(orderSn);
+        order.setStoreId(fsPackage.getStoreId());
+        order.setUserId(param.getUserId());
+        order.setPackageId(param.getPackageId());
+        order.setPackageName(fsPackage.getPackageName());
+        order.setTotalPrice(fsPackage.getTotalPrice());
+        order.setIcdCode(fsPackage.getIcdCode());
+        order.setPayPrice(fsPackage.getTotalPrice());
+        order.setPayMoney(new BigDecimal(0));//0元订单
+        order.setIsPay(0);
+        order.setSource(param.getOrderResource());//订单来源
+        order.setPackageSecondName(fsPackage.getSecondName());
+        order.setDoctorRemark(fsPackage.getDoctorRemark());
+        order.setFollowTempId(fsPackage.getFollowTempId());
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.package");
+        Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
+        Integer followRate = (Integer)config.get("followRate");
+        calendar.add(Calendar.DAY_OF_MONTH, followRate);
+        order.setFollowTime(calendar.getTime());
+        order.setFollowRate(followRate);
+        order.setPackageSubType(fsPackage.getPackageSubType());
+        order.setDays(fsPackage.getCycle());
+        order.setStatus(1);
+        order.setStartTime(new Date());
+        order.setCompanyUserId(param.getCompanyUserId());
+        order.setCompanyId(param.getCompanyId());
+        Calendar c = Calendar.getInstance();
+        c.setTime(order.getStartTime());
+        c.add(Calendar.DAY_OF_MONTH, fsPackage.getCycle());
+        order.setFinishTime(c.getTime());
+        order.setFormJson("[{\"title\":\"您是否已在线下就诊,且对所购买的药品无过敏或不良反应?\",\"options\":[{\"name\":\"是,我线下就诊过\",\"value\":1,\"color\":\"green\"},{\"name\":\"无,从未就诊\",\"value\":0,\"color\":\"red\"}],\"option\":\"是,我线下就诊过\"},{\"title\":\"您是否已详细阅读药物说明,确认自己符合药物适用人群,并了解用药方法、用药禁忌等信息?\",\"options\":[{\"name\":\"是,我已充分了解\",\"value\":1,\"color\":\"green\"},{\"name\":\"否,未阅读\",\"value\":0,\"color\":\"red\"}],\"option\":\"是,我已充分了解\"}]");
+        order.setPackageJson(JSONUtil.toJsonStr(fsPackage));
+        order.setCreateTime(new Date());
+        order.setInquiryCostPrice(fsPackage.getInquiryCostPrice());
+        order.setProductCostPrice(fsPackage.getProductCostPrice());
+        order.setTotalCostPrice(fsPackage.getTotalCostPrice());
+        order.setCycle(fsPackage.getCycle());
+        order.setCostDiscountMoney(fsPackage.getTotalCostPrice().subtract(fsPackage.getTotalPrice()));
+
+        FsUserAddress address=userAddressService.selectFsUserAddressByAddressId(param.getAddressId());
+        if(address!=null){
+            Map<String, String> myMap = new HashMap<>();
+            myMap.put("userName", address.getRealName().trim());
+            myMap.put("userPhone", address.getPhone().trim());
+            myMap.put("userAddress", address.getProvince()+" "+address.getCity()+" "+address.getDistrict()+" "+address.getDetail());
+            String addressString = JSON.toJSONString(myMap);
+            order.setAddressJson(addressString);
+        }else {
+            return R.error("地址错误");
+        }
+
+
+        FsPackageOrderComputeParam computeParam=new FsPackageOrderComputeParam();
+        computeParam.setCompanyUserId(param.getCompanyUserId());
+        computeParam.setCompanyId(param.getCompanyId());
+        computeParam.setPayType(param.getPayType());
+        computeParam.setSalesType(1);
+        if(order.getStoreId() != null){
+            computeParam.setStoreId(order.getStoreId());
+        }
+
+        Map<String,Object> moneys=computeOrderMoney(order.getTotalPrice(),computeParam);
+        order.setPayMoney((BigDecimal)moneys.get("payMoney"));
+        order.setPayPrice((BigDecimal)moneys.get("payPrice"));
+        order.setPayDelivery((BigDecimal)moneys.get("payDelivery"));
+        order.setDiscountMoney((BigDecimal)moneys.get("discountMoney"));
+        order.setPayRemain((BigDecimal)moneys.get("payRemain"));
+        order.setPayType(param.getPayType());
+        if(fsPackageOrderMapper.insertFsPackageOrder(order)>0){
+            this.payConfirm(order.getOrderSn(),"","","",2,null,null);
+            return R.ok().put("order",order);
+        }
+        else{
+            return R.error("创建失败");
+        }
+    }
+
     @Override
     public R getWxaCodePackageOrderUnLimit(Long orderId) {
         FsSysConfig sysConfig = configUtil.getSysConfig();

+ 5 - 4
fs-service/src/main/java/com/fs/his/strategy/impl/FirstLoginProductStrategy.java

@@ -6,6 +6,7 @@ import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserRewards;
 import com.fs.his.enums.ActivityTypeEnum;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.param.FsPackageOrderAddRewardsParam;
 import com.fs.his.param.FsPackageOrderCreateParam;
 import com.fs.his.service.IFsPackageOrderService;
 import com.fs.his.strategy.RewardResult;
@@ -33,8 +34,8 @@ public class FirstLoginProductStrategy implements RewardStrategy {
             }
 
             // 调用创建0元订单接口
-            FsPackageOrderCreateParam param = buildOrderCreateParam(reward, fsUser);
-            R result = packageOrderService.createOrder1(param);
+            FsPackageOrderAddRewardsParam param = buildOrderCreateParam(reward, fsUser);
+            R result = packageOrderService.addAppPackageOrder(param);
 
             // 检查订单创建是否成功
             if (!result.isSuccess()) {
@@ -66,8 +67,8 @@ public class FirstLoginProductStrategy implements RewardStrategy {
     /**
      * 构建创建订单参数
      */
-    private FsPackageOrderCreateParam buildOrderCreateParam(FsUserRewards reward, FsUser fsUser) {
-        FsPackageOrderCreateParam param = new FsPackageOrderCreateParam();
+    private FsPackageOrderAddRewardsParam buildOrderCreateParam(FsUserRewards reward, FsUser fsUser) {
+        FsPackageOrderAddRewardsParam param = new FsPackageOrderAddRewardsParam();
         param.setCompanyId(reward.getCompanyId());
         param.setCompanyUserId(reward.getCompanyUserId());
         param.setUserId(fsUser.getUserId());

+ 1 - 0
fs-service/src/main/java/com/fs/his/strategy/impl/WatchCourseProductStrategy.java

@@ -71,6 +71,7 @@ public class WatchCourseProductStrategy  implements RewardStrategy {
         param.setCompanyId(reward.getCompanyId());
         param.setCompanyUserId(reward.getCompanyUserId());
         param.setUserId(fsUser.getUserId());
+        param.setPackageId(reward.getGoodsId());
         return param;
     }
 

+ 0 - 15
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -271,8 +271,6 @@ public class AppLoginController extends AppBaseController{
                 userService.insertFsUser(user);
                 map.put("isNew", true);
                 map.put("unionid",unionid);
-                // 尝试添加首次登录奖励
-                tryAddFirstLoginReward(user.getUserId());
                 return R.ok(map);
             } else {
                 if (StringUtils.isNotEmpty(param.getJpushId())) {
@@ -281,8 +279,6 @@ public class AppLoginController extends AppBaseController{
                 if (StringUtils.isEmpty(user.getPhone())) {
                     map.put("isNew", true);
                     map.put("unionid",user.getUnionId());
-                    // 尝试添加首次登录奖励
-                    tryAddFirstLoginReward(user.getUserId());
                     return R.ok(map);
                 }
             }
@@ -292,8 +288,6 @@ public class AppLoginController extends AppBaseController{
             map.put("token", token);
             map.put("user", user);
             map.put("isFirst",isFirstLogin);
-            // 尝试添加首次登录奖励
-            tryAddFirstLoginReward(user.getUserId());
             return R.ok(map);
         }catch (Exception e){
             logger.error("zyp 登录失败:{}", e.getMessage());
@@ -302,15 +296,6 @@ public class AppLoginController extends AppBaseController{
 
     }
 
-    // 尝试添加首次登录奖励
-    public void tryAddFirstLoginReward(Long fsUserId){
-        boolean rewardAdded = appUserRewardService.checkFirstLoginRewardStatus(fsUserId);
-        if (rewardAdded) {
-            appUserRewardService.addUserFirstLoginRewards(fsUserId);
-            log.info("用户首次登录奖励添加成功: userId={}", fsUserId);
-        }
-    }
-
     @PostMapping("/loginByPhone")
     public R loginByPhone(@RequestBody Map<String,String> map){
         logger.info("短信登录参数:{}",map.toString());

+ 71 - 11
fs-user-app/src/main/java/com/fs/app/controller/AppUserRewardController.java

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 
 import com.fs.app.annotation.Login;
+import com.fs.app.domain.FsAppRole;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.StringUtils;
@@ -10,12 +11,13 @@ import com.fs.his.enums.RewardTypeEnum;
 import com.fs.his.service.IAppUserRewardService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
-
+@Slf4j
 @Api("App用户奖励")
 @RestController
 @RequestMapping(value="/app/reward")
@@ -25,19 +27,47 @@ public class AppUserRewardController  extends AppBaseController{
     private IAppUserRewardService appUserRewardService;
 
     /**
-     * 判断是否有首次登录注册奖励
-     */
+     * 跳转下发首次登录注册App奖励
+     * */
     @Login
-    @ApiOperation("判断用户是否有首次登录注册奖励")
-    @GetMapping("/checkFirstLoginRewardStatus")
-    public R checkFirstLoginRewardStatus() {
+    @ApiOperation("跳转下发注册登录奖励")
+    @GetMapping("/issueFirstLoginReward")
+    public R issueFirstLoginReward() {
         String loginUserId = getUserId();
         if (StringUtils.isEmpty(loginUserId)){
             return R.error("请登录");
         }
-        boolean result = appUserRewardService.checkFirstLoginRewardStatus(Long.valueOf(loginUserId));
-        return result ? R.ok() : R.error();
+        Long fsUserId = Long.valueOf(loginUserId);
+        boolean rewardAdded = appUserRewardService.checkFirstLoginRewardStatus(fsUserId);
+        if (rewardAdded) {
+            //添加首次登录奖励
+            appUserRewardService.addUserFirstLoginRewards(fsUserId);
+            log.info("用户首次登录奖励添加成功: userId={}", loginUserId);
+        }
+        return R.ok();
     }
+
+    /**
+     * 跳转下发App连续看课奖励
+     * */
+    @Login
+    @ApiOperation("跳转下发App连续看课奖励")
+    @GetMapping("/issueWatchCourseReward")
+    public R issueWatchCourseReward() {
+        String loginUserId = getUserId();
+        if (StringUtils.isEmpty(loginUserId)){
+            return R.error("请登录");
+        }
+        Long fsUserId = Long.valueOf(loginUserId);
+        boolean rewardAdded = appUserRewardService.checkFirstLoginRewardStatus(fsUserId);
+        if (rewardAdded) {
+            //添加看课奖励
+            appUserRewardService.addUserFirstLoginRewards(fsUserId);
+            log.info("用户App看课奖励添加成功: userId={}", loginUserId);
+        }
+        return R.ok();
+    }
+
     /**
      * 查询我的奖品列表
      */
@@ -58,11 +88,11 @@ public class AppUserRewardController  extends AppBaseController{
         return getDataTable(list);
     }
     /**
-     * 领取奖励
+     * 奖品列表点击领取奖励
      */
     @Login
-    @ApiOperation("用户领取奖励")
-    @GetMapping("/claim")
+    @ApiOperation("奖品列表用户领取奖励")
+    @PostMapping("/claim")
     public R claimRewards(@RequestParam("rewardsId") Long rewardsId) {
         String loginUserId = getUserId();
         if (StringUtils.isEmpty(loginUserId)){
@@ -71,6 +101,36 @@ public class AppUserRewardController  extends AppBaseController{
         appUserRewardService.claimRewards(Long.valueOf(loginUserId),rewardsId);
         return R.ok();
     }
+
+    /**
+     * 首次登录注册App弹窗
+     */
+    @Login
+    @ApiOperation("判断是否展示用户首次登录注册App弹窗")
+    @GetMapping("/showFirstLoginRewardWindows")
+    public R showFirstLoginRewardWindows() {
+        String loginUserId = getUserId();
+        if (StringUtils.isEmpty(loginUserId)){
+            return R.error("请登录");
+        }
+        FsAppRole result = appUserRewardService.showFirstLoginRewardWindows(Long.valueOf(loginUserId));
+        return R.ok().put("data", result);
+    }
+
+    /**
+     * 连续看课奖励弹窗
+     */
+    @Login
+    @ApiOperation("判断是否展示用户App连续看课奖励弹窗")
+    @GetMapping("/showWatchCourseRewardWindows")
+    public R showWatchCourseRewardWindows() {
+        String loginUserId = getUserId();
+        if (StringUtils.isEmpty(loginUserId)){
+            return R.error("请登录");
+        }
+        FsAppRole result = appUserRewardService.showWatchCourseRewardWindows(Long.valueOf(loginUserId));
+        return R.ok().put("data", result);
+    }
     /**
      * 查询奖品类型
      */