Преглед изворни кода

新增定时任务分发sop任务给销售和医生

cgp пре 2 недеља
родитељ
комит
1b29fe8456

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

@@ -18,6 +18,10 @@ import com.fs.huifuPay.domain.HuifuOrderConfirmResult;
 import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayQueryRequest;
 import com.fs.huifuPay.sdk.opps.core.utils.DateTools;
 import com.fs.huifuPay.service.HuiFuService;
+import com.fs.qw.domain.FsSopCompanyUserTask;
+import com.fs.qw.domain.QwExternalContact;
+import com.fs.qw.mapper.FsSopCompanyUserTaskMapper;
+import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.sop.domain.QwSopTempVoice;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -74,6 +78,10 @@ import com.fs.qw.domain.QwCompany;
 import com.fs.qw.mapper.QwRestrictionPushRecordMapper;
 import com.fs.qw.service.*;
 import com.fs.qwApi.service.QwApiService;
+import com.fs.sop.domain.SopOrderLog;
+import com.fs.sop.domain.SopUserLogsInfo;
+import com.fs.sop.mapper.SopOrderLogMapper;
+import com.fs.sop.mapper.SopUserLogsInfoMapper;
 import com.fs.sop.service.IQwSopTempVoiceService;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
@@ -89,6 +97,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
@@ -251,6 +260,21 @@ public class Task {
     @Autowired
     private IFsAmountsShareMerchantService amountShareMerchantService;
 
+    @Autowired
+    private SopOrderLogMapper sopOrderLogMapper;
+
+    @Autowired
+    private FsSopDoctorTaskMapper sopDoctorTaskMapper;
+
+    @Autowired
+    private FsSopCompanyUserTaskMapper sopCompanyUserTaskMapper;
+
+    @Autowired
+    private SopUserLogsInfoMapper sopUserLogsInfoMapper;
+
+    @Autowired
+    private QwExternalContactMapper qwExternalContactMapper;
+
     public static final String SOP_TEMP_VOICE_KEY = "sop:tempVoice";
     public void syncExpressToWx() {
         List<FsWxExpressTask> fsWxExpressTasks = fsWxExpressTaskMapper.selectPendingData();
@@ -2214,4 +2238,142 @@ public class Task {
             }
         }
     }
