Explorar el Código

医健宝-缺陷修复

chenguo hace 1 semana
padre
commit
704f61454d

+ 15 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreRecommendScrmController.java

@@ -5,6 +5,7 @@ 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.hisStore.domain.FsStoreRecommendScrm;
 import com.fs.hisStore.service.IFsStoreRecommendScrmService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -73,7 +74,7 @@ public class FsStoreRecommendScrmController extends BaseController
     /**
      * 删除店铺推荐
      */
-    @PreAuthorize("@ss.hasPermi('store:recommend:remove')")
+    @PreAuthorize("@ss.hasPermi('store:recommend:delete')")
     @Log(title = "店铺推荐", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids)
@@ -91,4 +92,17 @@ public class FsStoreRecommendScrmController extends BaseController
         List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectValidRecommendList(fsStoreRecommendScrm);
         return getDataTable(list);
     }
+
+    /**
+     * 导出
+     * */
+    @PreAuthorize("@ss.hasPermi('store:recommend:export')")
+    @Log(title = "店铺推荐", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsStoreRecommendScrm fsStoreRecommendScrm)
+        {
+        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
+        ExcelUtil<FsStoreRecommendScrm> util = new ExcelUtil<>(FsStoreRecommendScrm.class);
+        return util.exportExcel(list, "店铺推荐数据");
+    }
 }

+ 61 - 58
fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordServiceImpl.java

@@ -14,24 +14,20 @@ import com.fs.company.param.CompanyTrafficRecordQueryParam;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyTrafficRecordLogService;
 import com.fs.company.service.ICompanyTrafficRecordService;
+import com.fs.course.mapper.FsCourseTrafficLogMapper;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.connection.RedisConnection;
-import org.springframework.data.redis.core.Cursor;
-import org.springframework.data.redis.core.ScanOptions;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
-import java.time.LocalDate;
-import java.time.YearMonth;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 @Slf4j
@@ -51,35 +47,39 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
     @Autowired
     private ICompanyTrafficRecordLogService companyTrafficRecordLogService;
 
+    @Autowired
+    private FsCourseTrafficLogMapper fsCourseTrafficLogMapper;
+
     //启动时初始化流量
     @PostConstruct
     public void init() {
         List<CompanyTrafficRecord> companyTrafficRecords = baseMapper.selectList(new LambdaQueryWrapper<>());
+        Map<Long,Long> deptTrafficMap = new HashMap<>();
         for (CompanyTrafficRecord companyTrafficRecord : companyTrafficRecords) {
-            // 获取部门ID
-            //Long deptId = companyTrafficRecord.getDeptId();从company表获取部门id
             // 获取公司ID
             Long companyId = companyTrafficRecord.getCompanyId();
+            // 部门ID
             Long deptId = companyService.selectCompanyById(companyId).getDeptId();
             companyTrafficRecord.setDeptId(deptId);
 
-            //同步redis缓存 更新getBalance()
-            doReduce(companyTrafficRecord,"0");
-
-            // 获取公司流量
+            // 公司流量 - 消耗流量
             Long balance = companyTrafficRecord.getBalance();
-            // 缓存 key=CACHE_KEY:deptId:companyId  value=剩余流量
-
-            //序列化问题,使用incr创建缓存
-            //删除缓存
+            //消耗的流量
+            Long totalInternetTraffic = fsCourseTrafficLogMapper.sumTrafficByCompany(companyId) == null?0L:fsCourseTrafficLogMapper.sumTrafficByCompany(companyId);
+            balance -= totalInternetTraffic;
+            //部门流量记录
+            Long deptTrafficAdd = (deptTrafficMap.get(deptId) == null ? 0L : deptTrafficMap.get(deptId)) + totalInternetTraffic;
+            deptTrafficMap.put(deptId, deptTrafficAdd);
+            //更新缓存
             redisCache.deleteObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId + ":" + companyId);
             redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId + ":" + companyId, balance);
-            // 缓存 key=CACHE_KEY:deptId  value=部门ID
-            calculateTotalTrafficByDeptId(deptId);
         }
+
+        // 缓存 key=CACHE_KEY:deptId  value=部门ID
+        calculateTotalTrafficByDeptId(deptTrafficMap);
     }
 
