ソースを参照

Merge remote-tracking branch 'origin/master'

zyp 3 週間 前
コミット
af84b8a724

+ 16 - 4
fs-admin/src/main/java/com/fs/company/controller/CompanyStatisticsController.java

@@ -13,10 +13,7 @@ import com.fs.company.param.FsStoreStatisticsParam;
 import com.fs.company.service.ICompanySmsLogsService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.service.ICompanyVoiceLogsService;
-import com.fs.company.vo.CompanySmsLogsStatisticsVO;
-import com.fs.company.vo.CompanyVoiceLogsStatisticsVO;
-import com.fs.company.vo.FsStoreOrderStatisticsVO;
-import com.fs.company.vo.FsStorePaymentStatisticsVO;
+import com.fs.company.vo.*;
 import com.fs.crm.param.CrmCustomerStatisticsParam;
 import com.fs.crm.service.ICrmCustomerService;
 import com.fs.crm.service.ICrmCustomerVisitService;
@@ -27,6 +24,7 @@ import com.fs.his.service.IFsStorePaymentService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -631,4 +629,18 @@ public class CompanyStatisticsController extends BaseController
         ExcelUtil<CrmCustomerVisitStatisticsVO> util = new ExcelUtil<CrmCustomerVisitStatisticsVO>(CrmCustomerVisitStatisticsVO.class);
         return util.exportExcel(list, "visit");
     }
+
+    @GetMapping("/ipadStaticTotal/{dateTime}")
+    public R ipadStaticTotal(@PathVariable("dateTime") String dateTime){
+        List<QwIpadTotalVo> qwIpadTotalVos = userService.selectCompanyByIpadStatus(dateTime);
+        return R.ok().put("list",qwIpadTotalVos);
+    }
+
+    @GetMapping("/exportIpadStaticByTime/{dateTime}")
+    public AjaxResult exportIpadStaticByTime(@PathVariable("dateTime") String dateTime){
+        List<QwIpadTotalVo> qwIpadTotalVos = userService.selectCompanyByIpadStatus(dateTime);
+        ExcelUtil<QwIpadTotalVo> util = new ExcelUtil<QwIpadTotalVo>(QwIpadTotalVo.class);
+        return util.exportExcel(qwIpadTotalVos, "visit");
+    }
+
 }

+ 7 - 1
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -604,7 +604,13 @@ public class FsStoreOrderController extends BaseController
             if (param.getUserPhoneMk() != null && !param.getUserPhoneMk().isEmpty()) {
                 param.setUserPhone(encryptPhone(param.getUserPhoneMk()));
             }
