Преглед на файлове

Merge remote-tracking branch 'origin/master'

ct преди 6 дни
родител
ревизия
30db4f11eb
променени са 21 файла, в които са добавени 797 реда и са изтрити 88 реда
  1. 22 3
      fs-admin/src/main/java/com/fs/course/controller/FsCourseRedPacketLogController.java
  2. 99 0
      fs-admin/src/main/java/com/fs/his/controller/FsHomeArticleCategoryController.java
  3. 94 0
      fs-admin/src/main/java/com/fs/his/controller/FsHomeArticleController.java
  4. 93 0
      fs-admin/src/main/java/com/fs/his/controller/FsHomeArticleViewController.java
  5. 7 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java
  6. 11 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  7. 1 1
      fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java
  8. 6 0
      fs-service/src/main/java/com/fs/his/service/IFsStorePaymentService.java
  9. 124 1
      fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java
  10. 14 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStorePaymentGetWxaCodeParam.java
  11. 5 4
      fs-service/src/main/java/com/fs/hisStore/service/IFsStorePaymentScrmService.java
  12. 139 11
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java
  13. 3 3
      fs-service/src/main/resources/application-config-druid-jnlzjk.yml
  14. 1 1
      fs-service/src/main/resources/application-config-druid-nmgyt.yml
  15. 70 43
      fs-service/src/main/resources/mapper/course/FsCourseLinkMapper.xml
  16. 5 3
      fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml
  17. 1 1
      fs-service/src/main/resources/mapper/his/FsUserMapper.xml
  18. 8 0
      fs-user-app/src/main/java/com/fs/app/controller/CompanyUserController.java
  19. 62 0
      fs-user-app/src/main/java/com/fs/app/controller/PaymentController.java
  20. 9 0
      fs-user-app/src/main/java/com/fs/app/controller/store/CompanyUserScrmController.java
  21. 23 17
      fs-user-app/src/main/java/com/fs/app/controller/store/PaymentScrmController.java

+ 22 - 3
fs-admin/src/main/java/com/fs/course/controller/FsCourseRedPacketLogController.java

@@ -1,14 +1,22 @@
 package com.fs.course.controller;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.model.LoginUser;
+import com.fs.common.utils.ServletUtils;
+import com.fs.course.config.CourseConfig;
 import com.fs.course.mapper.FsUserCourseMapper;
 import com.fs.course.mapper.FsUserCourseVideoMapper;
 import com.fs.course.param.FsCourseRedPacketLogParam;
 import com.fs.course.vo.FsCourseRedPacketLogListPVO;
+import com.fs.framework.web.service.TokenService;
 import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.OptionsVO;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -46,8 +54,10 @@ public class FsCourseRedPacketLogController extends BaseController
     FsUserCourseMapper fsUserCourseMapper;
     @Autowired
     FsUserCourseVideoMapper fsUserCourseVideoMapper;
-
-
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ISysConfigService configService;
     /**
      * 查询短链课程看课记录列表
      */
@@ -135,7 +145,16 @@ public class FsCourseRedPacketLogController extends BaseController
     @GetMapping("/courseList")
     public R courseList()
     {
-        List<OptionsVO> optionsVOS = fsUserCourseMapper.selectFsUserCourseAllList();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Long userId = loginUser.getUser().getUserId();
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        List<OptionsVO> optionsVOS = new ArrayList<>();
+        if (ObjectUtil.isNotEmpty(config.getIsBound())&&config.getIsBound()){
+            optionsVOS = fsUserCourseMapper.selectFsUserCourseAllListByUserId(userId);
+        }else {
+            optionsVOS = fsUserCourseMapper.selectFsUserCourseAllList();
+        }
         return R.ok().put("list", optionsVOS);
     }
 

+ 99 - 0
fs-admin/src/main/java/com/fs/his/controller/FsHomeArticleCategoryController.java

