Przeglądaj źródła

1.修改退款问题 2.用户信息采集

wjj 6 dni temu
rodzic
commit
72185550d6
21 zmienionych plików z 727 dodań i 48 usunięć
  1. 13 0
      fs-company/src/main/java/com/fs/hisStore/controller/FsUserInformationCollectionController.java
  2. 13 0
      fs-service/src/main/java/com/fs/course/param/CollectionInfoConfirmParam.java
  3. 35 0
      fs-service/src/main/java/com/fs/course/vo/FsUserInfoCollectionUVO.java
  4. 1 0
      fs-service/src/main/java/com/fs/his/param/FsPackageOrderComputeParam.java
  5. 3 0
      fs-service/src/main/java/com/fs/his/param/FsPackageOrderCreateParam.java
  6. 43 7
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java
  7. 24 28
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java
  8. 11 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsUserInformationCollection.java
  9. 1 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsUserInformationCollectionMapper.java
  10. 3 0
      fs-service/src/main/java/com/fs/hisStore/param/FsUserInformationCollectionParam.java
  11. 7 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsUserInformationCollectionService.java
  12. 155 1
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsUserInformationCollectionServiceImpl.java
  13. 3 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsUserInformationCollectionVO.java
  14. 11 11
      fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java
  15. 47 0
      fs-service/src/main/java/com/fs/store/domain/FsDoctorConfirm.java
  16. 61 0
      fs-service/src/main/java/com/fs/store/mapper/FsDoctorConfirmMapper.java
  17. 61 0
      fs-service/src/main/java/com/fs/store/service/IFsDoctorConfirmService.java
  18. 95 0
      fs-service/src/main/java/com/fs/store/service/impl/FsDoctorConfirmServiceImpl.java
  19. 22 1
      fs-service/src/main/resources/mapper/hisStore/FsUserInformationCollectionMapper.xml
  20. 84 0
      fs-service/src/main/resources/mapper/store/FsDoctorConfirmMapper.xml
  21. 34 0
      fs-user-app/src/main/java/com/fs/app/controller/UserInfoCollectionController.java

+ 13 - 0
fs-company/src/main/java/com/fs/hisStore/controller/FsUserInformationCollectionController.java

@@ -2,6 +2,7 @@ package com.fs.hisStore.controller;
 
 import java.util.List;
 
+import com.fs.common.core.domain.R;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.security.SecurityUtils;
 import com.fs.hisStore.param.FsUserInformationCollectionParam;
@@ -106,4 +107,16 @@ public class FsUserInformationCollectionController extends BaseController
     public AjaxResult getInfo(FsUserInformationCollection fsUserInformationCollection){
         return AjaxResult.success(fsUserInformationCollectionService.getInfo(fsUserInformationCollection));
     }