+
+    public void obtainSopInfoData() {
+        List<SopOrderLog> sopOrderLogs = sopOrderLogMapper.queryUnsentSOPData();
+        if (CollectionUtils.isEmpty(sopOrderLogs)) {
+            return;
+        }
+
+        for (SopOrderLog log : sopOrderLogs) {
+            List<SopUserLogsInfo> logsInfo = sopUserLogsInfoMapper.querySopUserLogsRecord(log.getSopId());
+
+            // 过滤 externalId 非空
+            List<Long> externalIds = logsInfo.stream()
+                    .filter(info -> info.getExternalId() != null)
+                    .map(SopUserLogsInfo::getExternalId)
+                    .collect(Collectors.toList());
+
+            if (CollectionUtils.isEmpty(externalIds)) {
+                continue;
+            }
+
+            // 构建 productBuyMap:根据 isBuy 类型选择字段
+            Map<Long, Integer> productBuyMap;
+            boolean isUpsell = (log.getIsBuy() == 3 || log.getIsBuy() == 4); // 是否升单
+
+            if (isUpsell) {//升单就取IsUpsellProductBuy属性值
+                productBuyMap = logsInfo.stream()
+                        .filter(info -> info.getExternalId() != null)
+                        .collect(Collectors.toMap(
+                                SopUserLogsInfo::getExternalId,
+                                SopUserLogsInfo::getIsUpsellProductBuy,
+                                (v1, v2) -> v1//防止重复key,一般同一个营期内不会有重复的
+                        ));
+            } else {//未升单就取IsProductBuy属性值
+                productBuyMap = logsInfo.stream()
+                        .filter(info -> info.getExternalId() != null)
+                        .collect(Collectors.toMap(
+                                SopUserLogsInfo::getExternalId,
+                                SopUserLogsInfo::getIsProductBuy,
+                                (v1, v2) -> v1//防止重复key
+                        ));
+            }
+
+            // 查询qw_external_contact表获取客户id,销售id
+            List<QwExternalContact> contacts = qwExternalContactMapper.selectQwExternalContactByIds(externalIds);
+            if (CollectionUtils.isEmpty(contacts)) {
+                continue;
+            }
+
+            for (QwExternalContact contact : contacts) {
+                Long fsUserId = contact.getFsUserId(); // 客户ID
+                Long companyUserId = contact.getCompanyUserId();//销售ID
+
+                CompanyUser companyUser = companyUserMapper.selectCompanyUserByCompanyUserId(companyUserId);
+                if (companyUser == null) continue; // 防空指针
+
+                Long doctorId = companyUser.getDoctorId();//医生ID
+                //    - 根据当前外部联系人 ID(contact.getId()),从购买sop_user_logs_info表中获取其购买状态
+                //    - 如果是“未升单”场景,buyStatus 来自字段 isProductBuy(1=未购,2=已购)
+                //    - 如果是“升单”场景,buyStatus 来自字段 isUpsellProductBuy(1=未购,2=已购)
+                Integer buyStatus = productBuyMap.get(contact.getId());
+
+
+                // 安全校验:确保 buyStatus 为 1(未购)或 2(已购)
+                if (buyStatus == null || (buyStatus != 1 && buyStatus != 2)) {
+                    logger.error("方法obtainSopInfoData():buyStatus 异常,externalId: {}, 值: {}", contact.getId(), buyStatus);
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    throw new CustomException("分发医生和销售sop任务失败");
+                }
+
+                //核心映射:1/2 → 1/2(未升单),1/2 → 3/4(升单)
+                int type = isUpsell ? (buyStatus + 2) : buyStatus;
+
+                // 分发任务
+                switch (log.getOrderSendType()) {
+                    case 1:
+                        //分发给销售sop数据
+                        obtainSopCompanyUserTaskData(fsUserId, companyUserId, doctorId, type);
+                        break;
+                    case 2:
+                        //分发给医生sop数据
+                        obtainSopDoctorTaskData(fsUserId, companyUserId, doctorId, type);
+                        break;
+                    case 3:
+                        //分发给销售和医生sop数据
+                        obtainSopCompanyUserTaskData(fsUserId, companyUserId, doctorId, type);
+                        obtainSopDoctorTaskData(fsUserId, companyUserId, doctorId, type);
+                        break;
+                    default:
+                        logger.error("未知的type: {}", type);
+                        break;
+                }
+
+            }
+        }
+        //对于已经推送的数据需要修改sop库的sop_order_log表的status状态为1:已推送
+        List<Long> ids = sopOrderLogs.stream().map(SopOrderLog::getId).collect(Collectors.toList());
+        sopOrderLogMapper.updateIsSentSOPDataByIds(ids);
+    }
+    //辅助方法 增加医生和销售的sop推送数据
+    /**
+     *  增加sop医生推送数据
+     *  @param fsUserId  用户id
+     *  @param companyUserId  销售人员id
+     *  @param doctorId  医生id
+     *  @param type  1:未升单未购 2:未升单已购 3:升单未购 4:升单已购
+     * */
+    public int obtainSopDoctorTaskData(Long fsUserId, Long companyUserId,Long doctorId, Integer type) {
+        if (doctorId==null){
+            logger.info("销售人员companyUserId:{},未绑定医生不触发医生sop数据",companyUserId);
+            return 1;
+        }
+        FsSopDoctorTask fsSopDoctorTask = new FsSopDoctorTask();
+        fsSopDoctorTask.setUserId(fsUserId);
+        fsSopDoctorTask.setCompanyUserId(companyUserId);
+        fsSopDoctorTask.setDoctorId(doctorId);
+        fsSopDoctorTask.setType(type);
+        fsSopDoctorTask.setStatus(0);//默认未处理状态
+        fsSopDoctorTask.setCreateTime(DateUtils.getNowDate());
+        return sopDoctorTaskMapper.insertFsSopDoctorTask(fsSopDoctorTask);
+    }
+    /**
+     *  增加sop销售推送数据
+     *  @param fsUserId  用户id
+     *  @param companyUserId  销售人员id
+     *  @param doctorId  医生id
+     *  @param type  1:未升单未购 2:未升单已购 3:升单未购 4:升单已购
+     * */
+    public int obtainSopCompanyUserTaskData(Long fsUserId, Long companyUserId,Long doctorId, Integer type) {
+        FsSopCompanyUserTask fsSopCompanyUserTask = new FsSopCompanyUserTask();
+        fsSopCompanyUserTask.setUserId(fsUserId);
+        fsSopCompanyUserTask.setCompanyUserId(companyUserId);
+        fsSopCompanyUserTask.setDoctorId(doctorId);
+        fsSopCompanyUserTask.setType(type);
+        fsSopCompanyUserTask.setStatus(0);//默认未处理状态
+        fsSopCompanyUserTask.setCreateTime(DateUtils.getNowDate());
+        return sopCompanyUserTaskMapper.insertFsSopCompanyUserTask(fsSopCompanyUserTask);
+    }
+
 }