@@ -0,0 +1,99 @@
+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.domain.R;
+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.FsHomeArticleCategoryScrm;
+import com.fs.hisStore.service.IFsHomeArticleCategoryScrmService;
+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 2025-05-21
+ */
+@RestController
+@RequestMapping("/his/homeCategory")
+public class FsHomeArticleCategoryController extends BaseController {
+    @Autowired
+    private IFsHomeArticleCategoryScrmService fsHomeArticleCategoryService;
+
+    /**
+     * 查询期刊分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsHomeArticleCategoryScrm fsHomeArticleCategory) {
+        startPage();
+        List<FsHomeArticleCategoryScrm> list = fsHomeArticleCategoryService.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出期刊分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:export')")
+    @Log(title = "期刊分类", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsHomeArticleCategoryScrm fsHomeArticleCategory) {
+        List<FsHomeArticleCategoryScrm> list = fsHomeArticleCategoryService.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+        ExcelUtil<FsHomeArticleCategoryScrm> util = new ExcelUtil<FsHomeArticleCategoryScrm>(FsHomeArticleCategoryScrm.class);
+        return util.exportExcel(list, "homeCategory");
+    }
+
+    /**
+     * 获取期刊分类详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:query')")
+    @GetMapping(value = "/{categoryId}")
+    public AjaxResult getInfo(@PathVariable("categoryId") Long categoryId) {
+        return AjaxResult.success(fsHomeArticleCategoryService.selectFsHomeArticleCategoryById(categoryId));
+    }
+
+    /**
+     * 新增期刊分类
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:add')")
+    @Log(title = "期刊分类", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsHomeArticleCategoryScrm fsHomeArticleCategory) {
+        return toAjax(fsHomeArticleCategoryService.insertFsHomeArticleCategory(fsHomeArticleCategory));
+    }
+
+    /**
+     * 修改期刊分类
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:edit')")
+    @Log(title = "期刊分类", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsHomeArticleCategoryScrm fsHomeArticleCategory) {
+        return toAjax(fsHomeArticleCategoryService.updateFsHomeArticleCategory(fsHomeArticleCategory));
+    }
+
+    /**
+     * 删除期刊分类
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:remove')")
+    @Log(title = "期刊分类", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{categoryIds}")
+    public AjaxResult remove(@PathVariable Long[] categoryIds) {
+        return toAjax(fsHomeArticleCategoryService.deleteFsHomeArticleCategoryByIds(categoryIds));
+    }
+
+    @GetMapping("/allList")
+    public R getAllList(FsHomeArticleCategoryScrm fsHomeArticleCategory) {
+        fsHomeArticleCategory.setStatus(1);
+        List<FsHomeArticleCategoryScrm> list = fsHomeArticleCategoryService.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+        return R.ok().put("rows", list);
+    }
+
+}

+ 94 - 0
fs-admin/src/main/java/com/fs/his/controller/FsHomeArticleController.java

@@ -0,0 +1,94 @@
+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.domain.R;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.hisStore.domain.FsHomeArticleScrm;
+import com.fs.hisStore.service.IFsHomeArticleScrmService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+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 2025-05-21
+ */
+@RestController
+@RequestMapping("/his/homeArticle")
+public class FsHomeArticleController extends BaseController {
+    @Autowired
+    private IFsHomeArticleScrmService fsHomeArticleService;
+
+    /**
+     * 查询期刊列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:list')")
+    @GetMapping("/list")
+    public R list(FsHomeArticleScrm fsHomeArticle)
+    {
+        PageHelper.startPage(fsHomeArticle.getPageNum(), fsHomeArticle.getPageSize());
+        List<FsHomeArticleScrm> list = fsHomeArticleService.selectFsHomeArticleList(fsHomeArticle);
+        PageInfo<FsHomeArticleScrm> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("rows", listPageInfo);
+    }
+
+    /**
+     * 导出期刊列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:export')")
+    @Log(title = "期刊", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsHomeArticleScrm fsHomeArticle) {
+        List<FsHomeArticleScrm> list = fsHomeArticleService.selectFsHomeArticleList(fsHomeArticle);
+        ExcelUtil<FsHomeArticleScrm> util = new ExcelUtil<FsHomeArticleScrm>(FsHomeArticleScrm.class);
+        return util.exportExcel(list, "homArticle");
+    }
+
+    /**
+     * 获取期刊详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:query')")
+    @GetMapping(value = "/{articleId}")
+    public AjaxResult getInfo(@PathVariable("articleId") Long articleId) {
+        return AjaxResult.success(fsHomeArticleService.selectFsHomeArticleById(articleId));
+    }
+
+    /**
+     * 新增期刊
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:add')")
+    @Log(title = "期刊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsHomeArticleScrm fsHomeArticle) {
+        return toAjax(fsHomeArticleService.insertFsHomeArticle(fsHomeArticle));
+    }
+
+    /**
+     * 修改期刊
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:edit')")
+    @Log(title = "期刊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsHomeArticleScrm fsHomeArticle) {
+        return toAjax(fsHomeArticleService.updateFsHomeArticle(fsHomeArticle));
+    }
+
+    /**
+     * 删除期刊
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:remove')")
+    @Log(title = "期刊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{articleIds}")
+    public AjaxResult remove(@PathVariable Long[] articleIds) {
+        return toAjax(fsHomeArticleService.deleteFsHomeArticleByIds(articleIds));
+    }
+}

+ 93 - 0
fs-admin/src/main/java/com/fs/his/controller/FsHomeArticleViewController.java

@@ -0,0 +1,93 @@
+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.domain.R;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.hisStore.domain.FsHomeArticleViewScrm;
+import com.fs.hisStore.service.IFsHomeArticleViewScrmService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+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 2025-05-21
+ */
+@RestController
+@RequestMapping("/his/homeView")
+public class FsHomeArticleViewController extends BaseController {
+    @Autowired
+    private IFsHomeArticleViewScrmService fsHomeArticleViewService;
+
+    /**
+     * 查询期刊阅读列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:list')")
+    @GetMapping("/list")
+    public R list(FsHomeArticleViewScrm fsHomeArticleView) {
+        PageHelper.startPage(fsHomeArticleView.getPageNum(), fsHomeArticleView.getPageSize());
+        List<FsHomeArticleViewScrm> list = fsHomeArticleViewService.selectFsHomeArticleViewList(fsHomeArticleView);
+        PageInfo<FsHomeArticleViewScrm> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("rows", listPageInfo);
+    }
+
+    /**
+     * 导出期刊阅读列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:export')")
+    @Log(title = "期刊阅读", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsHomeArticleViewScrm fsHomeArticleView) {
+        List<FsHomeArticleViewScrm> list = fsHomeArticleViewService.selectFsHomeArticleViewList(fsHomeArticleView);
+        ExcelUtil<FsHomeArticleViewScrm> util = new ExcelUtil<FsHomeArticleViewScrm>(FsHomeArticleViewScrm.class);
+        return util.exportExcel(list, "homeView");
+    }
+
+    /**
+     * 获取期刊阅读详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:query')")
+    @GetMapping(value = "/{viewId}")
+    public AjaxResult getInfo(@PathVariable("viewId") Long viewId) {
+        return AjaxResult.success(fsHomeArticleViewService.selectFsHomeArticleViewById(viewId));
+    }
+
+    /**
+     * 新增期刊阅读
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:add')")
+    @Log(title = "期刊阅读", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsHomeArticleViewScrm fsHomeArticleView) {
+        return toAjax(fsHomeArticleViewService.insertFsHomeArticleView(fsHomeArticleView));
+    }
+
+    /**
+     * 修改期刊阅读
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:edit')")
+    @Log(title = "期刊阅读", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsHomeArticleViewScrm fsHomeArticleView) {
+        return toAjax(fsHomeArticleViewService.updateFsHomeArticleView(fsHomeArticleView));
+    }
+
+    /**
+     * 删除期刊阅读
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:remove')")
+    @Log(title = "期刊阅读", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{viewIds}")
+    public AjaxResult remove(@PathVariable Long[] viewIds) {
+        return toAjax(fsHomeArticleViewService.deleteFsHomeArticleViewByIds(viewIds));
+    }
+}

+ 7 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java

@@ -290,4 +290,11 @@ public interface FsUserCourseMapper
             " from fs_user_course_video where course_id = #{courseId} and is_del = 0 order by course_sort DESC,video_id")
     List<FsUserCourseVideoAppletVO.FsUserCourseVideo> selectFsUserCourseVideoAppletByCourseId(@Param("courseId") Long courseId);
 
+    @Select("SELECT course_id dict_value, course_name dict_label, img_url dict_imgUrl  \n" +
+            "         FROM fs_user_course \n" +
+            "         WHERE is_del = 0 \n" +
+            "         AND is_private = 1 \n" +
+            "         AND user_id =#{userId}" +
+            "         ORDER BY create_time DESC")
+    List<OptionsVO> selectFsUserCourseAllListByUserId(@Param("userId") Long userId);
 }

+ 11 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1023,9 +1023,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             amount = video.getRedPacketMoney();
         }
 
+
+
         // 准备发送红包参数
         WxSendRedPacketParam packetParam = new WxSendRedPacketParam();
         packetParam.setOpenId(user.getMpOpenId());
+
+
         // 来源是小程序切换openId
         if (param.getSource() == 2) {
             //处理多小程序问题
@@ -1042,11 +1046,17 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             //查出公司绑定openid并赋值
 
         }
+
+        //判断服务号配置是否存在
+        if (StringUtils.isNotEmpty(config.getMpAppId())){
+            packetParam.setMpAppId(config.getMpAppId());
+        }
         packetParam.setAmount(amount);
         packetParam.setSource(param.getSource());
         packetParam.setRedPacketMode(config.getRedPacketMode());
         packetParam.setCompanyId(param.getCompanyId());
         packetParam.setAppId(param.getAppId());
+        packetParam.setUser(user);
 
         System.out.println("红包金额"+amount);
         System.out.println("红包商户号"+packetParam);
@@ -1209,6 +1219,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             if (user.getMpOpenId()!=null&&!isNewWxMerchant){
                 packetParam.setOpenId(user.getMpOpenId());
             }else {
+                //修复数据
                 FsUserWx fsUserWx = fsUserWxService.selectByAppIdAndUserId(param.getAppId(),user.getUserId(),1);
                 if (fsUserWx ==null){
                     if (user.getCourseMaOpenId()==null){

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

@@ -642,7 +642,7 @@ public interface FsStoreOrderMapper
             "</if>" +
             "</script>"})
     Long selectFsStoreOrderTotalCount(@Param("type") int type, @Param("companyId") Long companyId);
-    @Select("select order_id from fs_store_order WHERE `status`= 2 and order_type=1 and store_id in (select store_id from fs_store where delivery_type=2) and  extend_order_id is null ")
+    @Select("select order_id from fs_store_order WHERE `status`= 2 and  extend_order_id is null ")
     List<Long> selectFsStoreOrderNoCreateOms();
     @Select("select order_id from fs_store_order WHERE `status`= 2 and order_type=2 and store_id in(select store_id from fs_store where delivery_type=1) and  extend_order_id is null ")
     List<Long> selectFsStoreOrderNoTuiOrder();

+ 6 - 0
fs-service/src/main/java/com/fs/his/service/IFsStorePaymentService.java

@@ -13,6 +13,8 @@ import com.fs.his.param.PayOrderParam;
 import com.fs.his.param.WxSendRedPacketParam;
 import com.fs.his.vo.FsStorePaymentExcelVO;
 import com.fs.his.vo.FsStorePaymentVO;
+import com.fs.hisStore.param.FsStorePaymentGetWxaCodeParam;
+import com.fs.hisStore.param.FsStorePaymentPayParam;
 import me.chanjar.weixin.common.error.WxErrorException;
 
 import javax.servlet.http.HttpServletRequest;
@@ -114,4 +116,8 @@ public interface IFsStorePaymentService
      * @return R
      */
     R processPayment(PayOrderParam payOrderParam);
+
+    R paymentByWxaCode(FsStorePaymentPayParam payment);
+
+    R getWxaCodeByPayment(FsStorePaymentGetWxaCodeParam param);
 }

+ 124 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java

@@ -5,9 +5,11 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
+import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.annotation.DataScope;
@@ -20,10 +22,15 @@ import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyConfigMapper;
 import com.fs.company.param.FsStoreStatisticsParam;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.company.vo.FsStorePaymentStatisticsVO;
 import com.fs.config.cloud.CloudHostProper;
+import com.fs.core.config.WxMaConfiguration;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.config.CourseConfig;
@@ -48,9 +55,12 @@ import com.fs.his.param.WxSendRedPacketParam;
 import com.fs.his.service.IFsInquiryOrderService;
 import com.fs.his.service.IFsPackageOrderService;
 import com.fs.his.service.IFsStoreOrderService;
+import com.fs.his.service.IFsStorePaymentService;
 import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.FsStorePaymentExcelVO;
 import com.fs.his.vo.FsStorePaymentVO;
+import com.fs.hisStore.param.FsStorePaymentGetWxaCodeParam;
+import com.fs.hisStore.param.FsStorePaymentPayParam;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
 import com.fs.huifuPay.domain.HuiFuQueryOrderResult;
 import com.fs.huifuPay.domain.HuiFuRefundResult;
@@ -60,6 +70,8 @@ import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
 import com.fs.system.service.ISysConfigService;
 import com.fs.tzBankPay.TzBankService.TzBankService;
 import com.fs.tzBankPay.TzBankService.TzBankServiceImpl.TzBankServiceImpl;
@@ -103,7 +115,6 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-import com.fs.his.service.IFsStorePaymentService;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
@@ -153,6 +164,10 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     private FsUserMapper userMapper;
     @Autowired
     private FsUserWxMapper userWxMapper;
+    @Autowired
+    private ICompanyUserService companyUserService;
+    @Autowired
+    private ICompanyService companyService;
 
     @Autowired
     private CloudHostProper cloudHostProper;
@@ -1156,4 +1171,112 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         return storePayment;
     }
 
+
+    @Override
+    public R getWxaCodeByPayment(FsStorePaymentGetWxaCodeParam param)  {
+        final WxMaService wxMaService = WxMaConfiguration.getMaService(param.getAppId());
+        String scene;
+        //判断销售id
+        if (param.getCompanyUserId() == null){
+            scene = "companyId="+ param.getCompanyId();
+        }else {
+            scene = "companyId="+ param.getCompanyId()+"&"+"companyUserId="+ param.getCompanyUserId();
+        }
+        byte[] file;
+        try {
+            file = wxMaService.getQrcodeService().createWxaCodeUnlimitBytes(
+                    scene,
+                    "pages_user/user/pay",
+                    true,
+                    "release",
+                    430,
+                    true,
+                    null,
+                    false);
+
+            // 上传图片到存储桶
+            String suffix = ".png";
+            CloudStorageService storage = OSSFactory.build();
+            String url;
+            try {
+                url = storage.uploadSuffix(file, suffix);
+            }  catch (Exception e) {
+                // 记录错误日志
+                logger.error("生成图片失败:{}",e.getMessage(),e);
+                return R.error("生成图片失败");
+            }
+            // 返回成功信息
+            return R.ok().put("url",url);
+
+        } catch (WxErrorException e) {
+            logger.error(e.getMessage(), e);
+            return R.error("微信接口调用失败: " + e.getMessage());
+        }
+    }
+
+
+
+    @Override
+    public R paymentByWxaCode(FsStorePaymentPayParam param) {
+        FsUser user = userMapper.selectFsUserById(param.getUserId());
+        if (user==null){
+            return R.error("用户不存在!");
+        }
+        Company company = companyService.selectCompanyById(param.getCompanyId());
+        if (company==null || company.getStatus()==0){
+            return R.error("服务商不存在,或已被停用!");
+        }
+        if(param.getPayMoney().compareTo(new BigDecimal(0.0))<1){
+            return R.error("支付金额必须大于0");
+        }
+        if (param.getCompanyUserId()!=null){
+            CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());
+            if(companyUser == null || companyUser.getStatus().equals("1")){
+                return R.error("注册失败客服已停用,或不存在!");
+            }
+        }
+
+
+        //生成支付流水
+        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        FsStorePayment storePayment=new FsStorePayment();
+        storePayment.setCompanyId(param.getCompanyId());
+        //判断销售是否存在
+        if (param.getCompanyUserId()!=null){
+            storePayment.setCompanyUserId(param.getCompanyUserId());
+        }
+        storePayment.setStatus(0);
+        storePayment.setPayCode(orderSn);
+        storePayment.setPayMoney(param.getPayMoney());
+        storePayment.setCreateTime(new Date());
+        storePayment.setPayTypeCode("weixin");
+        storePayment.setBusinessType(1);
+        storePayment.setRemark("商城收款订单支付");
+        storePayment.setOpenId(user.getMaOpenId());
+        storePayment.setUserId(user.getUserId());
+        fsStorePaymentMapper.insertFsStorePayment(storePayment);
+
+        //汇付支付
+        HuiFuCreateOrder o = new HuiFuCreateOrder();
+        o.setTradeType("T_MINIAPP");
+        o.setOpenid(user.getMaOpenId());
+        o.setReqSeqId("payment-"+storePayment.getPayCode());
+        o.setTransAmt(storePayment.getPayMoney().toString());
+        o.setGoodsDesc("商城订单支付");
+        HuifuCreateOrderResult result = huiFuService.createOrder(o);
+        if(result.getResp_code()!=null&&(result.getResp_code().equals("00000000")||result.getResp_code().equals("00000100"))){
+            FsStorePayment mt=new FsStorePayment();
+            mt.setPaymentId(storePayment.getPaymentId());
+            mt.setTradeNo(result.getHf_seq_id());
+            fsStorePaymentMapper.updateFsStorePayment(mt);
+            Map<String, Object> resultMap = com.alibaba.fastjson.JSON.parseObject(result.getPay_info(), new TypeReference<Map<String, Object>>() {});
+            String s = (String) resultMap.get("package");
+            resultMap.put("packageValue",s);
+            return R.ok().put("result",resultMap);
+        }
+        else{
+            return R.error(result.getResp_desc());
+        }
+    }
+
 }