-            List<FsStoreOrderListVO> list = fsStoreOrderService.selectFsStoreOrderListVO(param);
+            List<FsStoreOrderListVO> list;
+            if (StringUtils.isNotBlank(param.getErpAccount())){
+                //金牛erp查询
+                list = fsStoreOrderService.selectFsStoreOrderListVOByErpAccount(param);
+            } else {
+                list = fsStoreOrderService.selectFsStoreOrderListVO(param);
+            }
             orderIds = list.stream().map(FsStoreOrderListVO::getOrderId).collect(Collectors.toList());
         }
         if (orderIds.isEmpty()){

+ 25 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -5,12 +5,15 @@ import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.service.impl.SmsServiceImpl;
+import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.SecurityUtils;
 import com.fs.company.domain.CompanyMoneyLogs;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.CompanyVoiceCaller;
 import com.fs.company.mapper.*;
 import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.company.vo.QwIpadTotalVo;
 import com.fs.company.vo.RedPacketMoneyVO;
 import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.course.service.IFsCourseWatchLogService;
@@ -48,6 +51,7 @@ import com.fs.qwApi.service.QwApiService;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +63,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Component("task")
 public class Task {
     @Autowired
@@ -153,6 +158,26 @@ public class Task {
     @Autowired
     private IQwUserService qwUserService;
 
+    @Autowired
+    private ICompanyUserService userService;
+
+    //定时查询ipad主机使用情况,建议每天凌晨1点执行一次
+    public void totalIpadTask(){
+        String dateTime = DateUtils.addDateDays(-1); // 昨天
+        List<QwIpadTotalVo> qwIpadTotalVos = userService.selectCompanyByIpadStatusCount();
+        if(qwIpadTotalVos != null && !qwIpadTotalVos.isEmpty()){
+            qwIpadTotalVos.forEach(qwIpadTotalVo ->
+                    qwIpadTotalVo.setStatTime(dateTime)
+            );
+            int a = userService.insertQwIpadTotal(qwIpadTotalVos);
+            if(a == 0){
+                log.error("插入ipad主机失败");
+            }
+        }else{
+            log.error("查询没有数据");
+        }
+    }
+
     public void addQwUserName(){
         QwCompany qwCompany = new QwCompany();
         List<QwCompany> companyList = qwCompanyService.selectQwCompanyList(qwCompany);

+ 6 - 0
fs-common/src/main/java/com/fs/common/utils/DateUtils.java

@@ -264,5 +264,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return endOfDay.format(OUTPUT_FORMATTER);
     }
 
+    // 返回昨天或明天的日期字符串(格式:yyyy-MM-dd)
+    public static String addDateDays(int days) {
+        Calendar cal = Calendar.getInstance();
+        cal.add(Calendar.DATE, days);
+        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
+    }
 
 }

+ 120 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsCouponController.java

@@ -0,0 +1,120 @@
+package com.fs.company.controller.store;
+
+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.model.LoginUser;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.exception.CustomException;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.his.domain.FsCoupon;
+import com.fs.his.param.FsCouponParam;
+import com.fs.his.service.IFsCouponService;
+import com.fs.his.vo.FsCouponAllListVO;
+import com.fs.his.vo.FsCouponListVO;
+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 2023-09-04
+ */
+@RestController
+@RequestMapping("/store/coupon")
+public class FsCouponController extends BaseController
+{
+    @Autowired
+    private IFsCouponService fsCouponService;
+
+    /**
+     * 查询优惠券列表订单查询
+     */
+    @PreAuthorize("@ss.hasPermi('store:coupon:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsCouponParam fsCoupon)
+    {
+        startPage();
+        List<FsCouponListVO> list = fsCouponService.selectFsCouponListVO(fsCoupon);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询优惠券列表订单查询
+     */
+    @GetMapping("/allList")
+    public AjaxResult allList()
+    {
+        List<FsCouponAllListVO> list = fsCouponService.selectFsCouponListAll();
+        return AjaxResult.success(list);
+    }
+
+
+
+    /**
+     * 导出优惠券列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:coupon:export')")
+    @Log(title = "优惠券", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsCoupon fsCoupon)
+    {
+        List<FsCoupon> list = fsCouponService.selectFsCouponList(fsCoupon);
+        ExcelUtil<FsCoupon> util = new ExcelUtil<FsCoupon>(FsCoupon.class);
+        return util.exportExcel(list, "优惠券数据");
+    }
+
+    /**
+     * 获取优惠券详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:coupon:query')")
+    @GetMapping(value = "/{couponId}")
+    public AjaxResult getInfo(@PathVariable("couponId") Long couponId)
+    {
+        return AjaxResult.success(fsCouponService.selectFsCouponByCouponId(couponId));
+    }
+
+//    /**
+//     * 新增优惠券
+//     */
+//    @PreAuthorize("@ss.hasPermi('store:coupon:add')")
+//    @Log(title = "优惠券", businessType = BusinessType.INSERT)
+//    @PostMapping
+//    public AjaxResult add(@RequestBody FsCoupon fsCoupon)
+//    {
+//        return toAjax(fsCouponService.insertFsCoupon(fsCoupon));
+//    }
+//
+//    /**
+//     * 修改优惠券
+//     */
+//    @PreAuthorize("@ss.hasPermi('store:coupon:edit')")
+//    @Log(title = "优惠券", businessType = BusinessType.UPDATE)
+//    @PutMapping
+//    public AjaxResult edit(@RequestBody FsCoupon fsCoupon)
+//    {
+//        FsCoupon c = fsCouponService.selectFsCouponByCouponId(fsCoupon.getCouponId());
+//        long l = c.getRemainNumber() + fsCoupon.getNumber() - c.getNumber();
+//        if (l<0){
+//            throw new CustomException("剩余卷不足");
+//        }
+//        fsCoupon.setRemainNumber(l);
+//        return toAjax(fsCouponService.updateFsCoupon(fsCoupon));
+//    }
+//
+//    /**
+//     * 删除优惠券
+//     */
+//    @PreAuthorize("@ss.hasPermi('store:coupon:remove')")
+//    @Log(title = "优惠券", businessType = BusinessType.DELETE)
+//	@DeleteMapping("/{couponIds}")
+//    public AjaxResult remove(@PathVariable Long[] couponIds)
+//    {
+//        return toAjax(fsCouponService.deleteFsCouponByCouponIds(couponIds));
+//    }
+}

+ 2 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsUserCouponController.java

@@ -40,6 +40,8 @@ public class FsUserCouponController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(FsUserCouponParam fsUserCoupon)
     {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsUserCoupon.setCompanyId(loginUser.getCompany().getCompanyId());
         startPage();
         List<FsUserCouponListVO> list = fsUserCouponService.selectFsUserCouponListVO(fsUserCoupon);
         return getDataTable(list);

+ 6 - 4
fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -5,10 +5,7 @@ import com.fs.common.enums.DataSourceType;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
-import com.fs.company.vo.CompanyQwUserByIdsVo;
-import com.fs.company.vo.CompanyUserQwListVO;
-import com.fs.company.vo.CompanyUserVO;
-import com.fs.company.vo.DocCompanyUserVO;
+import com.fs.company.vo.*;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwOptionsVO;
@@ -308,4 +305,9 @@ public interface CompanyUserMapper
 
     int updateAllowedAllRegister(@Param("status") boolean status, @Param("userIds")List<Long> userIds);
 
+    List<QwIpadTotalVo> selectCompanyByIpadStatus(@Param("dateTime") String dateTime);
+
+    List<QwIpadTotalVo> selectCompanyByIpadStatusCount();
+
+    int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos);
 }

+ 7 - 4
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -4,10 +4,7 @@ import com.fs.common.core.domain.R;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
-import com.fs.company.vo.CompanyQwUserByIdsVo;
-import com.fs.company.vo.CompanyUserQwListVO;
-import com.fs.company.vo.CompanyUserVO;
-import com.fs.company.vo.DocCompanyUserVO;
+import com.fs.company.vo.*;
 import com.fs.his.vo.CitysAreaVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.dto.UserProjectDTO;
@@ -220,4 +217,10 @@ public interface ICompanyUserService {
      */
     Boolean isAllowedAllRegister(boolean status,  List<Long> userIds);
 
+    List<QwIpadTotalVo> selectCompanyByIpadStatus(String dateTime);
+
+    List<QwIpadTotalVo> selectCompanyByIpadStatusCount();
+
+    int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos);
+
 }

+ 16 - 4
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -13,10 +13,7 @@ import com.fs.company.mapper.*;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.service.ICompanyUserService;
-import com.fs.company.vo.CompanyQwUserByIdsVo;
-import com.fs.company.vo.CompanyUserQwListVO;
-import com.fs.company.vo.CompanyUserVO;
-import com.fs.company.vo.DocCompanyUserVO;
+import com.fs.company.vo.*;
 import com.fs.course.service.IFsUserCompanyUserService;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsCityService;
@@ -624,4 +621,19 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return true;
     }
 
+    @Override
+    public List<QwIpadTotalVo> selectCompanyByIpadStatus(String dateTime) {
+        return companyUserMapper.selectCompanyByIpadStatus(dateTime);
+    }
+
+    @Override
+    public List<QwIpadTotalVo> selectCompanyByIpadStatusCount() {
+        return companyUserMapper.selectCompanyByIpadStatusCount();
+    }
+
+    @Override
+    public int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos) {
+        return companyUserMapper.insertQwIpadTotal(qwIpadTotalVos);
+    }
+
 }