-    //@Scheduled(cron = "0 0 0 * * ?")
+    @Scheduled(cron = "0 0 0 * * ?")
     public void refreshTraffic() {
         log.info("【定时更新流量】:{}", "开始");
         List<CompanyTrafficRecord> companyTrafficRecords = baseMapper.selectList(new LambdaQueryWrapper<>());
@@ -138,42 +138,39 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
         CompanyTrafficRecord companyRecord = baseMapper.selectOne(new LambdaQueryWrapper<CompanyTrafficRecord>()
                 .eq(CompanyTrafficRecord::getCompanyId, record.getCompanyId()));
 
-        switch (record.getOperationType()) {
-            //充值
-            case 1:
-                //获取转换后的流量
-                Long trafficAmount = trafficConversion(record.getChargeAmount());
-                record.setChangeTraffic(trafficAmount);//用于处理日志
-                if (companyRecord != null) {
-                    //不是第一次充值  增加流量
-                    companyTrafficRecord.setBalance(companyRecord.getBalance() + trafficAmount);
-                    companyTrafficRecord.setId(companyRecord.getId());
-                    companyTrafficRecord.setUpdateTime(new Date());
-                    companyTrafficRecord.setUpdateBy(record.getUserId());
-                    baseMapper.updateById(companyTrafficRecord);
-                } else {
-                    companyTrafficRecord.setBalance(trafficAmount);
-                    companyTrafficRecord.setCompanyId(record.getCompanyId());
-                    companyTrafficRecord.setDeptId(record.getCompany().getDeptId());
-                    companyTrafficRecord.setCompanyName(record.getCompany().getCompanyName());
-                    companyTrafficRecord.setCreateTime(new Date());
-                    companyTrafficRecord.setCreateBy(record.getUserId());
-                    baseMapper.insert(companyTrafficRecord);
-                }
-                break;
-            //扣除
+        //充值
+        if (record.getOperationType() == 1) {//获取转换后的流量
+            Long trafficAmount = trafficConversion(record.getChargeAmount());
+            record.setChangeTraffic(trafficAmount);//用于处理日志
+            if (companyRecord != null) {
+                //不是第一次充值  增加流量
+                companyTrafficRecord.setBalance(companyRecord.getBalance() + trafficAmount);
+                companyTrafficRecord.setId(companyRecord.getId());
+                companyTrafficRecord.setUpdateTime(new Date());
+                companyTrafficRecord.setUpdateBy(record.getUserId());
+                baseMapper.updateById(companyTrafficRecord);
+            } else {
+                companyTrafficRecord.setBalance(trafficAmount);
+                companyTrafficRecord.setCompanyId(record.getCompanyId());
+                companyTrafficRecord.setDeptId(record.getCompany().getDeptId());
+                companyTrafficRecord.setCompanyName(record.getCompany().getCompanyName());
+                companyTrafficRecord.setCreateTime(new Date());
+                companyTrafficRecord.setCreateBy(record.getUserId());
+                baseMapper.insert(companyTrafficRecord);
+            }
+                /*//扣除
             case 2:
                 //扣除流量
-                /*if (companyRecord.getBalance() < record.getChangeTraffic())
-                    throw new IllegalArgumentException("公司流量余额不足");*/
+                *//*if (companyRecord.getBalance() < record.getChangeTraffic())
+                    throw new IllegalArgumentException("公司流量余额不足");*//*
                 companyTrafficRecord.setBalance(companyTrafficRecord.getBalance() - record.getChangeTraffic());
                 companyTrafficRecord.setId(companyRecord.getId());
                 companyTrafficRecord.setUpdateTime(new Date());
                 companyTrafficRecord.setUpdateBy(record.getUserId());
                 baseMapper.updateById(companyTrafficRecord);
-                break;
-            default:
-                throw new IllegalArgumentException("非法的操作类型");
+                break;*/
+        } else {
+            throw new IllegalArgumentException("非法的操作类型");
         }
         // 更新Redis缓存
         doRefresh(record, companyTrafficRecord);
@@ -201,26 +198,32 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
     private void doRefresh(CompanyTrafficRecordChargeParam record, CompanyTrafficRecord companyTrafficRecord) {
         if (record.getCompany() != null && record.getCompany().getDeptId() != null) {
             // 更新缓存 key=CACHE_KEY:deptId:companyId  value=剩余流量
-
-            redisCache.deleteObject(CompanyTrafficConstants.CACHE_KEY + ":" + record.getCompany().getDeptId() + ":" + record.getCompanyId());
             redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + record.getCompany().getDeptId() + ":" + record.getCompanyId(),
                     companyTrafficRecord.getBalance());
 
-            // 计算该部门下所有公司流量总和
-            calculateTotalTrafficByDeptId(record.getCompany().getDeptId());
+            // 部门新增流量
+            calculateTrafficByDeptId(record.getCompany().getDeptId(),companyTrafficRecord.getBalance());
         } else {
             // 抛出异常
             throw new IllegalArgumentException("缓存ID异常");
         }
     }
+    /**
+     * 部门下所有公司流量总和减去使用的流量
+     */
+    private void calculateTrafficByDeptId(Long deptId,Long traffic) {
+        redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, traffic);
+    }
 
     /**
-     * 部门下所有公司流量总和
+     * 部门下所有公司流量总和减去使用的流量
      */