+ 14 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStorePaymentGetWxaCodeParam.java

@@ -0,0 +1,14 @@
+package com.fs.hisStore.param;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FsStorePaymentGetWxaCodeParam {
+    private Long companyId;
+
+    private Long companyUserId;
+
+    private String appId;
+}

+ 5 - 4
fs-service/src/main/java/com/fs/hisStore/service/IFsStorePaymentScrmService.java

@@ -6,10 +6,7 @@ import java.util.Map;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.core.domain.R;
 import com.fs.hisStore.domain.FsStorePaymentScrm;
-import com.fs.hisStore.param.FsStorePaymentPayParam;
-import com.fs.hisStore.param.FsStorePaymentParam;
-import com.fs.hisStore.param.FsStoreStatisticsParam;
-import com.fs.hisStore.param.WxSendRedPacketParam;
+import com.fs.hisStore.param.*;
 import com.fs.hisStore.vo.FsStorePaymentStatisticsVO;
 import com.fs.hisStore.vo.FsStorePaymentVO;
 
@@ -115,4 +112,8 @@ public interface IFsStorePaymentScrmService
     void bufaRedPacket();
 
     R sendRewardByTest(Long userId);
+
+    R getWxaCodeByPayment(FsStorePaymentGetWxaCodeParam param);
+
+    R paymentByWxaCode(FsStorePaymentPayParam param);
 }

