Browse Source

课程同步/商城订单定时同步待发送

三七 2 ngày trước cách đây
mục cha
commit
2bba8a973e

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

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.service.impl.SmsServiceImpl;
 import com.fs.common.utils.DateUtils;
@@ -50,6 +51,8 @@ import com.fs.his.vo.FsSubOrderResultVO;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.hisStore.domain.FsStorePaymentScrm;
 import com.fs.hisStore.mapper.FsStorePaymentScrmMapper;
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.hisStore.service.IFsStorePaymentScrmService;
 import com.fs.huifuPay.domain.HuiFuQueryOrderResult;
 import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayQueryRequest;
 import com.fs.huifuPay.service.HuiFuService;
@@ -225,7 +228,11 @@ public class Task {
     @Autowired
     private AiHookService aiHookService;
 
+    @Autowired
+    private IFsStorePaymentScrmService paymentScrmService;
 
+    @Autowired
+    private IFsStoreOrderScrmService orderScrmService;
     /**
      * 定时任务,处理ai禁止回复之后的消息
      */
@@ -590,6 +597,52 @@ public class Task {
 
     }
 
+    public void paymentScrm() {
+
+        List<FsStorePaymentScrm> fsStorePaymentScrms = paymentScrmService.selectFsStorePaymentByAll();
+        fsStorePaymentScrms.forEach(payment -> {
+            try {
+                String payMode = payment.getPayMode();
+                logger.info("手动查询"+payment);
+                if (payMode.equals("hf")){
+                    V2TradePaymentScanpayQueryRequest request = new V2TradePaymentScanpayQueryRequest();
+                    request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
+                    request.setOrgHfSeqId(payment.getTradeNo());
+                    request.setAppId(payment.getAppId());
+                    HuiFuQueryOrderResult o = null;
+                    try {
+                        o = huiFuService.queryOrder(request);
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                    logger.info("汇付返回"+o);
+                    if ("00000000".equals(o.getResp_code())) {
+                        if (o.getTrans_stat().equals("S")) {
+                            String[] order=o.getOrg_req_seq_id().split("-");
+                            switch (order[0]) {
+                                case "store":
+                                    orderScrmService.payConfirm(1,null,order[1], o.getOrg_hf_seq_id(),o.getOut_trans_id(),o.getParty_order_id());
+                                    break;
+                                case "store_remain":
+                                    orderScrmService.payRemainConfirm( order[1], o.getOrg_hf_seq_id(),o.getOut_trans_id(),o.getParty_order_id());
+                                    break;
+                                case "payment":
+                                    fsStorePaymentService.payConfirm(order[1],o.getOrg_hf_seq_id(),o.getOut_trans_id(),o.getParty_order_id());
+                                    break;
+                            }
+                        }
+                    }
+                }
+            }catch (Exception e){
+                logger.error("当前订单同步失败-"+payment+":"+e.getMessage());
+            }
+
+        });
+
+
+    }
+
+
     public void addQwUserName() {
         QwCompany qwCompany = new QwCompany();
         List<QwCompany> companyList = qwCompanyService.selectQwCompanyList(qwCompany);

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStorePaymentScrmMapper.java

@@ -367,6 +367,9 @@ public interface FsStorePaymentScrmMapper
     @Select("select * from fs_store_payment_scrm where trade_no=#{tradeNo}")
     FsStorePaymentScrm selectFsStorePaymentByTradeNo(String tradeNo);
 
+    @Select("select * from fs_store_payment_scrm where status = 0 and create_time < NOW() - INTERVAL 5 MINUTE AND create_time > NOW() - INTERVAL 60 MINUTE ")
+    List<FsStorePaymentScrm> selectFsStorePaymentByAll();
+
     @Select("select * from fs_store_payment_scrm where business_type=#{type} and  business_order_id=#{business_order_id} and status=1")
     List<FsStorePaymentScrm> selectFsStorePaymentByPay(@Param("type")int type, @Param("business_order_id") Long business_order_id);
 

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

@@ -97,6 +97,7 @@ public interface IFsStorePaymentScrmService
     List<FsStorePaymentScrm> selectFsStorePaymentByOrder(Long orderId);
 
     FsStorePaymentScrm selectFsStorePaymentByTradeNo(String tradeNo);
+    List<FsStorePaymentScrm> selectFsStorePaymentByAll();
 
     R sendRedPacket(WxSendRedPacketParam param);
 

+ 5 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -395,6 +395,11 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         return fsStorePaymentMapper.selectFsStorePaymentByTradeNo(tradeNo);
     }
 
+    @Override
+    public List<FsStorePaymentScrm> selectFsStorePaymentByAll() {
+        return fsStorePaymentMapper.selectFsStorePaymentByAll();
+    }
+
     @Override
     @Transactional
     public R sendRedPacket(WxSendRedPacketParam param) {

+ 140 - 6
fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java

@@ -581,6 +581,143 @@ public class QwSopTempServiceImpl implements IQwSopTempService {
         fsUserCourseVideoRedPackageService.batchSaveFsUserCourseVideoRedPackage(redPackage);
     }
 
+
+    private void createSopTempRulesTwo(QwSopTemp temp, List<FsUserCourseVideo> videoList, FsUserCourse fsUserCourse) {
+        AtomicInteger i = new AtomicInteger(1);
+        Integer gap = temp.getGap();
+        List<QwSopTempDay> collect = videoList.stream().map(e -> {
+            QwSopTempDay day = new QwSopTempDay();
+            day.setTempId(temp.getId());
+            day.setDayNum(i.getAndIncrement() * gap);
+            day.setName("第" + day.getDayNum() + "天");
+            day.setSorts(day.getDayNum());
+            day.setList(new ArrayList<>());
+            List<String> timeList = new ArrayList<>();
+            if (temp.getTimeList() != null) {
+                timeList = JSON.parseArray(JSON.toJSONString(temp.getTimeList()), String.class);
+            }
+            AtomicInteger sorts = new AtomicInteger(0);
+            List<QwSopTempRules> rulesList = timeList.stream().map(time -> {
+                QwSopTempRules rules = new QwSopTempRules();
+                rules.setTempId(temp.getId());
+                rules.setName(day.getName());
+
+                if (!"河山医院".equals(cloudHostProper.getCompanyName())){
+                    if (temp.getOpenOfficial().equals("1")) {
+                        rules.setIsOfficial(sorts.get() == 0 ? "1" : "0");
+                    } else {
+                        rules.setIsOfficial("0");
+                    }
+
+                    if (day.getDayNum() == 1 && sorts.get() == 0 && temp.getOpenOfficial().equals("1")) {
+                        rules.setTime("01:05");
+                    } else {
+                        rules.setTime(time);
+                    }
+                }else {
+                    rules.setIsOfficial("0");
+                    rules.setTime(time);
+                }
+
+                if (temp.getOpenIsAtAll() != null && temp.getOpenIsAtAll().equals("1")){
+                    rules.setIsAtAll(1);
+                }else {
+                    rules.setIsAtAll(0);
+                }
+
+                rules.setContentType(2);
+                rules.setType(2);
+                rules.setCourseType(0);
+                rules.setCourseId(e.getCourseId());
+                rules.setVideoId(e.getVideoId());
+                // 设置消息类型
+
+                QwSopTempContent content = new QwSopTempContent();
+                content.setTempId(temp.getId());
+                content.setContentType(3);
+                QwSopTempSetting2.Content.Setting setting = new QwSopTempSetting2.Content.Setting();
+                setting.setLinkTitle(e.getTitle());
+                setting.setMiniprogramTitle(e.getTitle());
+
+                //用课节图片做封面
+                if ("今正科技".equals(cloudHostProper.getCompanyName())) {
+                    setting.setMiniprogramPicUrl(!StringUtil.isNullOrEmpty(e.getThumbnail()) ? e.getThumbnail() : fsUserCourse.getImgUrl());
+                    setting.setLinkImageUrl(!StringUtil.isNullOrEmpty(e.getThumbnail()) ? e.getThumbnail() : fsUserCourse.getImgUrl());
+                } else {
+                    setting.setMiniprogramPicUrl(fsUserCourse.getImgUrl());
+                    setting.setLinkImageUrl(fsUserCourse.getImgUrl());
+
+                }
+
+                setting.setIsBindUrl(1);
+                setting.setLinkDescribe(e.getTitle());
+                setting.setContentType("4");
+                content.setContent(JSON.toJSONString(setting));
+                content.setIsBindUrl(1);
+                List<QwSopTempContent> qwSopTempContents = new ArrayList<>();
+                qwSopTempContents.add(content);
+
+                QwSopTempContent content3 = new QwSopTempContent();
+                content3.setTempId(temp.getId());
+                content3.setContentType(3);
+
+                if (!temp.getTimeDesc().isEmpty()){
+
+                    QwSopTempSetting2.Content.Setting setting3 = new QwSopTempSetting2.Content.Setting();
+                    setting3.setValue(temp.getTimeDesc().get(sorts.get()));
+                    setting3.setContentType("1");
+                    content3.setContent(JSON.toJSONString(setting3));
+
+                    qwSopTempContents.add(content3);
+
+                }
+
+
+                rules.setSorts(sorts.getAndIncrement());
+                if (rules.getSorts() == 0) {
+                    rules.setCourseType(0);
+                } else if (rules.getSorts() == 1) {
+                    rules.setCourseType(1);
+                } else {
+                    rules.setCourseType(4);
+                }
+                rules.setList(qwSopTempContents);
+                return rules;
+            }).collect(Collectors.toList());
+            day.getList().addAll(rulesList);
+            return day;
+        }).collect(Collectors.toList());
+        qwSopTempDayService.addOrUpdateBatch(collect);
+        List<QwSopTempRules> ruleList = collect.stream().flatMap(e -> e.getList().stream().peek(r -> r.setDayId(e.getId()))).collect(Collectors.toList());
+        qwSopTempRulesService.saveList(ruleList);
+        List<QwSopTempContent> contentList = ruleList.stream().flatMap(e -> e.getList().stream().peek(r -> {
+            r.setDayId(e.getDayId());
+            r.setRulesId(e.getId());
+        })).collect(Collectors.toList());
+        qwSopTempContentService.saveList(contentList);
+        SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("course.config");
+        CourseConfig courseConfig = JSON.parseObject(sysConfig.getConfigValue(), CourseConfig.class);
+        List<Long> videoIdList = PubFun.listToNewList(ruleList, QwSopTempRules::getVideoId);
+        Map<Long, Optional<BigDecimal>> redMap;
+        if (!videoIdList.isEmpty()) {
+            List<FsUserCourseVideoRedPackage> redPackageList = fsUserCourseVideoRedPackageService.listByCompanyIdAndVideoIds(temp.getCompanyId(), videoIdList);
+            redMap = redPackageList.stream().collect(Collectors.groupingBy(FsUserCourseVideoRedPackage::getVideoId, Collectors.mapping(FsUserCourseVideoRedPackage::getRedPacketMoney, Collectors.reducing((e1, e2) -> e1))));
+        } else {
+            redMap = new HashMap<>();
+        }
+
+        List<FsUserCourseVideoRedPackage> redPackage = ruleList.stream().filter(e -> e.getVideoId() != null && e.getSorts() == 0).map(e -> {
+            FsUserCourseVideoRedPackage red = new FsUserCourseVideoRedPackage();
+            red.setCompanyId(temp.getCompanyId());
+            red.setVideoId(e.getVideoId());
+            red.setRedPacketMoney(redMap.getOrDefault(e.getVideoId(), Optional.ofNullable(courseConfig.getRedPackageMoney())).orElse(BigDecimal.ZERO));
+            red.setRuleId(e.getId());
+            red.setDataType(3);
+            return red;
+        }).collect(Collectors.toList());
+        fsUserCourseVideoRedPackageService.batchSaveFsUserCourseVideoRedPackage(redPackage);
+    }
+
     @Override
     public List<QwSopTempRedPackageVo> redList(String id) {
         List<QwSopTempDay> dayList = qwSopTempRulesService.listByTempIdAll(id);
@@ -691,17 +828,14 @@ public class QwSopTempServiceImpl implements IQwSopTempService {
                 }
                 QwSopTempDay qwSopTempDay = first.get();
 
-                // 构造timeList timeDesc time
-                sopTemp.setTime(LocalTime.now());
-
                 sopTemp.setTimeList(tempRulesList.stream()
-                        .filter(e -> e.getTempId().equals(sopTemp.getId()) && Objects.equals(e.getIsOfficial(), "0")
+                        .filter(e -> e.getTempId().equals(sopTemp.getId())
                                 && Objects.equals(e.getDayId(), qwSopTempDay.getId())
                         ).map(QwSopTempRules::getTime)
                         .collect(Collectors.toList()));
 
                 sopTemp.setTimeDesc(contentList.stream().filter(e -> e.getTempId().equals(sopTemp.getId())
-                                && Objects.isNull(e.getIsBindUrl())
+                                && Objects.equals(1,e.getContentType())
                                 && Objects.equals(qwSopTempDay.getId(), e.getDayId())
                         )
                         .map(m -> JSONObject.parseObject(m.getContent()).getString("value")).collect(Collectors.toList()));
@@ -711,7 +845,7 @@ public class QwSopTempServiceImpl implements IQwSopTempService {
 
                 qwSopTempMapper.updateQwSopTemp(sopTemp);
 
-                createSopTempRules(sopTemp, addVideoList, fsUserCourse);
+                createSopTempRulesTwo(sopTemp, addVideoList, fsUserCourse);
 
                 // 更新排序
                 List<QwSopTempRules> newTempRulesList = qwSopTempRulesService.listByCourseIdAndTempId(courseId, teId);