-    private void calculateTotalTrafficByDeptId(Long deptId) {
-        Long totalTraffic = baseMapper.calculateTotalTrafficByDeptId(deptId);
-        redisCache.deleteObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId);
-        redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, totalTraffic);
+    private void calculateTotalTrafficByDeptId(Map<Long,Long> deptTrafficMap) {
+        deptTrafficMap.forEach((deptId,totalTraffic) -> {
+            Long total = baseMapper.calculateTotalTrafficByDeptId(deptId);
+            redisCache.deleteObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId);
+            redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, total-totalTraffic);
+        });
     }
 
     private boolean doLog(CompanyTrafficRecord companyTrafficRecord, CompanyTrafficRecordChargeParam record) {

+ 5 - 1
fs-service/src/main/java/com/fs/core/config/WxMaConfiguration.java

@@ -70,7 +70,11 @@ public class WxMaConfiguration {
         //看课小程序加载
 //        SysConfig sysConfig3 = sysConfigMapper.selectConfigByConfigKey("courseMa.config");
 //        List<CourseMaConfig> courseMaConfigs = JSON.parseArray(sysConfig3.getConfigValue(), CourseMaConfig.class);
-        List<FsCoursePlaySourceConfig> list = fsCoursePlaySourceConfigService.list(new QueryWrapper<FsCoursePlaySourceConfig>().ne("type", 2).eq("is_del", 0));
+        // 使用 SpringUtils 获取服务实例,而不是依赖注入
+        IFsCoursePlaySourceConfigService coursePlaySourceConfigService = SpringUtils.getBean(IFsCoursePlaySourceConfigService.class);
+
+        // 看课小程序加载
+        List<FsCoursePlaySourceConfig> list = coursePlaySourceConfigService.list(new QueryWrapper<FsCoursePlaySourceConfig>().ne("type", 2).eq("is_del", 0));
         if (list!=null&& !list.isEmpty()){
             for (FsCoursePlaySourceConfig courseMaConfig : list) {
                 if (appid.equals(courseMaConfig.getAppid())) {

+ 3 - 1
fs-service/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java

@@ -188,5 +188,7 @@ public interface FsCourseTrafficLogMapper
             @Param("offset") int offset,
             @Param("pageSize") int pageSize);
 
-
+    @Select("SELECT SUM(T.internet_traffic)/1024 AS totalInternetTraffic FROM fs_course_traffic_log T " +
+            "WHERE DATE(T.create_time) = DATE(CURDATE()) AND T.company_id = #{companyId} GROUP BY T.company_id ")
+    Long sumTrafficByCompany(Long companyId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java

@@ -39,4 +39,7 @@ public class FsCoursePlaySourceConfigEditParam {
 
     @ApiModelProperty("类型 1小程序 2公众号")
     private Integer type;
+
+    @ApiModelProperty("所属公司")
+    private Long companyId;
 }

+ 7 - 5
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -816,8 +816,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 // 直接插入或更新
 //                logger.error("zyp \n【插入或更新流量】:{}",trafficLog);
                 fsCourseTrafficLogMapper.insertOrUpdateTrafficLog(trafficLog);
-                //扣除流量
-                asyncDeductTraffic(company, roundedResult/1024);
+                if(trafficLog.getLogId() != null)
+                    //扣除流量
+                    asyncDeductTraffic(company, roundedResult/1024);
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -839,8 +840,8 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 throw new Exception("流量不足");
             }
 
-            logger.info("异步扣除流量成功 - 公司ID: {}, 扣除流量: {}, 剩余流量: {}",
-                    company.getCompanyId(), traffic, remainingTraffic);
+            /*logger.info("异步扣除流量成功 - 公司ID: {}, 扣除流量: {}, 剩余流量: {}",
+                    company.getCompanyId(), traffic, remainingTraffic);*/
         } catch (Exception e) {
             logger.error("异步扣除流量失败 - 公司ID: {}, 扣除流量: {}, 错误信息: {}",
                     company.getCompanyId(), traffic, e.getMessage(), e);
@@ -2698,7 +2699,8 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 // 直接插入或更新
 //                logger.error("zyp \n【插入或更新流量】:{}",trafficLog);
                 fsCourseTrafficLogMapper.insertOrUpdateTrafficLog(trafficLog);
-                asyncDeductTraffic(company, roundedResult/1024);
+                if(trafficLog.getLogId() != null)
+                    asyncDeductTraffic(company, roundedResult/1024);
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreRecommendScrm.java

@@ -1,5 +1,6 @@
 package com.fs.hisStore.domain;
 
+import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -25,15 +26,18 @@ public class FsStoreRecommendScrm extends BaseEntity
     private Long storeId;
 
     /** 店铺名称 */
+    @Excel(name = "店铺名称")
     private String storeName;
 
     /** 排序值,数值越小越靠前 */
+    @Excel(name = "排序值")
     private Integer sortOrder;
 
     /** 推荐类型(HOT热门,NEW新品,GENERAL普通推荐) */
     private String recommendType;
 
     /** 状态(0禁用,1启用) */
+    @Excel(name = "状态", readConverterExp = "0=禁用,1=启用")
     private Integer status;
 
     /** 权重值,用于综合排序 */

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -332,6 +332,7 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
         product.setCompanyIds(param.getCompanyIds());
         product.setVideo(param.getVideo());
         product.setStoreId(param.getStoreId());
+        product.setIsDrug(param.getIsDrug().toString());
         //校验店铺资质信息
         //获取店铺
         FsStoreScrm store = fsStoreScrmService.selectFsStoreByStoreId(product.getStoreId());

+ 40 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreRecommendScrmMapper.xml

@@ -52,4 +52,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by sort_order asc, weight desc, create_time desc
     </select>
 
+    <insert id="insertFsStoreRecommendScrm" parameterType="FsStoreRecommendScrm">
+        insert into fs_store_recommend_scrm(store_id, store_name, sort_order, begin_time, end_time, recommend_type, status, weight, recommend_reason, create_by, create_time, remark)
+        values(#{storeId}, #{storeName}, #{sortOrder}, #{beginTime}, #{endTime}, #{recommendType}, #{status}, #{weight}, #{recommendReason}, #{createBy}, #{createTime},#{remark})
+    </insert>
+
+    <update id="updateFsStoreRecommendScrm" parameterType="FsStoreRecommendScrm">
+        update fs_store_recommend_scrm
+        <set>
+            <if test="storeId != null">store_id = #{storeId},</if>
+            <if test="storeName != null">store_name = #{storeName},</if>
+            <if test="sortOrder != null">sort_order = #{sortOrder},</if>
+            <if test="beginTime != null">begin_time = #{beginTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="recommendType != null">recommend_type = #{recommendType},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="weight != null">weight = #{weight},</if>
+            <if test="recommendReason != null">recommend_reason = #{recommendReason},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsStoreRecommendScrmByIds" parameterType="Long">
+        delete from fs_store_recommend_scrm where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="deleteFsStoreRecommendScrmById" parameterType="Long">
+        delete from fs_store_recommend_scrm where id = #{id}
+    </delete>
+
+    <select id="selectFsStoreRecommendScrmById" parameterType="Long" resultMap="FsStoreRecommendScrmResult">
+        <include refid="selectFsStoreRecommendScrmVo"/>
+        where id = #{id}
+    </select>
+
 </mapper>