+ 139 - 11
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -1,21 +1,25 @@
 package com.fs.hisStore.service.impl;
 
+
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
+
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.config.FSSysConfig;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyConfigMapper;
 import com.fs.company.service.ICompanyService;
@@ -26,20 +30,26 @@ import com.fs.course.config.RedPacketConfig;
 import com.fs.course.domain.FsCourseRedPacketLog;
 import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.course.service.IFsCourseRedPacketLogService;
+import com.fs.his.config.FsSysConfig;
+import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserWx;
+import com.fs.his.service.IFsUserService;
 import com.fs.his.service.IFsUserWxService;
 import com.fs.his.utils.ConfigUtil;
+import com.fs.his.utils.HttpUtil;
 import com.fs.hisStore.enums.SysConfigEnum;
+import com.fs.hisStore.param.*;
+import com.fs.huifuPay.domain.HuiFuCreateOrder;
+import com.fs.huifuPay.domain.HuifuCreateOrderResult;
+import com.fs.huifuPay.service.HuiFuService;
 import com.fs.pay.pay.config.PayConfig;
 import com.fs.pay.pay.dto.WxJspayDTO;
-import com.fs.hisStore.param.FsStoreStatisticsParam;
-import com.fs.hisStore.param.WxSendRedPacketParam;
 import com.fs.hisStore.vo.FsStorePaymentStatisticsVO;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
 import com.fs.system.service.ISysConfigService;
 import com.fs.wx.miniapp.config.WxMaProperties;
 import com.fs.hisStore.domain.FsUserScrm;