+ 129 - 0
fs-doctor-app/src/main/java/com/fs/app/controller/FsSopDoctorTaskController.java

@@ -1,12 +1,23 @@
 package com.fs.app.controller;
 
+import java.util.Collections;
 import java.util.List;
 
 
 import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.ServletUtils;
+import com.fs.his.domain.FsPatient;
+import com.fs.his.domain.FsUser;
+import com.fs.his.domain.FsUserAddress;
 import com.fs.his.dto.SopDoctorTaskDto;
+import com.fs.his.param.FsStoreOrderParam;
+import com.fs.his.param.FsUserCouponParam;
+import com.fs.his.service.IFsPatientService;
+import com.fs.his.service.IFsUserCouponService;
+import com.fs.his.service.IFsUserService;
+import com.fs.his.vo.FsPatientVO;
+import com.fs.his.vo.FsUserCouponListVO;
 import com.fs.his.vo.SopDoctorTaskVo;
 import io.jsonwebtoken.Claims;
 import lombok.extern.slf4j.Slf4j;
@@ -30,6 +41,7 @@ import com.fs.his.service.IFsSopDoctorTaskService;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.common.core.page.TableDataInfo;
 
+import static com.fs.his.utils.PhoneUtil.decryptAutoPhoneMk;
 import static com.fs.his.utils.PhoneUtil.decryptPhone;
 
 /**
@@ -45,6 +57,16 @@ public class FsSopDoctorTaskController extends BaseController
 {
     @Autowired
     private IFsSopDoctorTaskService fsSopDoctorTaskService;
+
+    @Autowired
+    private IFsPatientService fsPatientService;
+
+    @Autowired
+    private IFsUserService fsUserService;
+
+    @Autowired
+    private IFsUserCouponService fsUserCouponService;
+
     @Autowired
     JwtUtils jwtUtils;
 
@@ -135,6 +157,113 @@ public class FsSopDoctorTaskController extends BaseController
         return R.ok().put("userPhone","");
     }
 
+    /**
+     * 获取用户信息信息
+     */
+    @GetMapping(value = "/getPatient/{userId}")
+    public AjaxResult getPatient(@PathVariable("userId") Long userId)
+    {
+        List<FsPatientVO> fsPatientVOS = fsPatientService.selectFsPatientByUserId(userId);
+        for (FsPatientVO  fsPatientVO: fsPatientVOS) {
+            if (fsPatientVO.getPhone()!=null){
+                fsPatientVO.setPhone(fsPatientVO.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
+
+            }
+
+        }
+        return AjaxResult.success(fsPatientVOS);
+    }
+
+    /**
+     * 获取用户详细信息
+     */
+    @GetMapping(value = "/userInfo/{userId}")
+    public AjaxResult getUserInfo(@PathVariable("userId") Long userId)
+    {
+        FsUser fsUser = fsUserService.selectFsUserByUserId(userId);
+        fsUser.setPhone(decryptAutoPhoneMk(fsUser.getPhone()));
+        return AjaxResult.success(fsUser);
+    }
+
+    /**
+     * 获取用户详细信息
+     */
+
+    @GetMapping(value = "/getUserAddr/{userId}")
+    public AjaxResult getUserAddr(@PathVariable("userId") Long userId)
+    {
+        List<FsUserAddress> fsUserAddresses = fsUserService.selectFsUserAddressByUserId(userId);
+        for (FsUserAddress fsUserAddress : fsUserAddresses) {
+            fsUserAddress.setPhone(decryptAutoPhoneMk(fsUserAddress.getPhone()));
+        }
+        return AjaxResult.success();
+    }
+
+    @GetMapping("/userCoupon/getList")
+    public TableDataInfo getList(FsUserCouponParam fsUserCoupon)
+    {
+        startPage();
+        List<FsUserCouponListVO> list = fsUserCouponService.selectFsUserCouponListVO(fsUserCoupon);
+        for (FsUserCouponListVO fsUserCouponListVO : list) {
+            if (fsUserCouponListVO.getPhone()!=null){
+                fsUserCouponListVO.setPhone(fsUserCouponListVO.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
+            }
+        }
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询病人列表
+     */
+    @GetMapping("/patient/list")
+    public TableDataInfo list(FsPatientVO fsPatient)
+    {
+        startPage();
+        List<FsPatientVO> list = fsPatientService.selectFsPatientListVO(fsPatient);
+        for (FsPatientVO fsPatientVO : list) {
+            if (fsPatientVO.getPhone()!=null){
+                fsPatientVO.setPhone(fsPatientVO.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
+            }
+            if (fsPatientVO.getIdCard()!=null){
+                fsPatientVO.setIdCard(fsPatientVO.getIdCard().replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1**********$2"));
+            }
+            if (fsPatientVO.getMobile()!=null){
+                fsPatientVO.setMobile(fsPatientVO.getMobile().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
+            }
+
+
+        }
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取病人详细信息
+     */
+    @GetMapping(value = "/{patientId}")
+    public AjaxResult getInfo1(@PathVariable("patientId") Long patientId)
+    {
+        FsPatient fsPatient = fsPatientService.selectFsPatientByPatientId(patientId);
+        if (fsPatient.getIdCard()!=null){
+            fsPatient.setIdCard(fsPatient.getIdCard().replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1**********$2"));
+        }
+        if (fsPatient.getMobile()!=null){
+            fsPatient.setMobile(fsPatient.getMobile().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
+        }
+        return AjaxResult.success(fsPatient);
+    }
+
+    @GetMapping("/storeOrder/userOrderList")
+    public TableDataInfo userOrderList(FsStoreOrderParam fsStoreOrder)
+    {
+        startPage();
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
+//        fsStoreOrder.setCompanyUserId(loginUser.getUser().getUserId());
+//        fsStoreOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+//        List<FsStoreOrderListVO> list = fsStoreOrderService.selectFsStoreOrderListVO(fsStoreOrder);
+//        return getDataTable(list);
+        return getDataTable(Collections.emptyList());
+    }
+
     /**
      * 获取当前登录医生id
      * */

+ 3 - 2
fs-service/src/main/java/com/fs/his/domain/FsSopDoctorTask.java

@@ -30,7 +30,7 @@ public class FsSopDoctorTask extends BaseEntity{
 
     /** 0:待处理,1:已处理 */
     @Excel(name = "0:待处理,1:已处理")
-    private Long status;
+    private Integer status;
 
     /** 套餐包Id */
     @Excel(name = "套餐包Id")
@@ -44,5 +44,6 @@ public class FsSopDoctorTask extends BaseEntity{
     @Excel(name = "备用id")
     private Long standbyId;
 
-
+    /** 1:未升单未购 2:未升单已购 3:升单未购 4:升单已购 */
+    private Integer type;
 }

+ 4 - 1
fs-service/src/main/java/com/fs/his/dto/SopDoctorTaskDto.java

@@ -34,5 +34,8 @@ public class SopDoctorTaskDto  extends BaseEntity {
     private String orderCode;
 
     /** 0:待处理,1:已处理 */
-    private Long status;
+    private Integer status;
+
+    /** 1:未升单未购 2:未升单已购单 3:升单未购 4:升单已购 */
+    private Integer type;
 }

+ 4 - 1
fs-service/src/main/java/com/fs/his/vo/SopDoctorTaskVo.java

@@ -44,7 +44,7 @@ public class SopDoctorTaskVo {
     private String phone;
 
     /** 0:待处理,1:已处理 */
-    private Long status;
+    private Integer status;
 
     @Excel(name = "备注信息")
     private String remark;
@@ -57,4 +57,7 @@ public class SopDoctorTaskVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
+
+    /** 1:未升单未购 2:未升单已购 3:升单未购 4:升单已购 */
+    private Integer type;
 }

+ 4 - 1
fs-service/src/main/java/com/fs/qw/domain/FsSopCompanyUserTask.java

@@ -28,7 +28,7 @@ public class FsSopCompanyUserTask extends BaseEntity{
 
     /** 0:待处理,1:已处理 */
     @Excel(name = "0:待处理,1:已处理")
-    private Long status;
+    private Integer status;
 
     /** 套餐包Id */
     private Long packageId;
@@ -39,4 +39,7 @@ public class FsSopCompanyUserTask extends BaseEntity{
     /** 销售id */
     private Long companyUserId;
 
+    /** 1:未升单未购 2:未升单已购 3:升单未购 4:升单已购 */
+    private Integer type;
+
 }

+ 4 - 1
fs-service/src/main/java/com/fs/qw/dto/SopCompanyUserTaskDto.java

@@ -36,5 +36,8 @@ public class SopCompanyUserTaskDto extends BaseEntity {
     private String orderCode;
 
     /** 0:待处理,1:已处理 */
-    private Long status;
+    private Integer status;
+
+    /** 1:未升单未购 2:未升单已购单 3:升单未购 4:升单已购 */
+    private Integer type;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactInfoMapper.java

@@ -1,6 +1,7 @@
 package com.fs.qw.mapper;
 
 import com.fs.qw.domain.QwExternalContactInfo;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 

+ 8 - 1
fs-service/src/main/java/com/fs/qw/vo/SopCompanyUserTaskVo.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.util.Date;
@@ -25,6 +26,9 @@ public class SopCompanyUserTaskVo {
     /** 套餐包Id */
     private Long packageId;
 
+    /** 套餐包Id */
+    private Long companyUserId;
+
     /** 订单号 */
     private String orderCode;
 
@@ -41,7 +45,7 @@ public class SopCompanyUserTaskVo {
     private String phone;
 
     /** 0:待处理,1:已处理 */
-    private Long status;
+    private Integer status;
 
     @Excel(name = "备注信息")
     private String remark;
@@ -54,4 +58,7 @@ public class SopCompanyUserTaskVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
+
+    /** 1:未升单未购 2:未升单已购 3:升单未购 4:升单已购 */
+    private Integer type;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/sop/domain/SopOrderLog.java

@@ -47,5 +47,8 @@ public class SopOrderLog extends BaseEntity{
     @Excel(name = "发送时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date sendTime;
 
+    /* 0:未推送 1:已推送 **/
+    private Integer status;
+
 
 }

+ 14 - 0
fs-service/src/main/java/com/fs/sop/mapper/SopOrderLogMapper.java

@@ -58,4 +58,18 @@ public interface SopOrderLogMapper extends BaseMapper<SopOrderLog>{
      * @return 结果
      */
     int deleteSopOrderLogByIds(Long[] ids);
+
+    /**
+     * 根据定时任务去查询未发送的SOP数据
+     *
+     * @return 订单SOP任务日志集合
+     */
+    List<SopOrderLog> queryUnsentSOPData();
+
+    /**
+     * 根据定时任务去更新SOP数据为已发送
+     *
+     * @return 更新成功条数
+     */
+    int updateIsSentSOPDataByIds(List<Long> ids);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsInfoMapper.java

@@ -285,4 +285,10 @@ public interface SopUserLogsInfoMapper {
             "GROUP BY qsts.id, sul.start_time "+
             "</script>")
     List<ExtCourseSopWatchLogVO> getExtCourseSopWatchLog(@Param("data") QwExtCourseSopWatchLog qwExternalContactId);
+
+    /**
+     * 查询指定 SOP 下的所有用户日志记录(包含是否购买普通商品、是否购买升单商品)
+     */
+    @DataSource(DataSourceType.SOP)
+    List<SopUserLogsInfo> querySopUserLogsRecord(@Param("sopId") String sopId);
 }

+ 10 - 7
fs-service/src/main/resources/mapper/his/FsSopDoctorTaskMapper.xml

@@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"    column="remark"    />
         <result property="packageId"    column="package_id"    />
         <result property="orderCode"    column="order_code"    />
-        <result property="standbyId"    column="standby_id"    />
+        <result property="type"    column="type"    />
     </resultMap>
 
     <resultMap type="com.fs.his.vo.SopDoctorTaskVo" id="SopDoctorTaskVoResult">
@@ -41,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsSopDoctorTaskVo">
-        select id, company_user_id,doctor_id, user_id, status, create_time, update_time, remark, package_id, order_code, standby_id from fs_sop_doctor_task
+        select id, company_user_id,doctor_id, user_id, status, create_time, update_time, remark, package_id, order_code, type from fs_sop_doctor_task
     </sql>
 
     <select id="selectFsSopDoctorTaskVoList" parameterType="com.fs.his.vo.SopDoctorTaskVo" resultMap="SopDoctorTaskVoResult">
@@ -58,7 +58,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         sdt.order_code,
         sdt.create_time,
         sdt.update_time,
-        sdt.remark
+        sdt.remark,
+        sdt.type
         FROM
         fs_sop_doctor_task sdt
         LEFT JOIN company_user cp ON sdt.company_user_id = cp.user_id
@@ -73,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderCode != null "> and sdt.order_code = #{orderCode}</if>
             <if test="companyUserId != null "> and sdt.company_user_id = #{companyUserId}</if>
             <if test="status != null "> and sdt.status = #{status}</if>
+            <if test="type != null "> and sdt.type = #{type}</if>
             <if test="qwUserId != null "> and qwec.qw_user_id = #{qwUserId}</if>
             <if test="name != null "> and qwec.name like concat('%', #{name}, '%')</if>
             <if test="companyUserName != null "> and cp.nick_name like concat('%', #{companyUserName}, '%')</if>
@@ -100,7 +102,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             sdt.order_code,
             sdt.create_time,
             sdt.update_time,
-            sdt.remark
+            sdt.remark,
+            sdt.type
         FROM
             fs_sop_doctor_task sdt
                 LEFT JOIN company_user cp ON sdt.company_user_id = cp.user_id
@@ -122,7 +125,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null">remark,</if>
             <if test="packageId != null">package_id,</if>
             <if test="orderCode != null">order_code,</if>
-            <if test="standbyId != null">standby_id,</if>
+            <if test="type != null">type,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="companyUserId != null">#{companyUserId},</if>
@@ -134,7 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null">#{remark},</if>
             <if test="packageId != null">#{packageId},</if>
             <if test="orderCode != null">#{orderCode},</if>
-            <if test="standbyId != null">#{standbyId},</if>
+            <if test="type != null">#{type},</if>
          </trim>
     </insert>
 
@@ -150,7 +153,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null">remark = #{remark},</if>
             <if test="packageId != null">package_id = #{packageId},</if>
             <if test="orderCode != null">order_code = #{orderCode},</if>
-            <if test="standbyId != null">standby_id = #{standbyId},</if>
+            <if test="type != null">type = #{type},</if>
         </trim>
         where id = #{id}
     </update>

+ 11 - 3
fs-service/src/main/resources/mapper/qw/FsSopCompanyUserTaskMapper.xml

@@ -15,6 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime"    column="create_time"    />
         <result property="updateTime"    column="update_time"    />
         <result property="remark"    column="remark"    />
+        <result property="type"    column="type"    />
     </resultMap>
 
     <resultMap type="com.fs.qw.vo.SopCompanyUserTaskVo" id="SopCompanyUserTaskVoResult">
@@ -30,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"       column="remark" />
         <result property="createTime"   column="create_time" />
         <result property="updateTime"   column="update_time" />
+        <result property="type"    column="type"    />
 
         <!-- 关联表字段 -->
         <result property="name"     column="name" />          <!-- qwec.name -->
@@ -40,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsSopCompanyUserTaskVo">
-        select id, package_id,order_code,company_user_id, doctor_id, user_id, status, create_time, update_time, remark from fs_sop_company_user_task
+        select id, package_id,order_code,company_user_id, doctor_id, user_id, status, create_time, update_time, remark,type from fs_sop_company_user_task
     </sql>
 
     <select id="selectFsSopCompanyUserTaskVoList" parameterType="com.fs.qw.dto.SopCompanyUserTaskDto" resultMap="SopCompanyUserTaskVoResult">
@@ -59,7 +61,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         sct.STATUS,
         sct.create_time,
         sct.update_time,
-        sct.remark
+        sct.remark,
+        sct.type
         FROM
         fs_sop_company_user_task sct
         LEFT JOIN fs_doctor fd ON sct.doctor_id = fd.doctor_id
@@ -72,6 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="userId != null "> and sct.user_id = #{userId}</if>
             <if test="packageId != null "> and sct.package_id = #{packageId}</if>
             <if test="orderCode != null "> and sct.order_code = #{orderCode}</if>
+            <if test="type != null "> and sct.type = #{type}</if>
             <if test="companyUserId != null "> and sct.company_user_id = #{companyUserId}</if>
             <if test="status != null "> and sct.status = #{status}</if>
             <if test="qwUserId != null "> and qwec.qw_user_id = #{qwUserId}</if>
@@ -103,7 +107,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             sct.STATUS,
             sct.create_time,
             sct.update_time,
-            sct.remark
+            sct.remark,
+            sct.type
         FROM
             fs_sop_company_user_task sct
                 LEFT JOIN fs_doctor fd ON sct.doctor_id = fd.doctor_id
@@ -170,6 +175,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="remark != null">remark,</if>
+            <if test="type != null">type,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="packageId != null">#{packageId},</if>
@@ -181,6 +187,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">#{createTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
+            <if test="type != null">#{type},</if>
          </trim>
     </insert>
 
@@ -196,6 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="remark != null">remark = #{remark},</if>
+            <if test="type != null">type = #{type},</if>
         </trim>
         where id = #{id}
     </update>

+ 19 - 2
fs-service/src/main/resources/mapper/sop/SopOrderLogMapper.xml

@@ -13,10 +13,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="crateTime"    column="crate_time"    />
         <result property="updateTime"    column="update_time"    />
         <result property="sendTime"    column="send_time"    />
+        <result property="status"    column="status"    />
     </resultMap>
 
     <sql id="selectSopOrderLogVo">
-        select id, sop_id, fs_user_id, is_buy, order_send_type, crate_time, update_time, send_time from sop_order_log
+        select id, sop_id, fs_user_id, is_buy, order_send_type, crate_time, update_time, send_time,status from sop_order_log
     </sql>
 
     <select id="selectSopOrderLogList" parameterType="SopOrderLog" resultMap="SopOrderLogResult">
@@ -28,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderSendType != null "> and order_send_type = #{orderSendType}</if>
             <if test="crateTime != null "> and crate_time = #{crateTime}</if>
             <if test="sendTime != null "> and send_time = #{sendTime}</if>
+            <if test="status != null "> and status = #{status}</if>
         </where>
     </select>
     
@@ -35,7 +37,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectSopOrderLogVo"/>
         where id = #{id}
     </select>
-        
+    <select id="queryUnsentSOPData" resultType="com.fs.sop.domain.SopOrderLog">
+        SELECT sol.id,sol.sop_id,sol.is_buy,sol.order_send_type,sol.status FROM sop_order_log sol WHERE sol.send_time>CURRENT_TIME and sol.status=0
+    </select>
+
     <insert id="insertSopOrderLog" parameterType="SopOrderLog" useGeneratedKeys="true" keyProperty="id">
         insert into sop_order_log
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -46,6 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="crateTime != null">crate_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="sendTime != null">send_time,</if>
+            <if test="status != null">status,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="sopId != null">#{sopId},</if>
@@ -55,6 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="crateTime != null">#{crateTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="sendTime != null">#{sendTime},</if>
+            <if test="status != null">#{status},</if>
          </trim>
     </insert>
 
@@ -68,10 +75,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="crateTime != null">crate_time = #{crateTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="sendTime != null">send_time = #{sendTime},</if>
+            <if test="status != null">status = #{status},</if>
         </trim>
         where id = #{id}
     </update>
 
+    <update id="updateIsSentSOPDataByIds" parameterType="java.util.List">
+        UPDATE sop_order_log
+        SET status = 1
+        WHERE id IN
+        <foreach collection="list" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </update>
+
     <delete id="deleteSopOrderLogById" parameterType="Long">
         delete from sop_order_log where id = #{id}
     </delete>

+ 10 - 0
fs-service/src/main/resources/mapper/sop/SopUserLogsInfoMapper.xml

@@ -351,4 +351,14 @@
         select * from sop_user_logs_info where user_logs_id=#{id}
     </select>
 
+    <select id="querySopUserLogsRecord" resultType="com.fs.sop.domain.SopUserLogsInfo">
+        SELECT
+            external_id,
+            fs_user_id,
+            is_product_buy,
+            is_upsell_product_buy
+        FROM sop_user_logs_info
+        WHERE sop_id = #{sopId}
+    </select>
+
 </mapper>