+ 15 - 0
fs-service/src/main/java/com/fs/company/vo/QwIpadTotalVo.java

@@ -0,0 +1,15 @@
+package com.fs.company.vo;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class QwIpadTotalVo {
+    private Long id;
+    private Long companyId;
+    @Excel(name = "公司名称")
+    private String companyName;
+    @Excel(name = "绑定数")
+    private Long bindCount;
+    private String statTime;
+}

+ 3 - 2
fs-service/src/main/java/com/fs/his/mapper/FsUserCouponMapper.java

@@ -81,8 +81,9 @@ public interface FsUserCouponMapper
             "            <if test=\"businessId != null \"> and uc.business_id = #{businessId}</if>\n" +
             "            <if test=\"businessType != null \"> and uc.business_type = #{businessType}</if>\n" +
             "            <if test=\"status != null \"> and uc.status = #{status}</if>\n" +
-            "            <if test=\"companyName != null \">and com.company_name like concat('%', #{companyName}, '%') </if>\n" +
-            "            <if test=\"companyUserName != null \">and comu.user_name like concat('%', #{companyUserName}, '%') </if>\n" +
+            "            <if test=\"companyName != null and companyName != ''\">and com.company_name like concat('%', #{companyName}, '%') </if>\n" +
+            "            <if test=\"companyUserName != null and companyUserName != ''\">and comu.user_name like concat('%', #{companyUserName}, '%') </if>\n" +
+            "            <if test=\"companyId != null \">and uc.company_id = #{companyId} </if>\n" +
             "        </where> "+
             " order by id desc"+
             "</script>"})