-import com.fs.hisStore.param.FsStorePaymentPayParam;
-import com.fs.hisStore.param.FsStorePaymentParam;
 import com.fs.hisStore.service.IFsUserScrmService;
 import com.fs.hisStore.vo.FsStorePaymentVO;
 import com.fs.pay.service.IPayService;
@@ -54,6 +64,8 @@ import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.TransferService;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -104,6 +116,13 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
 
     @Autowired
     private CompanyConfigMapper companyConfigMapper;
+
+    @Autowired
+    private HuiFuService huiFuService;
+
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 查询支付明细
      *
@@ -322,9 +341,9 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         storePayment.setBankTransactionId(bankTransactionId);
         fsStorePaymentMapper.updateFsStorePayment(storePayment);
         //增加佣金
-        if(storePayment.getCompanyId()!=null&&storePayment.getCompanyId()>0){
-            companyService.addCompanyPaymentMoney(storePayment);
-        }
+//        if(storePayment.getCompanyId()!=null&&storePayment.getCompanyId()>0){
+//            companyService.addCompanyPaymentMoney(storePayment);
+//        }
         return "SUCCESS";
     }
 
@@ -768,4 +787,113 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
         return R.ok();
         }
+
+
+    @Override
+    public R getWxaCodeByPayment(FsStorePaymentGetWxaCodeParam param)  {
+        final WxMaService wxMaService = WxMaConfiguration.getMaService(param.getAppId());
+        String scene;
+        //判断销售id
+        if (param.getCompanyUserId() == null){
+            scene = "companyId="+ param.getCompanyId();
+        }else {
+            scene = "companyId="+ param.getCompanyId()+"&"+"companyUserId="+ param.getCompanyUserId();
+        }
+        byte[] file;
+        try {
+            file = wxMaService.getQrcodeService().createWxaCodeBytes(
+                    "pages_user/user/pay?companyId="+param.getCompanyId(),
+                    "release",
+                    430,
+                    true,
+                    null,
+                    true);
+
+            // 上传图片到存储桶
+            String suffix = ".png";
+            CloudStorageService storage = OSSFactory.build();
+            String url;
+            try {
+                url = storage.uploadSuffix(file, suffix);
+            }  catch (Exception e) {
+                // 记录错误日志
+                logger.error("生成图片失败:{}",e.getMessage(),e);
+                return R.error("生成图片失败");
+            }
+            redisCache.setCacheObject("company-wxa-code:"+param.getCompanyId(),url);
+            // 返回成功信息
+            return R.ok().put("url",url);
+
+        } catch (WxErrorException e) {
+            logger.error(e.getMessage(), e);
+            return R.error("微信接口调用失败: " + e.getMessage());
+        }
+    }
+
+
+    @Autowired
+    private IFsUserService fsUserService;
+
+    @Override
+    public R paymentByWxaCode(FsStorePaymentPayParam param) {
+        FsUser user = fsUserService.selectFsUserById(param.getUserId());
+        if (user==null){
+            return R.error("用户不存在!");
+        }
+        Company company = companyService.selectCompanyById(param.getCompanyId());
+        if (company==null || company.getStatus()==0){
+            return R.error("服务商不存在,或已被停用!");
+        }
+        if(param.getPayMoney().compareTo(new BigDecimal(0.0))<1){
+            return R.error("支付金额必须大于0");
+        }
+        if (param.getCompanyUserId()!=null){
+            CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());
+            if(companyUser == null || companyUser.getStatus().equals("1")){
+                return R.error("注册失败客服已停用,或不存在!");
+            }
+        }
+
+
+        //生成支付流水
+        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        FsStorePaymentScrm storePayment=new FsStorePaymentScrm();
+        storePayment.setCompanyId(param.getCompanyId());
+        //判断销售是否存在
+        if (param.getCompanyUserId()!=null){
+            storePayment.setCompanyUserId(param.getCompanyUserId());
+        }
+        storePayment.setStatus(0);
+        storePayment.setPayCode(orderSn);
+        storePayment.setPayMoney(param.getPayMoney());
+        storePayment.setCreateTime(new Date());
+        storePayment.setPayTypeCode("weixin");
+        storePayment.setBusinessType(1);
+        storePayment.setRemark("商城收款订单支付");
+        storePayment.setOpenId(user.getMaOpenId());
+        storePayment.setUserId(user.getUserId());
+        fsStorePaymentMapper.insertFsStorePayment(storePayment);
+
+        //汇付支付
+        HuiFuCreateOrder o = new HuiFuCreateOrder();
+        o.setTradeType("T_MINIAPP");
+        o.setOpenid(user.getMaOpenId());
+        o.setReqSeqId("payment-"+storePayment.getPayCode());
+        o.setTransAmt(storePayment.getPayMoney().toString());
+        o.setGoodsDesc("商城订单支付");
+        HuifuCreateOrderResult result = huiFuService.createOrder(o);
+        if(result.getResp_code()!=null&&(result.getResp_code().equals("00000000")||result.getResp_code().equals("00000100"))){
+            FsStorePaymentScrm mt=new FsStorePaymentScrm();
+            mt.setPaymentId(storePayment.getPaymentId());
+            mt.setTradeNo(result.getHf_seq_id());
+            fsStorePaymentMapper.updateFsStorePayment(mt);
+            Map<String, Object> resultMap = JSON.parseObject(result.getPay_info(), new TypeReference<Map<String, Object>>() {});
+            String s = (String) resultMap.get("package");
+            resultMap.put("packageValue",s);
+            return R.ok().put("result",resultMap);
+        }
+        else{
+            return R.error(result.getResp_desc());
+        }
+    }
 }

