Prechádzať zdrojové kódy

积分统计/app苹果登录-微信登录从中康迁移

三七 2 týždňov pred
rodič
commit
fabf540f9f

+ 98 - 0
fs-admin/src/main/java/com/fs/his/controller/FsIntegralCountController.java

@@ -0,0 +1,98 @@
+package com.fs.his.controller;
+
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.his.domain.FsIntegralCount;
+import com.fs.his.service.IFsIntegralCountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 通用积分消耗退还统计(不含看课领的积分)Controller
+ *
+ * @author fs
+ * @date 2026-05-18
+ */
+@RestController
+@RequestMapping("/integralCount/integralCount")
+public class FsIntegralCountController extends BaseController
+{
+    @Autowired
+    private IFsIntegralCountService fsIntegralCountService;
+
+    /**
+     * 查询通用积分消耗退还统计(不含看课领的积分)列表
+     */
+    @PreAuthorize("@ss.hasPermi('integralCount:integralCount:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsIntegralCount fsIntegralCount)
+    {
+        startPage();
+        List<FsIntegralCount> list = fsIntegralCountService.selectFsIntegralCountList(fsIntegralCount);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出通用积分消耗退还统计(不含看课领的积分)列表
+     */
+    @PreAuthorize("@ss.hasPermi('integralCount:integralCount:export')")
+    @Log(title = "通用积分消耗退还统计(不含看课领的积分)", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsIntegralCount fsIntegralCount)
+    {
+        List<FsIntegralCount> list = fsIntegralCountService.selectFsIntegralCountList(fsIntegralCount);
+        ExcelUtil<FsIntegralCount> util = new ExcelUtil<FsIntegralCount>(FsIntegralCount.class);
+        return util.exportExcel(list, "通用积分消耗退还统计(不含看课领的积分)数据");
+    }
+
+    /**
+     * 获取通用积分消耗退还统计(不含看课领的积分)详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('integralCount:integralCount:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsIntegralCountService.selectFsIntegralCountById(id));
+    }
+
+    /**
+     * 新增通用积分消耗退还统计(不含看课领的积分)
+     */
+    @PreAuthorize("@ss.hasPermi('integralCount:integralCount:add')")
+    @Log(title = "通用积分消耗退还统计(不含看课领的积分)", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsIntegralCount fsIntegralCount)
+    {
+        return toAjax(fsIntegralCountService.insertFsIntegralCount(fsIntegralCount));
+    }
+
+    /**
+     * 修改通用积分消耗退还统计(不含看课领的积分)
+     */
+    @PreAuthorize("@ss.hasPermi('integralCount:integralCount:edit')")
+    @Log(title = "通用积分消耗退还统计(不含看课领的积分)", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsIntegralCount fsIntegralCount)
+    {
+        return toAjax(fsIntegralCountService.updateFsIntegralCount(fsIntegralCount));
+    }
+
+    /**
+     * 删除通用积分消耗退还统计(不含看课领的积分)
+     */
+    @PreAuthorize("@ss.hasPermi('integralCount:integralCount:remove')")
+    @Log(title = "通用积分消耗退还统计(不含看课领的积分)", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsIntegralCountService.deleteFsIntegralCountByIds(ids));
+    }
+}

+ 7 - 2
fs-admin/src/main/java/com/fs/his/task/userIntegralTask.java

@@ -24,8 +24,13 @@ public class userIntegralTask {
 
     public void UserIntegralCount(){
         log.info("=====用户积分每日消耗统计开始=====");
-        List<FsIntegralCount> list = integralLogsService.selectYesterdayIntegralGroupByLogType();
-        integralCountService.saveBatch(list);
+        try {
+            List<FsIntegralCount> list = integralLogsService.selectYesterdayIntegralGroupByLogType();
+            integralCountService.saveBatch(list);
+        }catch (Exception e){
+            log.error("用户积分每日消耗统计异常",e);
+        }
+
         log.info("=====用户积分每日消耗统计结束=====");
     }
 

+ 23 - 0
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -19,8 +19,11 @@ import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
 import com.fs.course.service.*;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.fastGpt.domain.FastGptPushTokenTotal;
+import com.fs.his.domain.FsIntegralCount;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsInquiryOrderService;
+import com.fs.his.service.IFsIntegralCountService;
+import com.fs.his.service.IFsUserIntegralLogsService;
 import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.domain.QwExternalContact;
@@ -166,6 +169,26 @@ public class CommonController {
     @Autowired
     private AsyncQwAiChatSopService asyncQwAiChatSopService;
 
+    @Autowired
+    private IFsUserIntegralLogsService integralLogsService;
+
+    @Autowired
+    private IFsIntegralCountService integralCountService;
+
+    @GetMapping("/UserIntegralCount")
+    public void UserIntegralCount(){
+        log.info("=====用户积分每日消耗统计开始=====");
+        try {
+            List<FsIntegralCount> list = integralLogsService.selectYesterdayIntegralGroupByLogType();
+            integralCountService.saveBatch(list);
+        }catch (Exception e){
+            log.error("用户积分每日消耗统计异常",e);
+        }
+
+        log.info("=====用户积分每日消耗统计结束=====");
+    }
+
+
     @GetMapping("/newRoomLinkAllow")
     public void newRoomLinkAllow() {
 

+ 1 - 2
fs-service/src/main/java/com/fs/his/domain/FsIntegralCount.java

@@ -15,8 +15,7 @@ import lombok.EqualsAndHashCode;
  * @date 2026-05-15
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class FsIntegralCount extends BaseEntity{
+public class FsIntegralCount{
 
     /** $column.columnComment */
     private Long id;

+ 2 - 1
fs-service/src/main/java/com/fs/his/mapper/FsUserIntegralLogsMapper.java

@@ -170,7 +170,8 @@ public interface FsUserIntegralLogsMapper
             "DATE(create_time) AS consumption_date " +
             "FROM fs_user_integral_logs " +
             "WHERE log_type != 17 " +
-            "AND DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) " +
+            "AND create_time >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)\n" +
+            "  AND create_time < CURDATE() " +
             "GROUP BY log_type, DATE(create_time)")
     List<FsIntegralCount> selectYesterdayIntegralGroupByLogType();
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -248,4 +248,5 @@ public interface IFsUserService
 
     List<FsUserVO> selectStatisticsList(FsUser fsUser);
 
+    FsUser selectFsUserByAppleKey(String appleKey);
 }

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

@@ -52,7 +52,6 @@ public class FsIntegralCountServiceImpl extends ServiceImpl<FsIntegralCountMappe
     @Override
     public int insertFsIntegralCount(FsIntegralCount fsIntegralCount)
     {
-        fsIntegralCount.setCreateTime(DateUtils.getNowDate());
         return baseMapper.insertFsIntegralCount(fsIntegralCount);
     }
 

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -1659,4 +1659,9 @@ public class FsUserServiceImpl implements IFsUserService {
                 });
         return list;
     }
+
+    @Override
+    public FsUser selectFsUserByAppleKey(String appleKey) {
+        return fsUserMapper.findUserByAppleKey(appleKey);
+    }
 }

+ 128 - 36
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -295,49 +295,141 @@ public class AppLoginController extends AppBaseController{
             }
             FsUser user = userService.selectFsUserByUnionid(unionid);
 
+            // 苹果用户需要特殊处理
+            FsUser appleUser=null;
+            if(StringUtils.isNotBlank(param.getAppleKey())){
+                appleUser= userService.selectFsUserByAppleKey(param.getAppleKey());
+            }
+
+
             Map<String, Object> map = new HashMap<>();
             if (user == null) {
-                user = new FsUser();
-                user.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
-                user.setSource(param.getSource()!=null ? param.getSource() : null);
-                user.setNickName(nickname);
-                user.setAvatar(avatar);
-                user.setAppOpenId(openid);
-                if (sex!=0){
-                    user.setSex(sex);
-                }
-                user.setUnionId(unionid);
-                // 新用户 - 添加 appId
-                user.setAppId(appId);
-                user.setCreateTime(new Date());
-                user.setStatus(1);
-                if (StringUtils.isNotEmpty(param.getJpushId())) {
-                    user.setJpushId(param.getJpushId());
-                }
-                String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
-                user.setLastIp(ipAddr);
-                userService.insertFsUser(user);
-                if(!CloudHostUtils.hasCloudHostName("鸿森堂")){
-                    map.put("isNew", true);
-                    map.put("unionid",unionid);
-                    return R.ok(map);
+
+                if(appleUser != null){  // 存在苹果用户,将微信信息绑定到苹果用户
+                    FsUser userMap = new FsUser();
+                    userMap.setUserId(appleUser.getUserId());
+                    userMap.setNickName(nickname);
+                    userMap.setAvatar(avatar);
+                    userMap.setAppOpenId(openid);
+                    if (sex!=0){
+                        userMap.setSex(sex);
+                    }
+                    userMap.setUnionId(unionid);
+                    if(appleUser.getAppCreateTime()== null){
+                        userMap.setAppCreateTime(new Date());
+                    }
+                    if(StringUtils.isBlank(appleUser.getAppleKey())){
+                        userMap.setAppleKey(param.getAppleKey());
+                    }
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        userMap.setJpushId(param.getJpushId());
+                    }
+                    userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+                    userService.updateFsUser(userMap);
+                    user=appleUser;
+                }else {
+                    user = new FsUser();
+                    user.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+                    user.setSource(param.getSource()!=null ? param.getSource() : null);
+                    user.setNickName(nickname);
+                    user.setAvatar(avatar);
+                    user.setAppOpenId(openid);
+                    if (sex!=0){
+                        user.setSex(sex);
+                    }
+                    user.setUnionId(unionid);
+                    // 新用户 - 添加 appId
+                    user.setAppId(appId);
+                    user.setCreateTime(new Date());
+                    user.setStatus(1);
+                    user.setAppleKey(param.getAppleKey());
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        user.setJpushId(param.getJpushId());
+                    }
+                    String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
+                    user.setLastIp(ipAddr);
+                    userService.insertFsUser(user);
+                    if(!CloudHostUtils.hasCloudHostName("鸿森堂")){
+                        map.put("isNew", true);
+                        map.put("unionid",unionid);
+                        return R.ok(map);
+                    }
                 }
+
             } else {
-                // 老用户 - 检查并添加appId(不重复添加)
-                String updatedAppId = addAppIdIfNotExists(user.getAppId(), appId);
-                if (!updatedAppId.equals(user.getAppId())) {
+
+                if(appleUser != null){// 苹果账户也存在
+                    // 需要合并账号,保留微信账号 删除苹果账号
                     FsUser userMap = new FsUser();
                     userMap.setUserId(user.getUserId());
-                    userMap.setAppId(updatedAppId);
-                    String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
-                    userMap.setLastIp(ipAddr);
+                    userMap.setIntegral(appleUser.getIntegral()+user.getIntegral());
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        userMap.setJpushId(param.getJpushId());
+                    }
+                    if (StringUtils.isNotEmpty(openid)) {
+                        userMap.setAppOpenId(openid);
+                    }
+                    if(user.getAppCreateTime()== null){
+                        userMap.setAppCreateTime(new Date());
+                    }
+                    if(StringUtils.isBlank(user.getAppleKey())){
+                        userMap.setAppleKey(param.getAppleKey());
+                    }
+
+                    if (StringUtils.isNotBlank(param.getSource())) {
+                        userMap.setSource(param.getSource());
+                    }
+
+                    userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+
+                    if(userService.updateFsUser(userMap)>0){
+                        userService.deleteFsUserByUserId(appleUser.getUserId());
+                    }else {
+                        return R.error("账号合并,登录异常");
+                    }
+
+                }else {
+                    // 老用户 - 检查并添加appId(不重复添加)
+                    String updatedAppId = addAppIdIfNotExists(user.getAppId(), appId);
+
+                    FsUser userMap = new FsUser();
+                    userMap.setUserId(user.getUserId());
+
+                    if (!updatedAppId.equals(user.getAppId())) {
+                        userMap.setAppId(updatedAppId);
+                        String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
+                        userMap.setLastIp(ipAddr);
+                    }
+
+                    if (StringUtils.isNotEmpty(param.getJpushId())) {
+                        userMap.setJpushId(param.getJpushId());
+                    }
+                    if (StringUtils.isNotEmpty(openid)) {
+                        userMap.setAppOpenId(openid);
+                    }
+                    if(user.getAppCreateTime()== null){
+                        userMap.setAppCreateTime(new Date());
+                    }
+                    if(StringUtils.isBlank(user.getAppleKey())){
+                        userMap.setAppleKey(param.getAppleKey());
+                    }
+
+                    // 更新登录设备信息
+                    if (StringUtils.isNotBlank(param.getSource())) {
+                        userMap.setSource(param.getSource());
+                    }
+                    // 更新登录设备信息
+                    userMap.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
+
                     userService.updateFsUser(userMap);
                 }
 
-                if (StringUtils.isNotEmpty(param.getJpushId())) {
-                    user.setAppOpenId(openid);
-                    updateExistingUserJpushId(user, param.getJpushId());
-                }
+
+
+//                if (StringUtils.isNotEmpty(param.getJpushId())) {
+//                    user.setAppOpenId(openid);
+//                    updateExistingUserJpushId(user, param.getJpushId());
+//                }
                 if (StringUtils.isEmpty(user.getPhone())) {
                     if(!CloudHostUtils.hasCloudHostName("鸿森堂")) {
                         map.put("isNew", true);
@@ -347,8 +439,8 @@ public class AppLoginController extends AppBaseController{
                 }
             }
 
-            // 更新登录设备信息
-            updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
+//            // 更新登录设备信息
+//            updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
 
             int isFirstLogin = userNewTaskService.performTaskOne(user.getUserId());
             String token = jwtUtils.generateToken(user.getUserId());

+ 3 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByWeChatParam.java

@@ -19,4 +19,7 @@ public class FsUserLoginByWeChatParam implements Serializable {
     private Long userId;
 
     private String appId; //主要用于app微信登录
+
+    // 苹果手机微信登录传
+    private String appleKey;
 }