+
+    /**
+     * 生成套餐包付款二维码
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:WxaCodeCollectionUnLimit')")
+    @GetMapping("/getWxaCodeCollectionUnLimit/{collectionId}")
+    public R getWxaCodeCollectionUnLimit(@PathVariable("collectionId") Long orderId)
+    {
+
+        return fsUserInformationCollectionService.getWxaCodePackageOrderUnLimit(orderId);
+
+    }
 }

+ 13 - 0
fs-service/src/main/java/com/fs/course/param/CollectionInfoConfirmParam.java

@@ -0,0 +1,13 @@
+package com.fs.course.param;
+
+import lombok.Data;
+
+@Data
+public class CollectionInfoConfirmParam {
+    private Long id;
+
+    private Long userId;
+
+    //用户建议
+    private String userAdvice;
+}

+ 35 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserInfoCollectionUVO.java

@@ -0,0 +1,35 @@
+package com.fs.course.vo;
+
+import com.fs.his.vo.AnswerVO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class FsUserInfoCollectionUVO {
+    private Long id;
+
+    //套餐包id
+    private Long packageId;
+
+    //支付类型 0-全款 1-物流代收
+    private Integer payType;
+
+    //代收金额
+    private BigDecimal amount;
+
+    private List<AnswerVO> answers;
+
+    //是否关联套餐包 0-不关联 1-关联
+    private Integer isPackage;
+
+    //确认状态 1第一次确认 2第二次确认
+    private Integer status;
+
+    private Integer doctorConfirm;
+
+    private Integer userConfirm;
+
+    private Integer userConfirm2;
+}

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

@@ -15,6 +15,7 @@ public class FsPackageOrderComputeParam implements Serializable {
     Long companyId;
     Long companyUserId;
     private String createPackageOrderKey;
+    String orderCode;
 
 
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderCreateParam.java

@@ -22,6 +22,9 @@ public class FsPackageOrderCreateParam implements Serializable {
     private String createPackageOrderKey;
     private Integer payType;
 
+    //用户信息采集id
+    private Long collectionId;
+
 
 
 }

+ 43 - 7
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -49,6 +49,9 @@ import com.fs.his.vo.FsPackageOrderExcelVO;
 import com.fs.his.vo.FsPackageOrderListUVO;
 import com.fs.his.vo.FsPackageOrderListVO;
 import com.fs.his.vo.FsPackageOrderVO;
+import com.fs.hisStore.domain.FsUserInformationCollection;
+import com.fs.hisStore.mapper.FsUserInformationCollectionMapper;
+import com.fs.hisStore.service.IFsUserInformationCollectionService;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
 import com.fs.huifuPay.service.HuiFuService;
@@ -169,6 +172,9 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 
     @Autowired
     private IFsPrescribeService prescribeService;
+
+    @Autowired
+    private FsUserInformationCollectionMapper userInformationCollectionMapper;
     /**
      * 查询套餐订单
      *
@@ -334,12 +340,14 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
             param.setCompanyId(order.getCompanyId());
             param.setCompanyUserId(order.getUserId());
             param.setStoreId(order.getStoreId());
+            param.setOrderCode(order.getOrderSn());
             Map<String,Object> moneys=computeOrderMoney(order.getTotalPrice(),param);
             return R.ok().put("moneys",moneys);
         }else if (param.getType()==2){
             param.setCompanyId(order.getCompanyId());
             param.setCompanyUserId(order.getUserId());
             param.setStoreId(order.getStoreId());
+            param.setOrderCode(order.getOrderSn());
             Map<String,Object> moneys=computeOrderMoney(order.getTotalPrice(),param);
             return R.ok().put("moneys",moneys);
         }else {
@@ -435,14 +443,28 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 //                    throw new CustomException("代收金额应大于0");
 //                }
                 if (("益善缘".equals(cloudHostProper.getCompanyName()))){
-                    String key = redisCache.getCacheObject("createPackageOrderKey:" + param.getCreatePackageOrderKey());
-                    if (StringUtils.isEmpty(key)) {
-                        throw new CustomException("订单已过期", 501);
-                    }
-                    payMoney = redisCache.getCacheObject("createPackageOrderAmount:" + param.getCreatePackageOrderKey());
-                    if (payMoney == null) {
-                        payMoney = new BigDecimal(100);
+                    //疗法制单
+                    if (StringUtils.isNotEmpty(param.getCreatePackageOrderKey()) ) {
+                        String key = redisCache.getCacheObject("createPackageOrderKey:" + param.getCreatePackageOrderKey());
+                        if (StringUtils.isEmpty(key)) {
+                            throw new CustomException("订单已过期", 501);
+                        }
+                        payMoney = redisCache.getCacheObject("createPackageOrderAmount:" + param.getCreatePackageOrderKey());
+                        if (payMoney == null) {
+                            payMoney = new BigDecimal(100);
+                        }
+                    } else if (StringUtils.isNotEmpty(param.getOrderCode())){
+                        //用户信息采集绑定制单
+                        FsUserInformationCollection collection = userInformationCollectionMapper.selectByOrderCode(param.getOrderCode());
+                        if (collection == null) {
+                            throw new CustomException("采集信息为空", 501);
+                        }
+                        if (collection.getAmount() == null) {
+                            throw new CustomException("代收金额为空", 501);
+                        }
+                        payMoney = collection.getAmount();
                     }
+
                 } else {
                     payMoney = payPrice.multiply(new BigDecimal((100 - configDTO.getPayRate()))).divide(new BigDecimal(100));
                     payMoney = new BigDecimal(payMoney.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
@@ -757,6 +779,8 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         order.setCostDiscountMoney(fsPackage.getTotalCostPrice().subtract(fsPackage.getTotalPrice()));
         if(fsPackageOrderMapper.insertFsPackageOrder(order)>0){
             FsStoreOrder fsStoreOrder = null;
+
+            //疗法制单
             String key = redisCache.getCacheObject("createPackageOrderKey:" + param.getCreatePackageOrderKey());
             if (StringUtils.isNotEmpty(key) && (fsPackage.getProductType()==1 || fsPackage.getProductType()==2)) {
                 //中药西药创建处方订单
@@ -770,6 +794,18 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                 redisCache.setCacheObject("userStatus:" + param.getCreatePackageOrderKey(), true, 24, TimeUnit.HOURS);
             }
 
+            //用户信息采集分享
+            if(param.getCollectionId() != null) {
+                FsUserInformationCollection collection = userInformationCollectionMapper.selectFsUserInformationCollectionById(param.getCollectionId());
+                //更新用户采集信息订单表
+                if(collection != null) {
+                    FsUserInformationCollection collectionUser = new FsUserInformationCollection();
+                    collectionUser.setId(collection.getId());
+                    collectionUser.setPackageOrderCode(orderSn);
+                    userInformationCollectionMapper.updateFsUserInformationCollection(collectionUser);
+                }
+            }
+
             String redisKey = String.valueOf(StrUtil.format("{}{}", FsConstants.REDIS_PACKAGE_ORDER_UNPAY, order.getOrderId()));
             redisCache.setCacheObject(redisKey,order.getOrderId(),30, TimeUnit.MINUTES);
             return R.ok().put("order",order).put("storeOrder",fsStoreOrder);

+ 24 - 28
fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -552,36 +552,32 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                     throw new CustomException("退款请求失败" + refund.getResp_desc());
                 }
             }
-            try {
-                //管易作废
-                if (StringUtils.isNotEmpty(fsStoreOrder.getExtendOrderId())) {
-                    if (!fsStoreOrder.getExtendOrderId().equals("HIS")) {
-                        ErpRefundUpdateRequest request = new ErpRefundUpdateRequest();
-                        request.setTid(fsStoreOrder.getOrderCode());
-                        request.setOid(fsStoreOrder.getOrderCode());
-                        request.setRefund_state(1);
-                        request.setStoreAfterSalesId(fsStoreAfterSales.getId());
-                        FsSysConfig sysConfig = configUtil.getSysConfig();
-                        Integer erpType = sysConfig.getErpType();
-                        if (erpType == 1) {
-                            erpOrderService.refundUpdate(request);
-                        }else if (erpType == 2) {
-                            //旺店通
-                            wdtErpOrderService.refundUpdate(request);
-                        } else if (erpType == 3) {
-                            //瀚智
-                            hzOMSerpOrderService.refundUpdate(request);
-                        }  else if (erpType == 4) {
-                            dfOrderService.refundUpdate(request);
-                        }else if(erpType == 5){
-                            jSTOrderService.refundUpdate(request);
-                        }else if(erpType == 6){
-                            k9OrderService.refundUpdate(request);
-                        }
+            //管易作废
+            if (StringUtils.isNotEmpty(fsStoreOrder.getExtendOrderId())) {
+                if (!fsStoreOrder.getExtendOrderId().equals("HIS")) {
+                    ErpRefundUpdateRequest request = new ErpRefundUpdateRequest();
+                    request.setTid(fsStoreOrder.getOrderCode());
+                    request.setOid(fsStoreOrder.getOrderCode());
+                    request.setRefund_state(1);
+                    request.setStoreAfterSalesId(fsStoreAfterSales.getId());
+                    FsSysConfig sysConfig = configUtil.getSysConfig();
+                    Integer erpType = sysConfig.getErpType();
+                    if (erpType == 1) {
+                        erpOrderService.refundUpdate(request);
+                    }else if (erpType == 2) {
+                        //旺店通
+                        wdtErpOrderService.refundUpdate(request);
+                    } else if (erpType == 3) {
+                        //瀚智
+                        hzOMSerpOrderService.refundUpdate(request);
+                    }  else if (erpType == 4) {
+                        dfOrderService.refundUpdate(request);
+                    }else if(erpType == 5){
+                        jSTOrderService.refundUpdate(request);
+                    }else if(erpType == 6){
+                        k9OrderService.refundUpdate(request);
                     }
                 }
-            } catch (Exception e) {
-                throw new RuntimeException(e);
             }
         } else {
             if (order.getRefundAmount().compareTo(BigDecimal.ZERO) == 0) {

+ 11 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsUserInformationCollection.java

@@ -62,5 +62,16 @@ public class FsUserInformationCollection extends BaseEntity{
     //医生建议
     private String doctorAdvice;
 
+    //是否关联套餐包 0-不关联 1-关联
+    private Integer isPackage;
+
+    //套餐包订单号
+    private String packageOrderCode;
+
+    //用户第二次确认状态
+    private Integer userConfirm2;
+
+    //确认状态 1第一次确认 2第二次确认
+    private Integer status;
 
 }

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsUserInformationCollectionMapper.java

@@ -64,6 +64,7 @@ public interface FsUserInformationCollectionMapper extends BaseMapper<FsUserInfo
     int deleteFsUserInformationCollectionByIds(Long[] ids);
 
     FsUserInformationCollection selectByUserId(Long userId);
+    FsUserInformationCollection selectByOrderCode(String orderCode);
 
     @Select({"<script> " +
             " SELECT uic.*,u.nickname userName FROM fs_user_information_collection uic LEFT JOIN fs_user u ON uic.user_id = u.user_id " +

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsUserInformationCollectionParam.java

@@ -21,6 +21,9 @@ public class FsUserInformationCollectionParam {
     //销售id
     private Long companyUserId;
 
+    //是否关联套餐包 0-不关联 1-关联
+    private Integer isPackage;
+
     //套餐包id
     private Long packageId;
 

+ 7 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsUserInformationCollectionService.java

@@ -3,6 +3,8 @@ package com.fs.hisStore.service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
+import com.fs.course.param.CollectionInfoConfirmParam;
+import com.fs.course.vo.FsUserInfoCollectionUVO;
 import com.fs.hisStore.domain.FsUserInformationCollection;
 import com.fs.hisStore.param.FsUserInformationCollectionListDParam;
 import com.fs.hisStore.param.FsUserInformationCollectionParam;
@@ -76,6 +78,11 @@ public interface IFsUserInformationCollectionService extends IService<FsUserInfo
 
     FsUserInformationCollectionVO detail(Long id);
 
+    R getWxaCodePackageOrderUnLimit(Long collectionId);
+
     R doctorConfirm(FsUserInformationCollection collection);
 
+    FsUserInfoCollectionUVO info(Long id);
+
+    R userConfirm(CollectionInfoConfirmParam param);
 }

+ 155 - 1
fs-service/src/main/java/com/fs/hisStore/service/impl/FsUserInformationCollectionServiceImpl.java

@@ -8,25 +8,43 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.fs.common.BeanCopyUtils;
 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.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.core.config.WxMaConfiguration;
+import com.fs.course.param.CollectionInfoConfirmParam;
+import com.fs.course.vo.FsUserInfoCollectionUVO;
+import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.FsDoctor;
 import com.fs.his.mapper.FsDoctorMapper;
 import com.fs.his.service.IFsDoctorService;
 import com.fs.his.service.IFsQuestionAndAnswerService;
+import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.AnswerVO;
 import com.fs.his.vo.FsQuestionAndAnswerVO;
 import com.fs.hisStore.param.FsUserInformationCollectionListDParam;
 import com.fs.hisStore.param.FsUserInformationCollectionParam;
 import com.fs.hisStore.vo.FsUserInformationCollectionListDVO;
 import com.fs.hisStore.vo.FsUserInformationCollectionVO;
+import com.fs.store.domain.FsDoctorConfirm;
+import com.fs.store.service.IFsDoctorConfirmService;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
+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.stereotype.Service;
 import com.fs.hisStore.mapper.FsUserInformationCollectionMapper;
@@ -42,7 +60,7 @@ import org.springframework.util.CollectionUtils;
  */
 @Service
 public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserInformationCollectionMapper, FsUserInformationCollection> implements IFsUserInformationCollectionService {
-
+    Logger logger= LoggerFactory.getLogger(getClass());
     @Autowired
     private CompanyUserMapper companyUserMapper;
 
@@ -58,6 +76,15 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
     @Autowired
     private FsUserInformationCollectionMapper fsUserInformationCollectionMapper;
 
+    @Autowired
+    private ConfigUtil configUtil;
+
+    @Autowired
+    private IFsDoctorConfirmService doctorConfirmService;
+
+    @Autowired
+    RedisCache redisCache;
+
     /**
      * 查询用户信息采集
      * 
@@ -148,6 +175,7 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
             vo.setAmount(fsUserInformationCollection.getAmount());
             vo.setPackageId(fsUserInformationCollection.getPackageId());
             vo.setPayType(fsUserInformationCollection.getPayType());
+            vo.setIsPackage(fsUserInformationCollection.getIsPackage());
             if (map.getQuestionId() == null) {
                 FsQuestionAndAnswerVO questionAndAnswerVO = questionAndAnswerService.selectFsQuestionAndAnswerById(fsUserInformationCollection.getQuestionId());
                 List<AnswerVO> answerVOS = JSON.parseArray(fsUserInformationCollection.getJsonInfo(), AnswerVO.class);
@@ -200,6 +228,45 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
         return vo;
     }
 
+    @Override
+    public R getWxaCodePackageOrderUnLimit(Long collectionId) {
+        FsSysConfig sysConfig = configUtil.getSysConfig();
+
+        final WxMaService wxMaService = WxMaConfiguration.getMaService(sysConfig.getAppid());
+
+        String scene="collectionId="+ collectionId ;
+        byte[] file;
+        try {
+            file = wxMaService.getQrcodeService().createWxaCodeUnlimitBytes(
+                    scene,
+                    "pages_order/confirmUserinfo",
+                    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 doctorConfirm(FsUserInformationCollection collection) {
         FsUserInformationCollection fsUserInformationCollection = fsUserInformationCollectionMapper.selectFsUserInformationCollectionById(collection.getId());
@@ -212,16 +279,102 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
         if (fsUserInformationCollection.getDoctorConfirm() == 1){
             return R.error("医生已确认");
         }
+        List<AnswerVO> answerVOS = null;
+        //医生确认确认状态为true(用于封档)
+        if (StringUtils.isNotEmpty(fsUserInformationCollection.getJsonInfo()) ){
+            answerVOS = JSONArray.parseArray(fsUserInformationCollection.getJsonInfo(), AnswerVO.class);
+            answerVOS.forEach(answerVO -> {
+                answerVO.setFlag(true);
+            });
+        }
         FsUserInformationCollection map = new FsUserInformationCollection();
+        if (answerVOS != null && !answerVOS.isEmpty()) {
+            map.setJsonInfo(JSON.toJSONString(answerVOS));
+        }
         map.setId(collection.getId());
         map.setDoctorAdvice(collection.getDoctorAdvice());
         map.setDoctorConfirm(1);
         if (fsUserInformationCollectionMapper.updateFsUserInformationCollection(map) > 0) {
+
+            //更新医生确认信息
+            FsDoctorConfirm doctorConfirm = redisCache.getCacheObject("doctorConfirm:" + collection.getId());
+            if(doctorConfirm == null) {
+                return R.error("没有医生确认信息");
+            }
+            doctorConfirm.setDoctorEndTime(DateUtils.getNowDate());
+            Long seconds = DateUtil.between(doctorConfirm.getStartTime(), doctorConfirm.getDoctorEndTime(), DateUnit.SECOND);
+            doctorConfirm.setConfirmSecond(seconds);
+            doctorConfirmService.updateFsDoctorConfirm(doctorConfirm);
+            redisCache.deleteObject("doctorConfirm:" + collection.getId());
             return R.ok();
         }
         return R.error("医生确认失败");
     }
 
+    @Override
+    public FsUserInfoCollectionUVO info(Long id) {
+        FsUserInfoCollectionUVO vo = new FsUserInfoCollectionUVO();
+        FsUserInformationCollection collection = fsUserInformationCollectionMapper.selectFsUserInformationCollectionById(id);
+        if (collection != null) {
+            if (collection.getIsPackage() == 1) {
+                vo.setPackageId(collection.getPackageId());
+                vo.setPayType(collection.getPayType());
+                vo.setAmount(collection.getAmount());
+
+            }
+            vo.setIsPackage(collection.getIsPackage());
+            vo.setId(collection.getId());
+            vo.setAnswers(JSON.parseArray(collection.getJsonInfo(), AnswerVO.class));
+            vo.setStatus(collection.getStatus());
+        }
+        return vo;
+    }
+
+    @Override
+    public R userConfirm(CollectionInfoConfirmParam param) {
+        if (param.getId() == null) {
+            return R.error("参数错误");
+        }
+        FsUserInformationCollection collection = fsUserInformationCollectionMapper.selectFsUserInformationCollectionById(param.getId());
+        if (collection == null) {
+            return R.error("没有用户采集信息");
+        }
+        if (collection.getStatus() == 1 ){
+            if (collection.getUserConfirm() == 1){
+                return R.error("用户已确认");
+            }
+        }
+        FsUserInformationCollection map = new FsUserInformationCollection();
+        map.setId(param.getId());
+        map.setUserConfirm(1);
+        map.setUserAdvice(param.getUserAdvice());
+
+        //绑定了套餐包的用户第二次确认清空所有确认状态 未绑定的医生确认清空所有确认状态
+        if(collection.getIsPackage() == 1){
+            //第一次确认
+            if (collection.getStatus() == 1) {
+                map.setStatus(2);
+
+                //存入医生确认统计时间数据
+                FsDoctorConfirm doctorConfirm = new FsDoctorConfirm();
+                doctorConfirm.setCollectionId(collection.getId());
+                doctorConfirm.setDoctorId(collection.getDoctorId());
+                doctorConfirm.setStartTime(DateUtils.getNowDate());
+                doctorConfirmService.insertFsDoctorConfirm(doctorConfirm);
+                redisCache.setCacheObject("doctorConfirm:" + collection.getId(), doctorConfirm);
+
+            } else if (collection.getStatus() == 2) {
+                map.setStatus(1);
+                map.setDoctorConfirm(0);
+                map.setUserConfirm(0);
+            }
+        }
+        if (fsUserInformationCollectionMapper.updateFsUserInformationCollection(map) > 0) {
+            return R.ok();
+        }
+        return R.error("用户确认失败");
+    }
+
     private List<AnswerVO> getAnswerVOs(List<AnswerVO> target,List<AnswerVO> source) {
         target.addAll(source);
         return target.stream()
@@ -248,6 +401,7 @@ public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserIn
         fsUserInformationCollection.setPackageId(param.getPackageId());
         fsUserInformationCollection.setPayType(param.getPayType());
         fsUserInformationCollection.setAmount(param.getAmount());
+        fsUserInformationCollection.setIsPackage(param.getIsPackage());
         //获取医生信息
         CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getCompanyUserId());
         if (companyUser == null) {

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsUserInformationCollectionVO.java

@@ -24,4 +24,7 @@ public class FsUserInformationCollectionVO {
 
     private List<AnswerVO> answers;
 
+    //是否关联套餐包 0-不关联 1-关联
+    private Integer isPackage;
+
 }

+ 11 - 11
fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java

@@ -369,22 +369,22 @@ public class HuiFuServiceImpl implements HuiFuService {
 
 
     public MerConfig getMerConfig(){
-        SysConfigMapper sysConfigMapper= SpringUtils.getBean(SysConfigMapper.class);
-        SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.pay");
-        FsPayConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), FsPayConfig.class);
-
-//        FsPayConfig fsPayConfig = new FsPayConfig();
-//        fsPayConfig.setAppId("wx646836bf3f7d4227");
-//        fsPayConfig.setHfProductId("KAZX");
-//        fsPayConfig.setHfSysId("6666000175632107");
-//        fsPayConfig.setHuifuId("6666000175632107");
+//        SysConfigMapper sysConfigMapper= SpringUtils.getBean(SysConfigMapper.class);
+//        SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.pay");
+//        FsPayConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), FsPayConfig.class);
+
+        FsPayConfig fsPayConfig = new FsPayConfig();
+        fsPayConfig.setAppId("wx646836bf3f7d4227");
+        fsPayConfig.setHfProductId("KAZX");
+        fsPayConfig.setHfSysId("6666000175632107");
+        fsPayConfig.setHuifuId("6666000175632107");
         //fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCijLcYLMJEe16TS6BtEG9hUezZyYvp2qgpPVGWaaBbb6lud89ILMUC7jyTWufCo2fUQ0nJzYhVlNeMzmGFtg/zFwhkjJIkuCOW+/Koy1ow66Rom8/sNQLb82szHoeklbv17AnD7WJis7cGyy1+3E6jzfaPOB7PTzidK6KyfCWDByOt0JcGe3+6+9+loQFbFRXJ2RpWPQeN72n9FVtSKSvgkGtJNUzh/qBwMPN6ol6xcU/Z2o1sYrRfKC4tcMqccRi/DvvZFJPVlN+YqkJ6lhgAmJg7eZ2fhIgrmzqc96UKp2YUNm+1v8XHCflD9Wv94E6D2JgL4VbF4Zyf+fKYuR7pAgMBAAECggEAfy5UL6ENmuFgHSVF7y+1xdKA2+IbC60ed63XgTVB12jli15Im3MT7ngSg0TUIvERUv4W5MNgkX10rWHo4eKSViPGWE24JuzAQ+j7cuAwwCgPKh4HMAxGIWwyivuvK7JQL1kwRtEccpekc7dS8HhVO0rySBqj2JZmeGrk0HvcKciSWuMjhjT4dJUwSntD07REV6rVjrpQXuvmY40vH88uvHLdH1IcjmJs2yJRNawUNtd+8FvpOCjami7zpB+er+AQ6S2fvpljNqfE5Kadm3MvzBngDdMS3xRvMHfjCifVwFpLP0rLDP6cSn6PJWbkNYQVZi12w8+wb5f7AVlaKXnfdQKBgQDh7VC5+MOqfcUr9h/n2vhFFhQOaGAZCOBc65n8VBj9aRht8ViXFvRrIRmM+QvUbV9/7taFbtAnZXIzu+12T4vnlZv9DTsy6kKloV5923xZ4CpzIVG8crlwJz1wdALeO6M485RtRLjz6nlNKn2m2VJ1d5XFBDhIz5rWUzagPwwpwwKBgQC4L8Eyu6Yn/zQmv8l6rfAsEfUJzfYtojf1PerPYilARtgFuD20cppcOP5oAk2TTX3qaz0Y9atCfL2z2qxtrgKtw2etfhDBmT6l6+pg04SLuyTrVeZ5dxXHt+LRLJnvBbGgnvAM6rSRKdHXT0gfqiRIMw2qIUtndgRr4RK5hqcd4wKBgBYBFh620t/VFhIdC6h6VDnuV4+7rLhje+6w57OCwVhVFxMGMZmtm6qfc6yeSP+sk2OTcINYcp+TqtbNE+i1AKxSjvnLgxuHY2xcViat7OOYCKpj8WEIT3VT7RD5y5m3d0NBvhASZG0lRiE05T4N5pEYT5b7vTuiNLNxMV3UJiwfAoGBAIb2/1QEqwmN+RIX4TSTNnWkpvELSkRAJU8Akwpp/J5MC0mNqzGJ9NB1Nv7SCTRSSV04PaoHgvoSXBPpvgYUx4O6t0MrKG4ktAJzL+jJtcuKU9Bavqrs9znE5mCulRHQE0wGixJ7/dqNUWW7g7coPrPlLTMoeI+UrEK8x7LJF7ZPAoGALHvtu6zzWVeCdELIPUTersVQrH1R3yZuf6rgubg4XFw3meFcd4W8BvXm4EKGRZxdiyZvCtKlkV9u110Rx3RNSbZCOb3MClmkcow8vPIhmyGWIGymAIxr9JcD0p6HogzPvbjRsLh1nFg/+95OL2E353Bp4/oPIgYIfnYNUfD+0gA=");
         //fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjbkiiy2ewzuPsM5uZbAFMJOBWCRRQ2RtH7Dbr9Evbow6IEyvGoen8XKpiuXzapeps3b2eogETHVFQtLooqRHpVRppFKtU1AHZXA7C6wPocfMldJbTykDCowyJwOSYEaFPBjr9cw6dQcBJMIEHj0YWjBPR1dPVzf+y4sUohbrkS/FANBpp24j+Mu0qEqh8TuVuKlvig7jbmXJiJkAmUJ+Tb3Caj20fFTen6juPd3zR/KM3twki06wZZbb4KyCiM/NwozEqJ9PkWSs6rG7aW+BEfzlo3m1a7MlL0vpKNR3f0lbywq09rFAwtA7R2lssWwLMma4LOqtMMqo3yZdv4vObQIDAQAB");
         //fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCijLcYLMJEe16TS6BtEG9hUezZyYvp2qgpPVGWaaBbb6lud89ILMUC7jyTWufCo2fUQ0nJzYhVlNeMzmGFtg/zFwhkjJIkuCOW+/Koy1ow66Rom8/sNQLb82szHoeklbv17AnD7WJis7cGyy1+3E6jzfaPOB7PTzidK6KyfCWDByOt0JcGe3+6+9+loQFbFRXJ2RpWPQeN72n9FVtSKSvgkGtJNUzh/qBwMPN6ol6xcU/Z2o1sYrRfKC4tcMqccRi/DvvZFJPVlN+YqkJ6lhgAmJg7eZ2fhIgrmzqc96UKp2YUNm+1v8XHCflD9Wv94E6D2JgL4VbF4Zyf+fKYuR7pAgMBAAECggEAfy5UL6ENmuFgHSVF7y+1xdKA2+IbC60ed63XgTVB12jli15Im3MT7ngSg0TUIvERUv4W5MNgkX10rWHo4eKSViPGWE24JuzAQ+j7cuAwwCgPKh4HMAxGIWwyivuvK7JQL1kwRtEccpekc7dS8HhVO0rySBqj2JZmeGrk0HvcKciSWuMjhjT4dJUwSntD07REV6rVjrpQXuvmY40vH88uvHLdH1IcjmJs2yJRNawUNtd+8FvpOCjami7zpB+er+AQ6S2fvpljNqfE5Kadm3MvzBngDdMS3xRvMHfjCifVwFpLP0rLDP6cSn6PJWbkNYQVZi12w8+wb5f7AVlaKXnfdQKBgQDh7VC5+MOqfcUr9h/n2vhFFhQOaGAZCOBc65n8VBj9aRht8ViXFvRrIRmM+QvUbV9/7taFbtAnZXIzu+12T4vnlZv9DTsy6kKloV5923xZ4CpzIVG8crlwJz1wdALeO6M485RtRLjz6nlNKn2m2VJ1d5XFBDhIz5rWUzagPwwpwwKBgQC4L8Eyu6Yn/zQmv8l6rfAsEfUJzfYtojf1PerPYilARtgFuD20cppcOP5oAk2TTX3qaz0Y9atCfL2z2qxtrgKtw2etfhDBmT6l6+pg04SLuyTrVeZ5dxXHt+LRLJnvBbGgnvAM6rSRKdHXT0gfqiRIMw2qIUtndgRr4RK5hqcd4wKBgBYBFh620t/VFhIdC6h6VDnuV4+7rLhje+6w57OCwVhVFxMGMZmtm6qfc6yeSP+sk2OTcINYcp+TqtbNE+i1AKxSjvnLgxuHY2xcViat7OOYCKpj8WEIT3VT7RD5y5m3d0NBvhASZG0lRiE05T4N5pEYT5b7vTuiNLNxMV3UJiwfAoGBAIb2/1QEqwmN+RIX4TSTNnWkpvELSkRAJU8Akwpp/J5MC0mNqzGJ9NB1Nv7SCTRSSV04PaoHgvoSXBPpvgYUx4O6t0MrKG4ktAJzL+jJtcuKU9Bavqrs9znE5mCulRHQE0wGixJ7/dqNUWW7g7coPrPlLTMoeI+UrEK8x7LJF7ZPAoGALHvtu6zzWVeCdELIPUTersVQrH1R3yZuf6rgubg4XFw3meFcd4W8BvXm4EKGRZxdiyZvCtKlkV9u110Rx3RNSbZCOb3MClmkcow8vPIhmyGWIGymAIxr9JcD0p6HogzPvbjRsLh1nFg/+95OL2E353Bp4/oPIgYIfnYNUfD+0gA=");
         //fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjbkiiy2ewzuPsM5uZbAFMJOBWCRRQ2RtH7Dbr9Evbow6IEyvGoen8XKpiuXzapeps3b2eogETHVFQtLooqRHpVRppFKtU1AHZXA7C6wPocfMldJbTykDCowyJwOSYEaFPBjr9cw6dQcBJMIEHj0YWjBPR1dPVzf+y4sUohbrkS/FANBpp24j+Mu0qEqh8TuVuKlvig7jbmXJiJkAmUJ+Tb3Caj20fFTen6juPd3zR/KM3twki06wZZbb4KyCiM/NwozEqJ9PkWSs6rG7aW+BEfzlo3m1a7MlL0vpKNR3f0lbywq09rFAwtA7R2lssWwLMma4LOqtMMqo3yZdv4vObQIDAQAB");
         //fsPayConfig.setHfPayOnlineNotifyUrl("https://userapp.ysya.top/app/hfPay/payNotifyUrl");
-        //fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCOLOsfdbmB5qe7HTwbpxNQW0+5O6+im/7x+ZOBCf30FftYYRvnzbcsbvdBZa7745d7OgMB9Drd6vWah5Xp4uGf+tZOwGMHm6C8lphswJp3d1vPARuZulw4WSaIm+b8M2zEg+IMZiGhFC+H6fjtQm2jBz+Szvfa+MPwOzdJNcczpv56dujjz3G8Pf5aizZWjz5ovuWSSwdnmP8OAPBYhQaaBF4JyrIv5s89Vm+xIVlvvMcTo8uNf7HbKgUR27fjxyTtcJAlZUc/7XuBxNXTknxP1taiJU4XXeNpsPnLq31KwCsacPFZ5/QHvgkaDFjmImWaHUESMAFT/bkZvbV+PJvXAgMBAAECggEAYenRa3MZ9Loy3Yw+rxSbGoYoG3tdc/FW3LJywTVubcENvknye+uSsMkjAyjSH6sX0ceb9qaKO/bqeifSOKcFl7WaDdY03TJyui5EfvEN8CSFV8R9i5tqk2viO8aShzGrQJNLBBr6IgLS0RlzU4KiGtqND7/1thoIZtOBOawNqiXarFQo7i5DpsV6cZhw5Pk/JP5eQMhcVnyDmjYSKIcbCtkOmYHgxjXt79JnJBrwhHQ3gmdFO43XtuH+LPtg7tsvLetwIX1s5KdGJqXuDwFa/grFpTVa/oHZ0vebdHyNKn2WFbXEuGZP+GsudOEMRYIpyyPIJEzHmlXJs5SbYeLgUQKBgQDHEPUfOiqFg2APYtSFH751tPRRpqI0RZf9D3c/OEUXBCAEbVFocIPVexk+HNS3MXkzxTHS+ULRSCnmaSMKIcjJgX8ekatwNKzUbnXT9R4w2hSqp0vI1o9pNASe5dLQAKnp9WzyXAYeRxflQ+wb/d4xfwn4oqxti66TMBkhYpPY7QKBgQC21pYNZVADjQWKMVvbqqvHec22iTCpqmwJtD90Ze3DLI0SjJnPSeSRkMb71wNQYITH6pdFqw5KpdgxuQlefA6is3mSQ+Ovk+bCG84Ii5b2SAVUfUnknJA4OnPKn9TJs0C8BtpN7wQDKI2wTw5GGqdsDu2ly9ZpZRv/b/oM0/yDUwKBgAIINUhdUqPMRIXDr4GwYkRXVYsj1VINR9DogIIfs+zZOO5yozsasu3R9N8CclVwZtlVcP3DV6BFSVA10IrA74jHDqIkQIjDsOP2QLOqM+WxxDY9wPNK5Wnggw+QLwe6igF+ZN9QeyuB9Ed92wIqJEODFXn5RyNTIrQT8J27oOC9AoGBAIdedRZR7l3SqUlZphMLV8eGrQH6rObRYNAGffymAtVAROp44uAQa4RC1rBazv9Rlr2VOI7CSQCHrXuS7hbgbs2TZ+0dCpRSQsVwZKj7ALgzNo8JfA4gxL58uIJKt/bmGoWb5UFSN3xHKDBjN8Q7s71TiCv6sTKzQ3lp5I5e3VQ1AoGANS1iuylO0EAm5EmbzOLgHDa+qptG9pkG3eiEFO0IDXKc1Kd6haJkQJH6phePg1L6X7X/zEPuVW9EuUUWmICxRcVLlqGfuj4CAq/x8JEbpizMyD8hM+8DgnwWOHc3OY8OxgooNwlvf+zn5rLY3LkpTnPJL/AdRyQRlKaO7Jqqpc0=");
-        //fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnv5W7Fwgxe6VIEAmT0scdRAv7ZjzmaRLIcsUuwwI1/1HDDfBk3oyYsPHTpsP5BpdceKfcNkowmLE4RDnTHjdGe6qWFCp/R18oKiASp/4kqeA1NYycP3Vu4AQZKMJCpqmWEwYBUl6Js033MQd575C10zdzTexvA0lggMFoM5toI13cvPD58dYqGFzmNUsv5IfUfdRmj0ul4etFpgWYSpHPWlWMV2TpR+HhrDf8/hqqYgUn1lsvFlLzeC7LyhpahgXmXv6FdJFEAQ95EsvD8OpgzRyPxpkBwHh5ogsldi+9sWYDnT2/w/fuGVELpXO3otJ1JuROyuOPx23A2aoTBnTTQIDAQAB");
+        fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCOLOsfdbmB5qe7HTwbpxNQW0+5O6+im/7x+ZOBCf30FftYYRvnzbcsbvdBZa7745d7OgMB9Drd6vWah5Xp4uGf+tZOwGMHm6C8lphswJp3d1vPARuZulw4WSaIm+b8M2zEg+IMZiGhFC+H6fjtQm2jBz+Szvfa+MPwOzdJNcczpv56dujjz3G8Pf5aizZWjz5ovuWSSwdnmP8OAPBYhQaaBF4JyrIv5s89Vm+xIVlvvMcTo8uNf7HbKgUR27fjxyTtcJAlZUc/7XuBxNXTknxP1taiJU4XXeNpsPnLq31KwCsacPFZ5/QHvgkaDFjmImWaHUESMAFT/bkZvbV+PJvXAgMBAAECggEAYenRa3MZ9Loy3Yw+rxSbGoYoG3tdc/FW3LJywTVubcENvknye+uSsMkjAyjSH6sX0ceb9qaKO/bqeifSOKcFl7WaDdY03TJyui5EfvEN8CSFV8R9i5tqk2viO8aShzGrQJNLBBr6IgLS0RlzU4KiGtqND7/1thoIZtOBOawNqiXarFQo7i5DpsV6cZhw5Pk/JP5eQMhcVnyDmjYSKIcbCtkOmYHgxjXt79JnJBrwhHQ3gmdFO43XtuH+LPtg7tsvLetwIX1s5KdGJqXuDwFa/grFpTVa/oHZ0vebdHyNKn2WFbXEuGZP+GsudOEMRYIpyyPIJEzHmlXJs5SbYeLgUQKBgQDHEPUfOiqFg2APYtSFH751tPRRpqI0RZf9D3c/OEUXBCAEbVFocIPVexk+HNS3MXkzxTHS+ULRSCnmaSMKIcjJgX8ekatwNKzUbnXT9R4w2hSqp0vI1o9pNASe5dLQAKnp9WzyXAYeRxflQ+wb/d4xfwn4oqxti66TMBkhYpPY7QKBgQC21pYNZVADjQWKMVvbqqvHec22iTCpqmwJtD90Ze3DLI0SjJnPSeSRkMb71wNQYITH6pdFqw5KpdgxuQlefA6is3mSQ+Ovk+bCG84Ii5b2SAVUfUnknJA4OnPKn9TJs0C8BtpN7wQDKI2wTw5GGqdsDu2ly9ZpZRv/b/oM0/yDUwKBgAIINUhdUqPMRIXDr4GwYkRXVYsj1VINR9DogIIfs+zZOO5yozsasu3R9N8CclVwZtlVcP3DV6BFSVA10IrA74jHDqIkQIjDsOP2QLOqM+WxxDY9wPNK5Wnggw+QLwe6igF+ZN9QeyuB9Ed92wIqJEODFXn5RyNTIrQT8J27oOC9AoGBAIdedRZR7l3SqUlZphMLV8eGrQH6rObRYNAGffymAtVAROp44uAQa4RC1rBazv9Rlr2VOI7CSQCHrXuS7hbgbs2TZ+0dCpRSQsVwZKj7ALgzNo8JfA4gxL58uIJKt/bmGoWb5UFSN3xHKDBjN8Q7s71TiCv6sTKzQ3lp5I5e3VQ1AoGANS1iuylO0EAm5EmbzOLgHDa+qptG9pkG3eiEFO0IDXKc1Kd6haJkQJH6phePg1L6X7X/zEPuVW9EuUUWmICxRcVLlqGfuj4CAq/x8JEbpizMyD8hM+8DgnwWOHc3OY8OxgooNwlvf+zn5rLY3LkpTnPJL/AdRyQRlKaO7Jqqpc0=");
+        fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnv5W7Fwgxe6VIEAmT0scdRAv7ZjzmaRLIcsUuwwI1/1HDDfBk3oyYsPHTpsP5BpdceKfcNkowmLE4RDnTHjdGe6qWFCp/R18oKiASp/4kqeA1NYycP3Vu4AQZKMJCpqmWEwYBUl6Js033MQd575C10zdzTexvA0lggMFoM5toI13cvPD58dYqGFzmNUsv5IfUfdRmj0ul4etFpgWYSpHPWlWMV2TpR+HhrDf8/hqqYgUn1lsvFlLzeC7LyhpahgXmXv6FdJFEAQ95EsvD8OpgzRyPxpkBwHh5ogsldi+9sWYDnT2/w/fuGVELpXO3otJ1JuROyuOPx23A2aoTBnTTQIDAQAB");
 
         config=fsPayConfig;
         MerConfig merConfig = new MerConfig();

+ 47 - 0
fs-service/src/main/java/com/fs/store/domain/FsDoctorConfirm.java

@@ -0,0 +1,47 @@
+package com.fs.store.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 【请填写功能名称】对象 fs_doctor_confirm
+ *
+ * @author fs
+ * @date 2025-10-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsDoctorConfirm extends BaseEntity{
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 用户信息采集id */
+    @Excel(name = "用户信息采集id")
+    private Long collectionId;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date doctorEndTime;
+
+    /** 医生id */
+    @Excel(name = "医生id")
+    private Long doctorId;
+
+    /** 确认秒数 */
+    @Excel(name = "确认秒数")
+    private Long confirmSecond;
+
+
+}