+ 2 - 0
fs-service/src/main/java/com/fs/his/param/FsUserCouponParam.java

@@ -55,4 +55,6 @@ public class FsUserCouponParam {
     private String companyName;
     private String companyUserName;
 
+    private Long companyId;
+
 }

+ 28 - 21
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -3402,28 +3402,35 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         DFApiResponse dfApiResponse = JSON.parseObject(body, DFApiResponse.class);
         Object result = dfApiResponse.getResult();
         if (result != null) {
+
             String jsonString = JSON.toJSONString(result);
-            List<DFOrderStatusResultRequest> requestList = JSON.parseArray(jsonString, DFOrderStatusResultRequest.class);
-            if (requestList != null && !requestList.isEmpty()) {
-                //0待揽收 1已揽收 2运输中 3派送中 4异常件 5退回件 6退回签收 7转寄件 8作废件 9已签收 10 已取消
-                for (DFOrderStatusResultRequest temp : requestList) {
-                    if (temp.getStatus() == 10) {
-                        //取消订单
-                        String mailNumber = temp.getMailNumber();
-                        List<FsStoreOrder> fsStoreOrders = fsStoreOrderMapper.selectFsStoreOrderListByDeliverySn(mailNumber);
-                        if (fsStoreOrders != null && !fsStoreOrders.isEmpty()) {
-                            fsStoreOrders.forEach(order -> {
-                                FsStoreOrderSalesParam afterSalesParam = new FsStoreOrderSalesParam();
-                                afterSalesParam.setOrderId(order.getOrderId());
-                                afterSalesParam.setReasons("代服管家取消订单");
-                                afterSalesParam.setOperator("代服管家");
-                                afterSales(afterSalesParam);
-                                FsStoreOrderDf df = new FsStoreOrderDf();
-                                df.setOrderId(order.getOrderId());
-                                df.setStatus(2);
-                                df.setUpdateTime(new Date());
-                                fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
-                            });
+            log.info("ct1111111111111111111{}", jsonString);
+            com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(jsonString);
+            if (jsonObject != null) {
+                Object listObj = jsonObject.get("list");
+                String listJson = JSON.toJSONString(listObj);
+                List<DFOrderStatusResultRequest> requestList = JSON.parseArray(listJson, DFOrderStatusResultRequest.class);
+                if (requestList != null && !requestList.isEmpty()) {
+                    //0待揽收 1已揽收 2运输中 3派送中 4异常件 5退回件 6退回签收 7转寄件 8作废件 9已签收 10 已取消
+                    for (DFOrderStatusResultRequest temp : requestList) {
+                        if (temp.getStatus() == 10) {
+                            //取消订单
+                            String mailNumber = temp.getMailNumber();
+                            List<FsStoreOrder> fsStoreOrders = fsStoreOrderMapper.selectFsStoreOrderListByDeliverySn(mailNumber);
+                            if (fsStoreOrders != null && !fsStoreOrders.isEmpty()) {
+                                fsStoreOrders.forEach(order -> {
+                                    FsStoreOrderSalesParam afterSalesParam = new FsStoreOrderSalesParam();
+                                    afterSalesParam.setOrderId(order.getOrderId());
+                                    afterSalesParam.setReasons("代服管家取消订单");
+                                    afterSalesParam.setOperator("代服管家");
+                                    afterSales(afterSalesParam);
+                                    FsStoreOrderDf df = new FsStoreOrderDf();
+                                    df.setOrderId(order.getOrderId());
+                                    df.setStatus(2);
+                                    df.setUpdateTime(new Date());
+                                    fsStoreOrderDfMapper.updateFsStoreOrderDf(df);
+                                });
+                            }
                         }
                     }
                 }

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

@@ -88,7 +88,7 @@ headerImg:
   imgUrl: https://hzyy.obs.cn-north-4.myhuaweicloud.com/fs/20250616/1750067609692.png
 ipad:
   ipadUrl: http://139.159.133.223:8667
-  aiApi: http://154.8.194.176:3000/api
+  aiApi: http://1.95.196.10:3000/api
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 5 - 5
fs-service/src/main/resources/application-config-druid-kyt.yml

@@ -42,10 +42,10 @@ wx:
       port: 6379
       timeout: 2000
     configs:
-      - appId:  # 第一个公众号的appid
-        secret:  # 公众号的appsecret
-        token:  # 接口配置里的Token值
-        aesKey:  # 接口配置里的EncodingAESKey值
+      - appId:  wxd0a67578869950ab # 第一个公众号的appid
+        secret: 645f649be6d748e33e71cefec2469e86  # 公众号的appsecret
+        token: PPKOdAlCoMO # 接口配置里的Token值
+        aesKey: Eswa6VjwtVMCcw03qZy6fWllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
 aifabu:  #爱链接
   appKey: 7b471be905ab17ef358c0dd117601d008
 watch:
@@ -77,7 +77,7 @@ cloud_host:
   company_name: 宽益堂
 #看课授权时显示的头像
 headerImg:
-  imgUrl: https://yztcourse-1325300895.cos.ap-guangzhou.myqcloud.com/yztcourse/20250523/e04871a98cc84be39a7f60c084698e21.jpg
+  imgUrl: https://kuanyitang-1317640934.cos.ap-shanghai.myqcloud.com/kuanyitang/20250813/6b3b62e01672407c98f0561b73e35f6a.jpg
 ipad:
   ipadUrl:
   aiApi:

+ 22 - 0
fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -175,6 +175,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isAudit != null">#{isAudit},</if>
         </trim>
     </insert>
+    <insert id="insertQwIpadTotal">
+        insert into qw_ipad_total (company_id,company_name,bind_count,stat_time) values
+        <foreach item="item" collection="list" separator=",">
+            (#{item.companyId},#{item.companyName},#{item.bindCount},#{item.statTime})
+        </foreach>
+    </insert>
 
     <update id="updateCompanyUser" parameterType="CompanyUser">
         update company_user
@@ -531,6 +537,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectCompanyUserByCompanyUserId" resultMap="CompanyUserResult">
         select  * from company_user where user_id = #{companyUserId}
     </select>
+    <select id="selectCompanyByIpadStatus" resultType="com.fs.company.vo.QwIpadTotalVo">
+        select company_id companyId,company_name companyName,
+        sum(bind_count) bindCount,stat_time statTime from qw_ipad_total
+        <where>
+            <if test="dateTime != null">
+                and stat_time like concat(#{dateTime}, '%')
+            </if>
+        </where>
+        group by company_id,company_name
+    </select>
+    <select id="selectCompanyByIpadStatusCount" resultType="com.fs.company.vo.QwIpadTotalVo">
+        SELECT qw.company_id companyId,c.company_name companyName,count(1) bindCount
+        FROM `qw_user` qw left join company c on qw.company_id = c.company_id
+        where qw.ipad_status is not null
+        GROUP BY qw.company_id
+    </select>
 
     <update id="updateAllowedAllRegister" parameterType="Long">
         update company_user

+ 19 - 5
fs-user-app/src/main/java/com/fs/app/controller/CouponController.java

@@ -4,17 +4,17 @@ package com.fs.app.controller;
 import cn.hutool.Hutool;
 import cn.hutool.core.util.IdUtil;
 import com.fs.app.annotation.Login;
+import com.fs.common.annotation.Log;
+import com.fs.common.annotation.RepeatSubmit;
+import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.enums.BusinessType;
 import com.fs.his.domain.FsCoupon;
-import com.fs.his.domain.FsPackage;
 import com.fs.his.param.*;
 import com.fs.his.service.IFsCouponService;
-import com.fs.his.service.IFsDoctorService;
-import com.fs.his.service.IFsPackageService;
+import com.fs.his.service.IFsUserCouponService;
 import com.fs.his.vo.FsCouponListUVO;
-import com.fs.his.vo.FsDoctorListUVO;
-import com.fs.his.vo.FsPackageListUVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -40,6 +40,9 @@ public class CouponController extends  AppBaseController {
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IFsUserCouponService fsUserCouponService;
+
     @ApiOperation("获取优惠券列表")
     @GetMapping("/getCouponList")
     public R getCouponList(FsCouponListUParam param)
@@ -84,5 +87,16 @@ public class CouponController extends  AppBaseController {
         return couponService.receive(param);
     }
 
+    /**
+     * 发送会员优惠券
+     */
+    @RepeatSubmit
+    @Log(title = "发送会员优惠券", businessType = BusinessType.INSERT)
+    @PostMapping("/sendCoupon")
+    public AjaxResult sendCoupon(@RequestBody FsUserCouponSendParam fsUserCoupon)
+    {
+        return toAjax(fsUserCouponService.sendFsUserCoupon(fsUserCoupon));
+    }
+
 
 }