+ 3 - 3
fs-service/src/main/resources/application-config-druid-jnlzjk.yml

@@ -37,8 +37,8 @@ wx:
       port: 6379
       timeout: 2000
     configs:
-      - appId: wx090xxxx5456e # 第一个公众号的appid  //公众号名称:德瑞
-        secret: dc70e9xxxx0aea6b7c52b7 # 公众号的appsecret--德瑞
+      - appId: wxce847c8ebe5e62aa # 第一个公众号的appid  //公众号名称:济南联智健
+        secret: 37f7c5e3b7ff07794343957f7ced8de4 # 公众号的appsecret--济南联智健
         token: PPKOdAlCoMO # 接口配置里的Token值
         aesKey: Eswa6VjwtVMCcw03qZy6fWllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
 aifabu:  #爱链接
@@ -78,7 +78,7 @@ tmp_secret_config:
   proxy: fs
 cloud_host:
   company_name: 济南联志健康
-  projectCode: JNLZJK
+  projectCode: LZJK
 headerImg:
   imgUrl:
 

+ 1 - 1
fs-service/src/main/resources/application-config-druid-nmgyt.yml

@@ -63,7 +63,7 @@ watch:
   password3: v9xsKuqn_$d2y
 
 fs :
-  commonApi: http://172.16.0.9:7771
+  commonApi: http://172.16.0.9:8010
   h5CommonApi: http://192.168.0.18:7771
 nuonuo:
   key: 10924508

+ 70 - 43
fs-service/src/main/resources/mapper/course/FsCourseLinkMapper.xml

@@ -83,53 +83,80 @@
         </trim>
     </insert>
 