+ 61 - 0
fs-service/src/main/java/com/fs/store/mapper/FsDoctorConfirmMapper.java

@@ -0,0 +1,61 @@
+package com.fs.store.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.store.domain.FsDoctorConfirm;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ * 
+ * @author fs
+ * @date 2025-10-18
+ */
+public interface FsDoctorConfirmMapper extends BaseMapper<FsDoctorConfirm>{
+    /**
+     * 查询【请填写功能名称】
+     * 
+     * @param id 【请填写功能名称】主键
+     * @return 【请填写功能名称】
+     */
+    FsDoctorConfirm selectFsDoctorConfirmById(Long id);
+
+    /**
+     * 查询【请填写功能名称】列表
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    List<FsDoctorConfirm> selectFsDoctorConfirmList(FsDoctorConfirm fsDoctorConfirm);
+
+    /**
+     * 新增【请填写功能名称】
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 结果
+     */
+    int insertFsDoctorConfirm(FsDoctorConfirm fsDoctorConfirm);
+
+    /**
+     * 修改【请填写功能名称】
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 结果
+     */
+    int updateFsDoctorConfirm(FsDoctorConfirm fsDoctorConfirm);
+
+    /**
+     * 删除【请填写功能名称】
+     * 
+     * @param id 【请填写功能名称】主键
+     * @return 结果
+     */
+    int deleteFsDoctorConfirmById(Long id);
+
+    /**
+     * 批量删除【请填写功能名称】
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsDoctorConfirmByIds(Long[] ids);
+}

+ 61 - 0
fs-service/src/main/java/com/fs/store/service/IFsDoctorConfirmService.java

@@ -0,0 +1,61 @@
+package com.fs.store.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.store.domain.FsDoctorConfirm;
+
+/**
+ * 【请填写功能名称】Service接口
+ * 
+ * @author fs
+ * @date 2025-10-18
+ */
+public interface IFsDoctorConfirmService extends IService<FsDoctorConfirm>{
+    /**
+     * 查询【请填写功能名称】
+     * 
+     * @param id 【请填写功能名称】主键
+     * @return 【请填写功能名称】
+     */
+    FsDoctorConfirm selectFsDoctorConfirmById(Long id);
+
+    /**
+     * 查询【请填写功能名称】列表
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    List<FsDoctorConfirm> selectFsDoctorConfirmList(FsDoctorConfirm fsDoctorConfirm);
+
+    /**
+     * 新增【请填写功能名称】
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 结果
+     */
+    int insertFsDoctorConfirm(FsDoctorConfirm fsDoctorConfirm);
+
+    /**
+     * 修改【请填写功能名称】
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 结果
+     */
+    int updateFsDoctorConfirm(FsDoctorConfirm fsDoctorConfirm);
+
+    /**
+     * 批量删除【请填写功能名称】
+     * 
+     * @param ids 需要删除的【请填写功能名称】主键集合
+     * @return 结果
+     */
+    int deleteFsDoctorConfirmByIds(Long[] ids);
+
+    /**
+     * 删除【请填写功能名称】信息
+     * 
+     * @param id 【请填写功能名称】主键
+     * @return 结果
+     */
+    int deleteFsDoctorConfirmById(Long id);
+}

+ 95 - 0
fs-service/src/main/java/com/fs/store/service/impl/FsDoctorConfirmServiceImpl.java

@@ -0,0 +1,95 @@
+package com.fs.store.service.impl;
+
+import java.util.List;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.store.domain.FsDoctorConfirm;
+import com.fs.store.mapper.FsDoctorConfirmMapper;
+import com.fs.store.service.IFsDoctorConfirmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-10-18
+ */
+@Service
+public class FsDoctorConfirmServiceImpl extends ServiceImpl<FsDoctorConfirmMapper, FsDoctorConfirm> implements IFsDoctorConfirmService {
+
+    /**
+     * 查询【请填写功能名称】
+     * 
+     * @param id 【请填写功能名称】主键
+     * @return 【请填写功能名称】
+     */
+    @Override
+    public FsDoctorConfirm selectFsDoctorConfirmById(Long id)
+    {
+        return baseMapper.selectFsDoctorConfirmById(id);
+    }
+
+    /**
+     * 查询【请填写功能名称】列表
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 【请填写功能名称】
+     */
+    @Override
+    public List<FsDoctorConfirm> selectFsDoctorConfirmList(FsDoctorConfirm fsDoctorConfirm)
+    {
+        return baseMapper.selectFsDoctorConfirmList(fsDoctorConfirm);
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 结果
+     */
+    @Override
+    public int insertFsDoctorConfirm(FsDoctorConfirm fsDoctorConfirm)
+    {
+        fsDoctorConfirm.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFsDoctorConfirm(fsDoctorConfirm);
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     * 
+     * @param fsDoctorConfirm 【请填写功能名称】
+     * @return 结果
+     */
+    @Override
+    public int updateFsDoctorConfirm(FsDoctorConfirm fsDoctorConfirm)
+    {
+        fsDoctorConfirm.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateFsDoctorConfirm(fsDoctorConfirm);
+    }
+
+    /**
+     * 批量删除【请填写功能名称】
+     * 
+     * @param ids 需要删除的【请填写功能名称】主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsDoctorConfirmByIds(Long[] ids)
+    {
+        return baseMapper.deleteFsDoctorConfirmByIds(ids);
+    }
+
+    /**
+     * 删除【请填写功能名称】信息
+     * 
+     * @param id 【请填写功能名称】主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsDoctorConfirmById(Long id)
+    {
+        return baseMapper.deleteFsDoctorConfirmById(id);
+    }
+}

+ 22 - 1
fs-service/src/main/resources/mapper/hisStore/FsUserInformationCollectionMapper.xml

@@ -18,10 +18,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="packageId"    column="package_id"    />
         <result property="payType"    column="pay_type"    />
         <result property="amount"    column="amount"    />
+        <result property="isPackage"    column="is_package"    />
+        <result property="userConfirm2"    column="user_confirm2"    />
+        <result property="packageOrderCode"    column="package_order_code"    />
+        <result property="status"    column="status"    />
     </resultMap>
 
     <sql id="selectFsUserInformationCollectionVo">
-        select id, question_id, user_id, json_info, user_confirm, doctor_confirm, create_time, update_time,doctor_id,company_user_id,package_id,pay_type,amount from fs_user_information_collection
+        select id, question_id, user_id, json_info, user_confirm, doctor_confirm, create_time, update_time,doctor_id,company_user_id,package_id,pay_type,amount,is_package,user_confirm2,package_order_code,status from fs_user_information_collection
     </sql>
 
     <select id="selectFsUserInformationCollectionList" parameterType="FsUserInformationCollection" resultMap="FsUserInformationCollectionResult">
@@ -44,6 +48,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFsUserInformationCollectionVo"/>
         where user_id = #{userId}
     </select>
+
+    <select id="selectByOrderCode" parameterType="Long" resultMap="FsUserInformationCollectionResult">
+        <include refid="selectFsUserInformationCollectionVo"/>
+        where package_order_code = #{orderCode}
+    </select>
         
     <insert id="insertFsUserInformationCollection" parameterType="FsUserInformationCollection" useGeneratedKeys="true" keyProperty="id">
         insert into fs_user_information_collection
@@ -62,6 +71,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="amount != null">amount,</if>
             <if test="userAdvice != null">user_advice,</if>
             <if test="doctorAdvice != null">doctor_advice,</if>
+            <if test="isPackage != null">is_package,</if>
+            <if test="userConfirm2 != null">user_confirm2,</if>
+            <if test="packageOrderCode != null">package_order_code,</if>
+            <if test="status != null">status,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="questionId != null">#{questionId},</if>
@@ -78,6 +91,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="amount != null">#{amount},</if>
             <if test="userAdvice != null">#{userAdvice},</if>
             <if test="doctorAdvice != null">#{doctorAdvice},</if>
+            <if test="isPackage != null">#{isPackage},</if>
+            <if test="userConfirm2 != null">#{userConfirm2},</if>
+            <if test="packageOrderCode != null">#{packageOrderCode},</if>
+            <if test="status != null">#{status},</if>
          </trim>
     </insert>
 
@@ -98,6 +115,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="amount != null">amount = #{amount},</if>
             <if test="userAdvice != null">user_advice = #{userAdvice},</if>
             <if test="doctorAdvice != null">doctor_advice = #{doctorAdvice},</if>
+            <if test="userConfirm2 != null">user_confirm2 = #{userConfirm2},</if>
+            <if test="isPackage != null">is_package = #{isPackage},</if>
+            <if test="packageOrderCode != null">package_order_code = #{packageOrderCode},</if>
+            <if test="status != null">status = #{status},</if>
         </trim>
         where id = #{id}
     </update>

+ 84 - 0
fs-service/src/main/resources/mapper/store/FsDoctorConfirmMapper.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.store.mapper.FsDoctorConfirmMapper">
+    
+    <resultMap type="FsDoctorConfirm" id="FsDoctorConfirmResult">
+        <result property="id"    column="id"    />
+        <result property="collectionId"    column="collection_id"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="doctorEndTime"    column="doctor_end_time"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="doctorId"    column="doctor_id"    />
+        <result property="confirmSecond"    column="confirm_second"    />
+    </resultMap>
+
+    <sql id="selectFsDoctorConfirmVo">
+        select id, collection_id, start_time, doctor_end_time, create_time, update_time, doctor_id, confirm_second from fs_doctor_confirm
+    </sql>
+
+    <select id="selectFsDoctorConfirmList" parameterType="FsDoctorConfirm" resultMap="FsDoctorConfirmResult">
+        <include refid="selectFsDoctorConfirmVo"/>
+        <where>  
+            <if test="collectionId != null "> and collection_id = #{collectionId}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="doctorId != null "> and doctor_id = #{doctorId}</if>
+            <if test="confirmSecond != null "> and confirm_second = #{confirmSecond}</if>
+        </where>
+    </select>
+    
+    <select id="selectFsDoctorConfirmById" parameterType="Long" resultMap="FsDoctorConfirmResult">
+        <include refid="selectFsDoctorConfirmVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertFsDoctorConfirm" parameterType="FsDoctorConfirm" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_doctor_confirm
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="collectionId != null">collection_id,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="doctorEndTime != null">doctor_end_time,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="doctorId != null">doctor_id,</if>
+            <if test="confirmSecond != null">confirm_second,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="collectionId != null">#{collectionId},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="doctorEndTime != null">#{doctorEndTime},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="doctorId != null">#{doctorId},</if>
+            <if test="confirmSecond != null">#{confirmSecond},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsDoctorConfirm" parameterType="FsDoctorConfirm">
+        update fs_doctor_confirm
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="collectionId != null">collection_id = #{collectionId},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="doctorEndTime != null">doctor_end_time = #{doctorEndTime},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="doctorId != null">doctor_id = #{doctorId},</if>
+            <if test="confirmSecond != null">confirm_second = #{confirmSecond},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsDoctorConfirmById" parameterType="Long">
+        delete from fs_doctor_confirm where id = #{id}
+    </delete>
+
+    <delete id="deleteFsDoctorConfirmByIds" parameterType="String">
+        delete from fs_doctor_confirm where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 34 - 0
fs-user-app/src/main/java/com/fs/app/controller/UserInfoCollectionController.java

@@ -0,0 +1,34 @@
+package com.fs.app.controller;
+
+import com.fs.common.core.domain.R;
+import com.fs.course.param.CollectionInfoConfirmParam;
+import com.fs.course.vo.FsUserInfoCollectionUVO;
+import com.fs.hisStore.service.IFsUserInformationCollectionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api("用户信息采集接口")
+@RestController
+@RequestMapping(value="/app/collection")
+public class UserInfoCollectionController extends AppBaseController {
+
+    @Autowired
+    private IFsUserInformationCollectionService userInformationCollectionService;
+
+
+    @ApiOperation("用户信息采集详情")
+    @GetMapping("/getInfo")
+    public R getInfo(@RequestParam("id") Long id) {
+        FsUserInfoCollectionUVO info = userInformationCollectionService.info(id);
+        return R.ok().put("data",info);
+    }
+
+    @ApiOperation("确认用户采集信息")
+    @PostMapping("/confirm")
+    public R confirm(@RequestBody CollectionInfoConfirmParam param) {
+        param.setUserId(Long.parseLong(getUserId()));
+        return userInformationCollectionService.userConfirm(param);
+    }
+}