+<!--    <insert id="insertFsCourseLinkBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="linkId">-->
+<!--        INSERT INTO fs_course_link-->
+<!--        <trim prefix="(" suffix=")" suffixOverrides=",">-->
+<!--            <if test="courseLinks != null and courseLinks.size() &gt; 0">-->
+<!--                &lt;!&ndash; 假设所有日志对象的字段一致 &ndash;&gt;-->
+<!--                &lt;!&ndash; 动态生成列列表,基于第一个日志对象 &ndash;&gt;-->
+<!--                <foreach collection="courseLinks" item="item" index="index" open="" close="" separator="">-->
+<!--                    <if test="index == 0">-->
+<!--                        <if test="item.link != null">link,</if>-->
+<!--                        <if test="item.realLink != null">real_link,</if>-->
+<!--                        <if test="item.createTime != null">create_time,</if>-->
+<!--                        <if test="item.updateTime != null">update_time,</if>-->
+<!--                        <if test="item.companyId != null">company_id,</if>-->
+<!--                        <if test="item.companyUserId != null">company_user_id,</if>-->
+<!--                        <if test="item.qwUserId != null">qw_user_id,</if>-->
+<!--                        <if test="item.videoId != null">video_id,</if>-->
+<!--                        <if test="item.corpId != null">corp_id,</if>-->
+<!--                        <if test="item.courseId != null">course_id,</if>-->
+<!--                        <if test="item.qwExternalId != null">qw_external_id,</if>-->
+<!--                        <if test="item.linkType != null">link_type,</if>-->
+<!--                        <if test="item.isRoom != null">is_room,</if>-->
+<!--                    </if>-->
+<!--                </foreach>-->
+<!--            </if>-->
+<!--        </trim>-->
+<!--        <trim prefix="VALUES">-->
+<!--            <foreach collection="courseLinks" item="item" separator=",">-->
+<!--                (<trim suffixOverrides=",">-->
+<!--                <if test="item.link != null">#{item.link},</if>-->
+<!--                <if test="item.realLink != null">#{item.realLink},</if>-->
+<!--                <if test="item.createTime != null">#{item.createTime},</if>-->
+<!--                <if test="item.updateTime != null">#{item.updateTime},</if>-->
+<!--                <if test="item.companyId != null">#{item.companyId},</if>-->
+<!--                <if test="item.companyUserId != null">#{item.companyUserId},</if>-->
+<!--                <if test="item.qwUserId != null">#{item.qwUserId},</if>-->
+<!--                <if test="item.videoId != null">#{item.videoId},</if>-->
+<!--                <if test="item.corpId != null">#{item.corpId},</if>-->
+<!--                <if test="item.courseId != null">#{item.courseId},</if>-->
+<!--                <if test="item.qwExternalId != null">#{item.qwExternalId},</if>-->
+<!--                <if test="item.linkType != null">#{item.linkType},</if>-->
+<!--                <if test="item.isRoom != null">#{item.isRoom},</if>-->
+<!--            </trim>)-->
+<!--            </foreach>-->
+<!--        </trim>-->
+<!--    </insert>-->
+
     <insert id="insertFsCourseLinkBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="linkId">
         INSERT INTO fs_course_link
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="courseLinks != null and courseLinks.size() &gt; 0">
-                <!-- 假设所有日志对象的字段一致 -->
-                <!-- 动态生成列列表,基于第一个日志对象 -->
-                <foreach collection="courseLinks" item="item" index="index" open="" close="" separator="">
-                    <if test="index == 0">
-                        <if test="item.link != null">link,</if>
-                        <if test="item.realLink != null">real_link,</if>
-                        <if test="item.createTime != null">create_time,</if>
-                        <if test="item.updateTime != null">update_time,</if>
-                        <if test="item.companyId != null">company_id,</if>
-                        <if test="item.companyUserId != null">company_user_id,</if>
-                        <if test="item.qwUserId != null">qw_user_id,</if>
-                        <if test="item.videoId != null">video_id,</if>
-                        <if test="item.corpId != null">corp_id,</if>
-                        <if test="item.courseId != null">course_id,</if>
-                        <if test="item.qwExternalId != null">qw_external_id,</if>
-                        <if test="item.linkType != null">link_type,</if>
-                        <if test="item.isRoom != null">is_room,</if>
-                    </if>
-                </foreach>
-            </if>
-        </trim>
-        <trim prefix="VALUES">
-            <foreach collection="courseLinks" item="item" separator=",">
-                (<trim suffixOverrides=",">
-                <if test="item.link != null">#{item.link},</if>
-                <if test="item.realLink != null">#{item.realLink},</if>
-                <if test="item.createTime != null">#{item.createTime},</if>
-                <if test="item.updateTime != null">#{item.updateTime},</if>
-                <if test="item.companyId != null">#{item.companyId},</if>
-                <if test="item.companyUserId != null">#{item.companyUserId},</if>
-                <if test="item.qwUserId != null">#{item.qwUserId},</if>
-                <if test="item.videoId != null">#{item.videoId},</if>
-                <if test="item.corpId != null">#{item.corpId},</if>
-                <if test="item.courseId != null">#{item.courseId},</if>
-                <if test="item.qwExternalId != null">#{item.qwExternalId},</if>
-                <if test="item.linkType != null">#{item.linkType},</if>
-                <if test="item.isRoom != null">#{item.isRoom},</if>
-            </trim>)
-            </foreach>
-        </trim>
+        (
+        link, real_link, create_time, update_time,
+        company_id, company_user_id, qw_user_id, video_id,
+        corp_id, course_id, qw_external_id, link_type,
+        is_room
+        )
+        VALUES
+        <foreach collection="courseLinks" item="item" separator=",">
+            (
+            #{item.link,jdbcType=VARCHAR},
+            #{item.realLink,jdbcType=VARCHAR},
+            #{item.createTime,jdbcType=TIMESTAMP},
+            #{item.updateTime,jdbcType=TIMESTAMP},
+            #{item.companyId,jdbcType=BIGINT},
+            #{item.companyUserId,jdbcType=BIGINT},
+            #{item.qwUserId,jdbcType=VARCHAR},
+            #{item.videoId,jdbcType=BIGINT},
+            #{item.corpId,jdbcType=VARCHAR},
+            #{item.courseId,jdbcType=BIGINT},
+            #{item.qwExternalId,jdbcType=BIGINT},
+            #{item.linkType,jdbcType=BIGINT},
+            #{item.isRoom,jdbcType=VARCHAR},
+            )
+        </foreach>
     </insert>
 
-
     <update id="updateFsCourseLink" parameterType="FsCourseLink">
         update fs_course_link
         <trim prefix="SET" suffixOverrides=",">

+ 5 - 3
fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml

@@ -256,10 +256,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 and project = ${project}
             </if>
             <if test="common == null">
-                AND company_id IS NULL
+                AND company_id IS not NULL
             </if>
             <if test="common != null ">
-                AND company_id IS NOT NULL
+                AND company_id IS NULL
             </if>
         </where>
 
@@ -275,7 +275,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="tabType!=null and tabType=='company'">
             group by company_id,`month`
         </if>
-
+        <if test="tabType!=null and tabType=='common'">
+            group by course_id,`month`
+        </if>
     </select>
 
 </mapper>

+ 1 - 1
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -1917,7 +1917,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT
             count( DISTINCT fs_user.user_id ) as userNum,
             count( DISTINCT CASE WHEN to_days( fs_user.create_time ) = to_days( now()) THEN fs_user.user_id END ) as newUserNum,
-            fs_user.company_id
+            fs_user_company_user.company_id
         FROM
             fs_user
                 LEFT JOIN fs_user_company_user ON fs_user_company_user.user_id = fs_user.user_id

+ 8 - 0
fs-user-app/src/main/java/com/fs/app/controller/CompanyUserController.java

@@ -173,4 +173,12 @@ public class CompanyUserController extends  AppBaseController {
 
     }
 
+    @ApiOperation("获取公司收款码")
+    @GetMapping("/getCompanyWxaCodeByPayment")
+    public R getCompanyWxaCodeByPayment(@RequestParam("companyId")Long companyId,HttpServletRequest request){
+        //获取用户码
+        String WxaCode = redisCache.getCacheObject("company-wxa-code:"+companyId);
+        return R.ok().put("data",WxaCode);
+    }
+
 }

+ 62 - 0
fs-user-app/src/main/java/com/fs/app/controller/PaymentController.java

@@ -0,0 +1,62 @@
+package com.fs.app.controller;
+
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.fs.app.annotation.Login;
+import com.fs.common.annotation.RepeatSubmit;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.R;
+import com.fs.common.utils.IpUtil;
+import com.fs.core.config.WxMaConfiguration;
+import com.fs.his.service.IFsStorePaymentService;
+import com.fs.hisStore.domain.FsUserScrm;
+import com.fs.hisStore.param.FsStorePaymentGetWxaCodeParam;
+import com.fs.hisStore.param.FsStorePaymentPayParam;
+import com.fs.hisStore.service.IFsStorePaymentScrmService;
+import com.fs.hisStore.service.IFsUserScrmService;
+import com.fs.wx.miniapp.config.WxMaProperties;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Api("支付接口")
+@RestController
+@RequestMapping("/app/payment")
+public class PaymentController extends AppBaseController {
+    @Autowired
+    private WxMaProperties properties;
+    protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
+
+    @Autowired
+    private IFsStorePaymentService paymentService;
+
+
+    @Login
+    @ApiOperation("收款订单支付")
+    @PostMapping("/paymentByWxaCode")
+    @RepeatSubmit
+    public R paymentByWxaCode(@Validated @RequestBody FsStorePaymentPayParam payment)
+    {
+        payment.setUserId(Long.parseLong(getUserId()));
+        return paymentService.paymentByWxaCode(payment);
+    }
+
+    @ApiOperation("生成收款页面小程序码")
+    @GetMapping("/getWxaCodeByPayment")
+    public R getWxaCodeByPayment(FsStorePaymentGetWxaCodeParam param)
+    {
+        return paymentService.getWxaCodeByPayment(param);
+    }
+
+
+
+
+}

+ 9 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/CompanyUserScrmController.java

@@ -11,6 +11,7 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.sign.Md5Utils;
+import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.CompanyUserCard;
 import com.fs.company.param.CompanyUserLoginParam;
@@ -173,6 +174,14 @@ public class CompanyUserScrmController extends AppBaseController {
         }
     }
 
+    @ApiOperation("获取公司收款码")
+    @GetMapping("/getCompanyWxaCodeByPayment")
+    public R getCompanyWxaCodeByPayment(@RequestParam("companyId")Long companyId,HttpServletRequest request){
+        //获取用户码
+        String WxaCode = redisCache.getCacheObject("company-wxa-code:"+companyId);
+        return R.ok().put("data",WxaCode);
+    }
+
 
 
 }

+ 23 - 17
fs-user-app/src/main/java/com/fs/app/controller/store/PaymentController.java → fs-user-app/src/main/java/com/fs/app/controller/store/PaymentScrmController.java

@@ -3,6 +3,7 @@ package com.fs.app.controller.store;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.fs.app.annotation.Login;
 import com.fs.app.controller.AppBaseController;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.controller.BaseController;
@@ -10,6 +11,7 @@ import com.fs.common.core.domain.R;
 import com.fs.common.utils.IpUtil;
 import com.fs.core.config.WxMaConfiguration;
 import com.fs.hisStore.domain.FsUserScrm;
+import com.fs.hisStore.param.FsStorePaymentGetWxaCodeParam;
 import com.fs.hisStore.param.FsStorePaymentPayParam;
 import com.fs.hisStore.service.IFsStorePaymentScrmService;
 import com.fs.hisStore.service.IFsUserScrmService;
@@ -21,18 +23,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
 
 @Api("支付接口")
 @RestController
 @RequestMapping("/store/app/payment")
-public class PaymentController extends AppBaseController {
+public class PaymentScrmController extends AppBaseController {
     @Autowired
     private WxMaProperties properties;
     protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
@@ -41,6 +39,7 @@ public class PaymentController extends AppBaseController {
     private IFsStorePaymentScrmService paymentService;
     @Autowired
     private IFsUserScrmService userService;
+
     @ApiOperation("支付")
     @PostMapping("/payment")
     @RepeatSubmit
@@ -51,17 +50,7 @@ public class PaymentController extends AppBaseController {
             WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(payment.getCode());
             FsUserScrm user=userService.selectFsUserByMaOpenId(session.getOpenid());
             if(user==null){
-                //创建
-                user=new FsUserScrm();
-                user.setUsername("");
-                user.setNickname("微信用户");
-                user.setStatus(1);
-                user.setMaOpenId(session.getOpenid());
-                user.setUnionId(session.getUnionid());
-                user.setIsWeixinAuth(0);
-                user.setLastIp(ip);
-                user.setCreateTime(new Date());
-                userService.insertFsUser(user);
+                return R.error("用户不存在,返回主页授权登录!");
             }
             payment.setUserId(user.getUserId());
             return paymentService.payment(payment);
@@ -74,6 +63,23 @@ public class PaymentController extends AppBaseController {
 
     }
 
+    @Login
+    @ApiOperation("收款订单支付")
+    @PostMapping("/paymentByWxaCode")
+    @RepeatSubmit
+    public R paymentByWxaCode(@Validated @RequestBody FsStorePaymentPayParam payment)
+    {
+        payment.setUserId(Long.parseLong(getUserId()));
+        return paymentService.paymentByWxaCode(payment);
+    }
+
+    @ApiOperation("生成收款页面小程序码")
+    @GetMapping("/getWxaCodeByPayment")
+    public R getWxaCodeByPayment(FsStorePaymentGetWxaCodeParam param)
+    {
+        return paymentService.getWxaCodeByPayment(param);
+    }
+