Browse Source

商城代码,定时任务相关

chenguo 1 week ago
parent
commit
07008590e1
23 changed files with 1177 additions and 25 deletions
  1. 83 0
      fs-service/src/main/java/com/fs/company/constant/PaymentStatus.java
  2. 75 0
      fs-service/src/main/java/com/fs/company/domain/CompanyRechargeOrder.java
  3. 74 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyRechargeOrderMapper.java
  4. 16 0
      fs-service/src/main/java/com/fs/company/service/ICompanyRechargeOrderService.java
  5. 100 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyRechargeOrderServiceImpl.java
  6. 10 0
      fs-service/src/main/java/com/fs/core/config/WxPayProperties.java
  7. 2 0
      fs-service/src/main/java/com/fs/crm/service/ICrmCustomerService.java
  8. 28 0
      fs-service/src/main/java/com/fs/crm/service/impl/CrmCustomerServiceImpl.java
  9. 2 0
      fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java
  10. 3 0
      fs-service/src/main/java/com/fs/his/service/IFsUserService.java
  11. 41 0
      fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java
  12. 1 1
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderAuditLogScrm.java
  13. 1 1
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderAuditScrm.java
  14. 31 13
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  15. 2 0
      fs-service/src/main/java/com/fs/statis/service/FsStatisSalerWatchService.java
  16. 67 8
      fs-service/src/main/java/com/fs/statis/service/impl/FsStatisSalerWatchServiceImpl.java
  17. 19 0
      fs-service/src/main/java/com/fs/task/CrmTask.java
  18. 71 0
      fs-service/src/main/java/com/fs/task/ErpTask.java
  19. 19 0
      fs-service/src/main/java/com/fs/task/OrderTask.java
  20. 493 0
      fs-service/src/main/java/com/fs/task/StoreTask.java
  21. 18 0
      fs-service/src/main/java/com/fs/task/stats/FsStatsMemberDailyTask.java
  22. 19 0
      fs-service/src/main/java/com/fs/task/trafficlog/TrafficlogTask.java
  23. 2 2
      fs-user-app/src/main/resources/application.yml

+ 83 - 0
fs-service/src/main/java/com/fs/company/constant/PaymentStatus.java

@@ -0,0 +1,83 @@
+package com.fs.company.constant;
+
+import lombok.Getter;
+
+/**
+ * 支付状态枚举类
+ *
+ * 描述支付过程中可能的状态
+ */
+@Getter
+public enum PaymentStatus {
+
+    /**
+     * 支付创建,初始状态
+     */
+    CREATED(0, "创建"),
+
+    /**
+     * 支付处理中
+     */
+    PROCESSING(1, "处理中"),
+
+    /**
+     * 支付成功
+     */
+    SUCCESS(2, "支付成功"),
+
+    /**
+     * 支付失败
+     */
+    FAILED(3, "支付失败");
+
+    /**
+     * 状态码
+     * -- GETTER --
+     *  获取状态码
+     *
+     * @return 状态码
+
+     */
+    private final int code;
+
+    /**
+     * 状态描述
+     * -- GETTER --
+     *  获取状态描述
+     *
+     * @return 状态描述
+
+     */
+    private final String description;
+
+    /**
+     * 构造函数
+     *
+     * @param code 状态码
+     * @param description 状态描述
+     */
+    PaymentStatus(int code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    /**
+     * 根据状态码获取对应的枚举值
+     *
+     * @param code 状态码
+     * @return 对应的支付状态枚举,如果没找到则返回null
+     */
+    public static PaymentStatus getByCode(int code) {
+        for (PaymentStatus status : PaymentStatus.values()) {
+            if (status.getCode() == code) {
+                return status;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String toString() {
+        return code + ":" + description;
+    }
+}

+ 75 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyRechargeOrder.java

@@ -0,0 +1,75 @@
+package com.fs.company.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 公司充值订单表
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CompanyRechargeOrder {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    private String orderNo;
+
+    /**
+     * 支付平台交易号
+     */
+    private String transactionId;
+
+    /**
+     * 支付方式:1-微信 2-支付宝 3-银行卡 4-其他
+     */
+    private Integer payType;
+
+    /**
+     * 支付金额
+     */
+    private BigDecimal payAmount;
+
+    private Long companyId;
+
+    private Long userId;
+
+    /**
+     * 支付状态:0-创建 1-处理中 2-支付成功 3-支付失败
+     */
+    private Integer payStatus;
+
+    /**
+     * 支付时间
+     */
+    private LocalDateTime paymentTime;
+
+    /**
+     * 回调内容
+     */
+    private String callbackContent;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    private String qrLink;
+}

+ 74 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyRechargeOrderMapper.java

@@ -0,0 +1,74 @@
+package com.fs.company.mapper;
+
+import com.fs.company.domain.CompanyRechargeOrder;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * 公司充值订单表 Mapper
+ */
+@Mapper
+public interface CompanyRechargeOrderMapper {
+
+    /**
+     * 根据ID查询订单
+     */
+    @Select("SELECT * FROM company_recharge_order WHERE id = #{id}")
+    CompanyRechargeOrder selectById(Long id);
+
+    /**
+     * 根据订单号查询订单
+     */
+    @Select("SELECT * FROM company_recharge_order WHERE order_no = #{orderNo}")
+    CompanyRechargeOrder selectByOrderNo(String orderNo);
+
+    /**
+     * 根据交易号查询订单
+     */
+    @Select("SELECT * FROM company_recharge_order WHERE transaction_id = #{transactionId}")
+    CompanyRechargeOrder selectByTransactionId(String transactionId);
+
+    /**
+     * 查询所有订单
+     */
+    @Select("SELECT * FROM company_recharge_order")
+    List<CompanyRechargeOrder> selectAll();
+
+    /**
+     * 新增订单
+     */
+    @Insert("INSERT INTO company_recharge_order (order_no, transaction_id, pay_type, pay_amount, pay_status, payment_time, callback_content,company_id,user_id) " +
+            "VALUES (#{orderNo}, #{transactionId}, #{payType}, #{payAmount}, #{payStatus}, #{paymentTime}, #{callbackContent},#{companyId},#{userId})")
+    @Options(useGeneratedKeys = true, keyProperty = "id")
+    int insert(CompanyRechargeOrder order);
+
+    /**
+     * 更新订单
+     */
+    @Update("UPDATE company_recharge_order SET " +
+            "transaction_id = #{transactionId}, " +
+            "pay_type = #{payType}, " +
+            "pay_amount = #{payAmount}, " +
+            "pay_status = #{payStatus}, " +
+            "payment_time = #{paymentTime}, " +
+            "callback_content = #{callbackContent} " +
+            "WHERE order_no = #{orderNo}")
+    int updateByOrderNo(CompanyRechargeOrder order);
+
+    /**
+     * 更新订单支付状态
+     */
+    @Update("UPDATE company_recharge_order SET " +
+            "pay_status = #{payStatus}, " +
+            "payment_time = #{paymentTime}, " +
+            "transaction_id = #{transactionId}, " +
+            "callback_content = #{callbackContent} " +
+            "WHERE order_no = #{orderNo}")
+    int updatePayStatus(CompanyRechargeOrder order);
+
+    @Select("SELECT * FROM company_recharge_order " +
+            "WHERE pay_status = 1 " +
+            "AND create_time <= DATE_SUB(NOW(), INTERVAL 2 HOUR)")
+    List<CompanyRechargeOrder> queryOverdueOrder();
+}

+ 16 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyRechargeOrderService.java

@@ -0,0 +1,16 @@
+package com.fs.company.service;
+
+import com.fs.company.domain.CompanyRechargeOrder;
+
+import java.util.List;
+
+public interface ICompanyRechargeOrderService {
+
+    List<CompanyRechargeOrder> queryOverdueOrder();
+
+    void autoClosedOrder();
+
+    CompanyRechargeOrder createOrder(CompanyRechargeOrder order) throws Exception;
+
+    CompanyRechargeOrder queryOrder(String orderNo);
+}

+ 100 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyRechargeOrderServiceImpl.java

@@ -0,0 +1,100 @@
+package com.fs.company.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.common.utils.IpUtil;
+import com.fs.company.constant.PaymentStatus;
+import com.fs.company.domain.CompanyRechargeOrder;
+import com.fs.company.mapper.CompanyRechargeOrderMapper;
+import com.fs.company.service.ICompanyRechargeOrderService;
+import com.fs.company.util.OrderUtils;
+import com.fs.core.config.WxPayProperties;
+import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.service.WxPayService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class CompanyRechargeOrderServiceImpl implements ICompanyRechargeOrderService {
+    @Autowired
+    private CompanyRechargeOrderMapper companyRechargeOrderMapper;
+
+    @Autowired
+    private WxPayProperties wxPayProperties;
+
+    @Autowired
+    private WxPayService wxPayService;
+    @Override
+    public List<CompanyRechargeOrder> queryOverdueOrder() {
+        return companyRechargeOrderMapper.queryOverdueOrder();
+    }
+
+    /**
+     * 自动关闭超时订单号
+     */
+    @Override
+    public void autoClosedOrder(){
+        List<CompanyRechargeOrder> companyRechargeOrders = companyRechargeOrderMapper.queryOverdueOrder();
+        for (CompanyRechargeOrder order : companyRechargeOrders) {
+            order.setPayStatus(PaymentStatus.FAILED.getCode());
+            companyRechargeOrderMapper.updateByOrderNo(order);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
+    public CompanyRechargeOrder createOrder(CompanyRechargeOrder order) throws Exception{
+
+        WxPayConfig payConfig = new WxPayConfig();
+        payConfig.setAppId(wxPayProperties.getAppId());
+        payConfig.setMchId(wxPayProperties.getMchId());
+        payConfig.setMchKey(wxPayProperties.getMchKey());
+        payConfig.setPrivateKeyPath(wxPayProperties.getPrivateKeyPath());
+        payConfig.setPrivateCertPath(wxPayProperties.getPrivateCertPath());
+        payConfig.setCertSerialNo(wxPayProperties.getCertSerialNo());
+        payConfig.setUseSandboxEnv(false);
+        payConfig.setSignType(WxPayConstants.SignType.HMAC_SHA256);
+
+        wxPayService.setConfig(payConfig);
+
+        WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
+        String orderNo = OrderUtils.getOrderNo();
+        orderRequest.setBody("公司余额充值");
+        orderRequest.setOutTradeNo("recharge-"+orderNo);
+        orderRequest.setTotalFee(order.getPayAmount().multiply(BigDecimal.valueOf(100)).intValue());
+        orderRequest.setSpbillCreateIp(IpUtil.getLocalhostIp());
+        orderRequest.setNotifyUrl(wxPayProperties.getNativeNotifyUrl());
+        orderRequest.setTradeType(WxPayConstants.TradeType.NATIVE);
+        orderRequest.setProductId(String.valueOf(order.getId()));
+
+
+        WxPayNativeOrderResult wxOrder = wxPayService.createOrder(orderRequest);
+
+
+        order.setOrderNo(orderNo);
+        order.setPayType(1);
+        order.setPayStatus(1);
+        order.setCreateTime(LocalDateTime.now());
+        order.setCallbackContent(JSON.toJSONString(wxOrder));
+        order.setQrLink(wxOrder.getCodeUrl());
+
+        companyRechargeOrderMapper.insert(order);
+
+        return order;
+    }
+
+    @Override
+    public CompanyRechargeOrder queryOrder(String orderNo) {
+        return companyRechargeOrderMapper.selectByOrderNo(orderNo);
+    }
+
+
+}

+ 10 - 0
fs-service/src/main/java/com/fs/core/config/WxPayProperties.java

@@ -1,8 +1,10 @@
 package com.fs.core.config;
 
+import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @ConfigurationProperties(prefix = "wx.pay")
+@Data
 public class WxPayProperties {
   /**
    * 设置微信公众号或者小程序等的appid
@@ -36,6 +38,14 @@ public class WxPayProperties {
 
   private String notifyUrl;
 
+  private String privateKeyPath;
+
+  private String privateCertPath;
+
+  private String certSerialNo;
+
+  private String nativeNotifyUrl;
+
   public String getAppId() {
     return appId;
   }

+ 2 - 0
fs-service/src/main/java/com/fs/crm/service/ICrmCustomerService.java

@@ -161,4 +161,6 @@ public interface ICrmCustomerService
     List<CrmCustomerCycleStatisticsVO> selectCrmCustomerCycleStatisticsList(CrmCustomerStatisticsParam param);
 
     List<JSONObject> selectCrmCustomerCycleCounts(Map<String, Object> map);
+
+    void computePayMoney();
 }

+ 28 - 0
fs-service/src/main/java/com/fs/crm/service/impl/CrmCustomerServiceImpl.java

@@ -26,6 +26,8 @@ import com.fs.crm.param.*;
 import com.fs.crm.service.ICrmCustomerService;
 import com.fs.crm.service.ICrmMsgService;
 import com.fs.crm.vo.*;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.jpush.service.JpushService;
 import com.fs.qwApi.param.QwCustomerDetailParam;
 import com.fs.system.service.ISysDictDataService;
@@ -38,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 客户Service业务层处理
@@ -73,6 +76,9 @@ public class CrmCustomerServiceImpl extends ServiceImpl<CrmCustomerMapper, CrmCu
     private CrmIndexDataMapper crmIndexDataMapper;
     @Autowired
     private ISysDictTypeService dictTypeService;
+
+    @Autowired
+    private FsStoreOrderScrmMapper fsStoreOrderMapper;
     /**
      * 查询客户
      *
@@ -975,4 +981,26 @@ public class CrmCustomerServiceImpl extends ServiceImpl<CrmCustomerMapper, CrmCu
     public List<JSONObject> selectCrmCustomerCycleCounts(Map<String, Object> map) {
         return crmCustomerMapper.selectCrmCustomerCycleCounts(map);
     }
+
+    @Override
+    public void computePayMoney() {
+        //1.查询用户
+        CrmCustomer crmCustomer = new CrmCustomer();
+        crmCustomer.setIsDel(0);
+        List<CrmCustomer> crmCustomers = selectCrmCustomerList(crmCustomer);
+//        crmCustomers = crmCustomers.stream().filter(item -> item.getUserId() != null).collect(Collectors.toList());
+        List<Long> customerIds = crmCustomers.stream().map(CrmCustomer::getCustomerId).collect(Collectors.toList());
+        if (!customerIds.isEmpty()){
+            List<FsStoreOrderScrm> map = fsStoreOrderMapper.computePayMoney(customerIds);
+            if (map != null && !map.isEmpty()){
+                map.forEach(item ->{
+                    CrmCustomer addParam = new CrmCustomer();
+                    addParam.setCustomerId(item.getCustomerId());
+                    addParam.setPayMoney(item.getPayPrice());
+                    crmCustomerMapper.updateCrmCustomer(addParam);
+                });
+
+            }
+        }
+    }
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -350,4 +350,6 @@ public interface FsUserMapper
 
     Map<String, Long> countCourseDetailsNew(UserStatisticsCommonParam param);
 
+    @Select("select * from fs_user where user_id=#{userId} for update")
+    FsUser selectFsUserByIdForUpdate(Long userId);
 }

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

@@ -17,6 +17,7 @@ import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserFollowDoctorVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.qw.dto.FsUserTransferParamDTO;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
@@ -174,4 +175,6 @@ public interface IFsUserService
     ResponseResult<Boolean> becomeMember(@Valid FsUserCourseBeMemberParam param);
 
     FsUserPageListVO selectFsUserPageListVOByUserId(Long userId);
+
+    void addMoney(FsStoreOrderScrm order);
 }

+ 41 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -36,6 +36,7 @@ import com.fs.course.vo.newfs.FsCourseAnalysisVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.his.config.IntegralConfig;
 import com.fs.his.domain.FsUserAddress;
+import com.fs.his.domain.FsUserBill;
 import com.fs.his.domain.FsUserIntegralLogs;
 import com.fs.his.mapper.*;
 import com.fs.his.param.FsUserParam;
@@ -43,6 +44,11 @@ import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserFollowDoctorVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.domain.FsUserBillScrm;
+import com.fs.hisStore.enums.BillDetailEnum;
+import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
+import com.fs.hisStore.service.IFsUserBillScrmService;
 import com.fs.qw.cache.IQwExternalContactCacheService;
 import com.fs.qw.dto.FsUserTransferParamDTO;
 import com.fs.qw.param.QwFsUserParam;
@@ -70,6 +76,8 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import static com.fs.his.utils.PhoneUtil.encryptPhone;
+import static com.fs.hisStore.enums.BillDetailEnum.CATEGORY_1;
+import static com.fs.hisStore.enums.BillDetailEnum.CATEGORY_3;
 
 /**
  * 用户Service业务层处理
@@ -124,6 +132,11 @@ public class FsUserServiceImpl implements IFsUserService
     @Autowired
     private CompanyRoleMapper companyRoleMapper;
 
+    @Autowired
+    private IFsUserBillScrmService billService;
+    @Autowired
+    private FsStoreOrderScrmMapper storeOrderMapper;
+
 
     /**
      * 查询用户
@@ -1075,6 +1088,34 @@ public class FsUserServiceImpl implements IFsUserService
         return item;
     }
 
+    @Override
+    @Transactional
+    public void addMoney(FsStoreOrderScrm order) {
+        FsUserBillScrm map=new FsUserBillScrm();
+        map.setCategory(CATEGORY_3.getValue());
+        map.setBusinessId(order.getId().toString());
+        map.setBillType(1);
+        List<FsUserBillScrm> list=billService.selectFsUserBillList(map);
+        if(list!=null&&list.size()>0){
+            for(FsUserBillScrm bill:list){
+                FsUser tuiUser= fsUserMapper.selectFsUserByIdForUpdate(bill.getUserId());
+                if(tuiUser!=null){
+                    FsUser tuiUserMap=new FsUser();
+                    tuiUserMap.setUserId(tuiUser.getUserId());
+                    tuiUserMap.setNowMoney(tuiUser.getNowMoney().add(new BigDecimal(bill.getNumber())));
+                    tuiUserMap.setBrokeragePrice(tuiUser.getBrokeragePrice().subtract(new BigDecimal(bill.getNumber())));
+                    fsUserMapper.updateFsUser(tuiUserMap);
+                    billService.addBill(tuiUserMap.getUserId(), CATEGORY_3.getValue(),0, BillDetailEnum.TYPE_6.getDesc(),bill.getNumber().doubleValue(),tuiUserMap.getBrokeragePrice().doubleValue(),"订单分佣金",order.getId().toString(),bill.getTuiUserId());
+                    billService.addBill(tuiUserMap.getUserId(), CATEGORY_1.getValue(),1,BillDetailEnum.TYPE_5.getDesc(),bill.getNumber().doubleValue(),tuiUserMap.getNowMoney().doubleValue(),"订单分佣金",order.getId().toString(),bill.getTuiUserId());
+                }
+            }
+        }
+        FsStoreOrderScrm orderMap=new FsStoreOrderScrm();
+        orderMap.setId(order.getId());
+        orderMap.setTuiUserMoneyStatus(1);
+        storeOrderMapper.updateFsStoreOrder(orderMap);
+    }
+
 
     private FsUserStatisticsVO getUserStatistics(UserStatisticsCommonParam param) {
         FsUserStatisticsVO fsUserStatisticsVO = new FsUserStatisticsVO();

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderAuditLogScrm.java

@@ -7,7 +7,7 @@ import lombok.Data;
 
 import java.time.LocalDateTime;
 
-@TableName("fs_store_order_audit_log")
+@TableName("fs_store_order_audit_log_scrm")
 @Data
 public class FsStoreOrderAuditLogScrm {
     /**

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderAuditScrm.java

@@ -8,7 +8,7 @@ import lombok.Data;
 import java.time.LocalDateTime;
 
 @Data
-@TableName("fs_store_order_audit")
+@TableName("fs_store_order_audit_scrm")
 public class FsStoreOrderAuditScrm {
     /**
      * 主键ID

+ 31 - 13
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -36,6 +36,7 @@ import com.fs.erp.domain.*;
 import com.fs.erp.dto.*;
 import com.fs.erp.mapper.FsErpFinishPushMapper;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.his.config.FsSysConfig;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.hisStore.config.FsErpConfig;
 import com.fs.hisStore.dto.*;
@@ -209,6 +210,18 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
     @Qualifier("k9OrderScrmServiceImpl")
     private IErpOrderService k9OrderService;
 
+    @Autowired
+    @Qualifier("hzOMSErpOrderServiceImpl")
+    private IErpOrderService hzOMSOrderService;
+
+    @Autowired
+    @Qualifier("dfOrderServiceImpl")
+    private IErpOrderService dfOrderService;
+
+    @Autowired
+    @Qualifier("JSTErpOrderServiceImpl")
+    private IErpOrderService jSTOrderService;
+
     @Autowired
     private IFsStoreOrderAuditScrmService orderAuditService;
     @Autowired
@@ -1572,14 +1585,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
         payments.add(payment);
         if(order.getCompanyId()!=null){
 
-            FsExpressScrm express=expressService.selectFsExpressByOmsCode("SF");
+            FsExpressScrm express=expressService.selectFsExpressByOmsCode("HISSCRMSTORESF");
             erpOrder.setExpress_code(express.getOmsCode());
             order.setDeliveryName(express.getName());
             order.setDeliverySn(express.getCode());
 
         }
         else{
-            FsExpressScrm express=expressService.selectFsExpressByOmsCode("SF");
+            FsExpressScrm express=expressService.selectFsExpressByOmsCode("HISSCRMSTORESF");
             erpOrder.setExpress_code(express.getOmsCode());
             order.setDeliveryName(express.getName());
             order.setDeliverySn(express.getCode());
@@ -2694,21 +2707,26 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
         //判断是否开启erp
         IErpOrderService erpOrderService = null;
         FsErpConfig erpConfig = configUtil.getErpConfig();
+        FsSysConfig sysConfig = configUtil.getSysConfig();
         Integer erpOpen = erpConfig.getErpOpen();
         if (erpOpen != null && erpOpen == 1) {
             //判断erp类型
             Integer erpType = erpConfig.getErpType();
-            if (erpType != null) {
-                if (erpType == 1) {
-                    //管易
-                    erpOrderService = gyOrderService;
-                } else if (erpType == 2) {
-                    //旺店通
-                    erpOrderService = wdtOrderService;
-                } else if (erpType == 3) {
-                    //旺店通
-                    erpOrderService = k9OrderService;
-                }
+            if (erpType == 1) {
+                //管易
+                erpOrderService = gyOrderService;
+            } else if (erpType == 2) {
+                //旺店通
+                erpOrderService = wdtOrderService;
+            } else if (erpType == 3) {
+                //瀚智OMS
+                erpOrderService = hzOMSOrderService;
+            } else if (erpType == 4) {
+                //代服
+                erpOrderService =  dfOrderService;
+            } else if (erpType == 5){
+                //聚水潭
+                erpOrderService =  jSTOrderService;
             }
         }
         return erpOrderService;

+ 2 - 0
fs-service/src/main/java/com/fs/statis/service/FsStatisSalerWatchService.java

@@ -65,6 +65,8 @@ public interface FsStatisSalerWatchService {
      */
     void writeData(String date);
 
+    void writeData();
+
     /**
      * 计算每天的数据
      */

+ 67 - 8
fs-service/src/main/java/com/fs/statis/service/impl/FsStatisSalerWatchServiceImpl.java

@@ -1,7 +1,5 @@
 package com.fs.statis.service.impl;
 
-import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.cache.ICompanyUserCacheService;
@@ -12,21 +10,16 @@ import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.qw.cache.QwSopCacheService;
 import com.fs.qw.cache.QwUserCacheService;
 import com.fs.qw.domain.QwUser;
-import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwUserMapper;
-import com.fs.sop.domain.QwSop;
 import com.fs.sop.domain.QwSopLogs;
 import com.fs.sop.domain.SopUserLogs;
-import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.mapper.*;
 import com.fs.statis.domain.*;
 import com.fs.statis.dto.StatsWatchLogPageListDTO;
 import com.fs.statis.mapper.FsStatisSalerWatchMapper;
 import com.fs.statis.mapper.FsStatisTempFsuserMapper;
 import com.fs.statis.mapper.FsStatisTempParamMapper;
-import com.fs.statis.mapper.FsTempPeriodQueryMapper ;
 import com.fs.statis.service.FsStatisSalerWatchService;
-import com.github.pagehelper.PageHelper;
 import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -36,7 +29,6 @@ import org.springframework.stereotype.Service;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 /**
@@ -374,6 +366,73 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
         fsStatisTempParamMapper.clearSop();
     }
 
+    @Override
+    public void writeData() {
+        // 统计销售看课情况
+        // 获取前一天的时间
+        List<CompanyUser> companyUserList = this.companyUserMapper.selectAllCompanyUserList();
+
+        List<FsStatisSalerWatch> writeData = new ArrayList<>();
+
+        LocalDate previousDay = LocalDate.now().minusDays(1);
+        for (CompanyUser companyUser : companyUserList) {
+
+            if(companyUser.getCompanyId() == null) {
+                log.info("销售{} 对应公司id {} 为空!",companyUser.getUserId(),companyUser.getCompanyId());
+                continue;
+            }
+            // 找到销售关联的 企微账号
+            List<String> qwUserIdList = qwUserMapper.findQwUserIdListByCompanyUserId(companyUser.getUserId());
+            if(CollectionUtils.isEmpty(qwUserIdList)){
+                log.info("当前销售 {} 没有关联企微账号!",companyUser.getUserId());
+                continue;
+            }
+
+            // 确定当前销售对应的sop任务的执行记录
+            List<String> periodList = sopUserLogsMapper.selectSopUserLogsByQwUserIds(qwUserIdList);
+
+            if(CollectionUtils.isEmpty(periodList)){
+                log.info("当前销售 {} 没有相关的SOP营期!", companyUser.getUserId());
+                continue;
+            }
+
+            for (String periodId : periodList) {
+                // 去sop记录表找对应的SOP发送记录,记录数作为营期人数
+                Long periodCount = qwSopLogsMapper.selectQwSopLogsCountByQwUserId(qwUserIdList,periodId,previousDay);
+                // 再去course_watch_log找对应的销售观看记录作为已报名数
+                Long registerCount = companyUserMapper.queryCompanyUserWatchCount(companyUser.getUserId(),previousDay);
+                Long completedCount = companyUserMapper.queryCompanyUserWatchCountCompleted(companyUser.getUserId(),previousDay);
+                // 当前销售当天的看课中断数量
+                Long interruptCount = companyUserMapper.queryCompanyUserInterruptCount(companyUser.getUserId(),previousDay);
+
+                FsStatisSalerWatch fsStatisSalerWatch = new FsStatisSalerWatch();
+                fsStatisSalerWatch.setDeptId(companyUser.getDeptId());
+                fsStatisSalerWatch.setCompanyUserId(companyUser.getUserId());
+                fsStatisSalerWatch.setTrainCampNum(periodCount);
+                fsStatisSalerWatch.setNotRegisteredNum(Math.max(0, periodCount - registerCount));
+                fsStatisSalerWatch.setRegisteredNum(registerCount);
+                fsStatisSalerWatch.setCompletedNum(completedCount);
+                fsStatisSalerWatch.setInterruptNum(interruptCount);
+
+                // 修复比率计算
+                float regRate = (periodCount > 0) ? (float) registerCount / periodCount : 0.0f;
+                float finishedRate = (registerCount > 0) ? (float) completedCount / registerCount : 0.0f;
+
+                fsStatisSalerWatch.setRegRate(regRate);
+                fsStatisSalerWatch.setFinishedRate(finishedRate);
+                fsStatisSalerWatch.setDataDate(previousDay);
+
+                fsStatisSalerWatch.setPeriodId(periodId);
+
+                writeData.add(fsStatisSalerWatch);
+            }
+        }
+
+        if(CollectionUtils.isNotEmpty(writeData)){
+            fsStatisSalerWatchMapper.batchSave(writeData);
+        }
+    }
+
     // 根据企微号查询SOP营期
     public List<SopUserLogs> getPeriodListByQwUserIds(List<SopUserLogs> allSopUserLogs,
                                                  Map<String, List<SopUserLogs>> qwUserIdToIdsMap

+ 19 - 0
fs-service/src/main/java/com/fs/task/CrmTask.java

@@ -0,0 +1,19 @@
+package com.fs.task;
+
+import com.fs.crm.service.ICrmCustomerService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("crmTask")
+@Slf4j
+public class CrmTask {
+    @Autowired
+    private ICrmCustomerService crmCustomerService;
+    /**
+     * 汇总crm订单成交总额
+     */
+    public void computePayMoney(){
+        crmCustomerService.computePayMoney();
+    }
+}

+ 71 - 0
fs-service/src/main/java/com/fs/task/ErpTask.java

@@ -0,0 +1,71 @@
+package com.fs.task;
+
+import com.fs.erp.domain.ErpOrder;
+import com.fs.erp.domain.FsErpFinishPush;
+import com.fs.erp.dto.ErpOrderResponse;
+import com.fs.erp.mapper.FsErpFinishPushMapper;
+import com.fs.erp.service.IErpOrderService;
+import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.exception.ExceptionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service("erpTask")
+@Slf4j
+public class ErpTask {
+
+    @Autowired
+    private FsErpFinishPushMapper fsErpFinishPushMapper;
+    @Autowired
+    private IErpOrderService erpOrderService;
+
+    @Autowired
+    private IFsStoreOrderScrmService fsStoreOrderService;
+
+
+    /**
+     * 推送完成订单到ERP
+     */
+    public void pushFinishOrderToErp(){
+        List<FsErpFinishPush> fsErpFinishPushes = fsErpFinishPushMapper.queryPenddingOrder();
+        for (FsErpFinishPush fsErpFinishPush : fsErpFinishPushes) {
+            FsStoreOrderScrm fsStoreOrder = fsStoreOrderService.selectFsStoreOrderById(fsErpFinishPush.getOrderId());
+
+            try {
+
+                ErpOrder erpOrder = fsStoreOrderService.getErpOrder(fsStoreOrder);
+
+                ErpOrderResponse erpOrderResponse = erpOrderService.finishOrder(erpOrder);
+
+                fsErpFinishPush.setParams(erpOrderResponse.getRequestRawData());
+                fsErpFinishPush.setResult(erpOrderResponse.getResponseRawData());
+                fsErpFinishPush.setUpdateTime(new Date());
+
+                if(erpOrderResponse.getSuccess()!= null && erpOrderResponse.getSuccess()){
+                    fsErpFinishPush.setTaskStatus(1);
+
+                    log.error("推送完成订单到ERP成功! 订单号: {}",fsErpFinishPush.getOrderId());
+                } else {
+                    fsErpFinishPush.setTaskStatus(2);
+                    fsErpFinishPush.setRetryCount(fsErpFinishPush.getRetryCount()+1);
+                    log.error("推送完成订单到ERP失败! 订单号: {}",fsErpFinishPush.getOrderId());
+                }
+            } catch (Throwable e) {
+                fsErpFinishPush.setRetryCount(fsErpFinishPush.getRetryCount()+1);
+                fsErpFinishPush.setErrorMessage(ExceptionUtils.getStackTrace(e));
+                fsErpFinishPush.setTaskStatus(2);
+                log.error("订单推送失败!原因: {}", ExceptionUtils.getStackTrace(e),e);
+            }
+
+
+            fsErpFinishPushMapper.updateById(fsErpFinishPush);
+        }
+
+    }
+
+}

+ 19 - 0
fs-service/src/main/java/com/fs/task/OrderTask.java

@@ -0,0 +1,19 @@
+package com.fs.task;
+
+import com.fs.company.service.ICompanyRechargeOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component("orderTask")
+public class OrderTask {
+    @Autowired
+    private ICompanyRechargeOrderService companyRechargeOrderService;
+
+
+    /**
+     * 自动关闭超时订单
+     */
+    public void autoCloseTimeOutOrder(){
+        companyRechargeOrderService.autoClosedOrder();
+    }
+}

+ 493 - 0
fs-service/src/main/java/com/fs/task/StoreTask.java

@@ -0,0 +1,493 @@
+package com.fs.task;
+
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.vo.RedPacketMoneyVO;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
+import com.fs.erp.domain.ErpDeliverys;
+import com.fs.erp.domain.ErpGoods;
+import com.fs.erp.domain.ErpOrderQuery;
+import com.fs.erp.dto.ErpGoodsQueryRequert;
+import com.fs.erp.dto.ErpGoodsQueryResponse;
+import com.fs.erp.dto.ErpOrderQueryRequert;
+import com.fs.erp.dto.ErpOrderQueryResponse;
+import com.fs.erp.service.IErpGoodsService;
+import com.fs.erp.service.IErpOrderService;
+import com.fs.his.dto.ExpressInfoDTO;
+import com.fs.his.service.IFsExpressService;
+import com.fs.his.service.IFsUserService;
+import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.config.FsErpConfig;
+import com.fs.hisStore.domain.*;
+import com.fs.hisStore.enums.ShipperCodeEnum;
+import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
+import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
+import com.fs.hisStore.mapper.FsStorePaymentScrmMapper;
+import com.fs.hisStore.mapper.FsStoreProductAttrValueScrmMapper;
+import com.fs.hisStore.param.*;
+import com.fs.hisStore.service.*;
+import com.fs.pay.pay.dto.OrderQueryDTO;
+import com.fs.pay.service.IPayService;
+import com.fs.store.config.StoreConfig;
+import com.fs.system.service.ISysConfigService;
+import com.fs.ybPay.domain.OrderResult;
+import org.apache.commons.lang3.StringUtils;
+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 java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
+
+/**
+ * 定时任务调度测试
+ *
+ * @author fs
+ */
+@Component("storeTask")
+public class StoreTask
+{
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private RedisCache redisCache;
+    @Autowired
+    private IFsStoreOrderScrmService orderService;
+    @Autowired
+    private IFsStoreCouponUserScrmService couponUserService;
+    @Autowired
+    private IFsStoreAfterSalesScrmService afterSalesService;
+    @Autowired
+    private IFsUserService userService;
+
+
+    @Autowired
+    private IPayService ybPayService;
+    @Autowired
+    private FsStoreOrderScrmMapper fsStoreOrderMapper;
+
+    @Autowired
+    private IFsStoreOrderScrmService fsStoreOrderService;
+
+    @Autowired
+    private IFsStoreOrderItemScrmService storeOrderItemService;
+
+    @Autowired
+    private FsStorePaymentScrmMapper fsStorePaymentMapper;
+
+
+    @Autowired
+    private IErpGoodsService erpGoodsService;
+    @Autowired
+    private ISysConfigService configService;
+    @Autowired
+    private FsStoreProductAttrValueScrmMapper fsStoreProductAttrValueMapper;
+    @Autowired
+    private FsStorePaymentScrmMapper paymentMapper;
+    @Autowired
+    private IFsStorePaymentScrmService fsStorePaymentService;
+    @Autowired
+    private ICompanyService companyService;
+
+
+    @Autowired
+    private IFsExpressService expressService;
+
+    @Autowired
+    private FsStoreOrderItemScrmMapper itemMapper;
+
+    @Autowired
+    private IFsStoreAfterSalesScrmService fsStoreAfterSalesService;
+
+    @Autowired
+    @Qualifier("erpOrderServiceImpl")
+    private IErpOrderService gyOrderService;
+
+    @Autowired
+    @Qualifier("wdtErpOrderServiceImpl")
+    private IErpOrderService wdtOrderService;
+
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
+
+    @Autowired
+    private ConfigUtil configUtil;
+
+    @Autowired
+    private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
+
+
+    @Autowired
+    IErpOrderService erpOrderService;
+
+    //@Autowired
+    //private IFsUserWatchCourseStatisticsService fsUserWatchCourseStatisticsService;
+
+    //@Autowired
+    //private IFsUserWatchStatisticsService fsUserWatchStatisticsService;
+
+    //@Autowired
+    //private IFsUserOnlineStateService fsUserOnlineStateService;
+
+    public void PushErp() throws ParseException {
+        List<Long> ids;
+        // 开启审核
+        if (getAuditSwitch()) {
+            ids = fsStoreOrderMapper.selectFsStoreOrderNoCreateOmsAndReviewed();
+        } else {
+            ids = fsStoreOrderMapper.selectFsStoreOrderNoCreateOms();
+        }
+        for (Long id : ids) {
+            fsStoreOrderService.createOmsOrder(id);
+        }
+    }
+
+    /**
+     * 获取是否需要订单审核
+     * @return boolean
+     */
+    private boolean getAuditSwitch() {
+        try {
+            String json = configService.selectConfigByKey("store.config");
+            StoreConfig config = JSONUtil.toBean(json,StoreConfig.class);
+            return config.getAuditSwitch() == 1;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    public void redPacketSubMoney() throws Exception
+    {
+        List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogByCompany();
+        for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
+            companyService.subtractCompanyMoney(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId());
+        }
+    }
+
+    public void redPacketAddMoney() throws Exception
+    {
+        List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseAddRedPacketLogByCompany();
+        for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
+            companyService.addRedPacketCompanyMoney(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId());
+        }
+    }
+
+    //每5分钟执行一次
+    public void deliveryOp()
+    {
+        List<FsStoreOrderScrm> list = fsStoreOrderMapper.selectUpdateExpress();
+        for (FsStoreOrderScrm order : list){
+            ErpOrderQueryRequert request = new ErpOrderQueryRequert();
+            request.setCode(order.getExtendOrderId());
+            IErpOrderService erpOrderService = getErpOrderService();
+            ErpOrderQueryResponse response = erpOrderService.getOrder(request);
+            if(response.getOrders()!=null&&response.getOrders().size()>0){
+                for(ErpOrderQuery orderQuery : response.getOrders()){
+                    if(orderQuery.getDeliverys()!=null&&orderQuery.getDeliverys().size()>0){
+                        for(ErpDeliverys delivery:orderQuery.getDeliverys()){
+                            if(delivery.getDelivery()&&StringUtils.isNotEmpty(delivery.getMail_no())){
+                                //更新商订单状态 删除REDIS
+                                orderService.deliveryOrder(order.getOrderCode(),delivery.getMail_no(),delivery.getExpress_code(),delivery.getExpress_name());
+                                redisCache.deleteObject(DELIVERY+":"+order.getExtendOrderId());
+                            }
+                        }
+
+                    }
+                }
+
+            }
+
+        }
+
+    }
+
+
+    public void storeProdUpdateCostPrice()
+    {
+        String json=configService.selectConfigByKey("store.config");
+        StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
+
+        List<FsStoreProductAttrValueScrm> values = fsStoreProductAttrValueMapper.selectFsStoreProductAttrValueList(new FsStoreProductAttrValueScrm());
+        for (FsStoreProductAttrValueScrm value : values) {
+            ErpGoodsQueryRequert query = new ErpGoodsQueryRequert();
+            query.setCode(value.getBarCode());
+            ErpGoodsQueryResponse goods = erpGoodsService.getGoods(query);
+            List<ErpGoods> items = goods.getItems();
+
+            if (items!=null&&items.size()>0){
+                ErpGoods erpGoods = items.get(0);
+                BigDecimal salesPrice = erpGoods.getSales_price();
+                if (salesPrice!=null&&salesPrice.compareTo(BigDecimal.ZERO) != 0){
+                    BigDecimal divide = salesPrice.multiply(new BigDecimal(config.getSalesPriceRate())).divide(new BigDecimal("100"));
+                    System.out.println("代理价格"+divide);
+                    System.out.println("成本价"+salesPrice);
+                    FsStoreProductAttrValueScrm va = new FsStoreProductAttrValueScrm();
+                    va.setCost(salesPrice);
+                    va.setAgentPrice(divide);
+                    va.setId(value.getId());
+                    fsStoreProductAttrValueMapper.updateFsStoreProductAttrValue(va);
+                }
+            }
+            System.out.println(goods);
+        }
+
+
+
+    }
+    public void couponOp()
+    {
+        couponUserService.updateFsCouponByExpire();
+
+    }
+
+
+    //退款自动处理 24小时未审核自动审核通过 每小时执行一次
+    public void refundOp()
+    {
+        //获取所有退款申请
+        List<FsStoreAfterSalesScrm> list=afterSalesService.selectFsStoreAfterSalesByDoAudit();
+        if(list!=null){
+            for(FsStoreAfterSalesScrm afterSales:list){
+                //仅退款
+                if(afterSales.getServiceType().equals(0)){
+                    FsStoreAfterSalesAudit1Param audit1Param=new FsStoreAfterSalesAudit1Param();
+                    audit1Param.setSalesId(afterSales.getId());
+                    audit1Param.setOperator("平台");
+                    afterSalesService.audit1(audit1Param);
+                }
+            }
+        }
+    }
+
+
+    //每天执行一次
+    public void userMoneyOp()
+    {
+        List<FsStoreOrderScrm> list=orderService.selectFsStoreOrderListByFinish7Day();
+        if(list!=null){
+            for(FsStoreOrderScrm order:list){
+                userService.addMoney(order);
+            }
+        }
+    }
+
+
+    //每30秒执行一次
+    public void orderItemSyncOp(){
+        List<FsStoreOrderScrm> list = fsStoreOrderService.selectFsStoreOrderItemJson();
+        for(FsStoreOrderScrm storeOrder:list){
+            FsStoreOrderItemScrm parmOrderItem=new FsStoreOrderItemScrm();
+            parmOrderItem.setOrderId(storeOrder.getId());
+            List<FsStoreOrderItemScrm> listOrderItem=storeOrderItemService.selectFsStoreOrderItemList(parmOrderItem);
+            if(listOrderItem.size()>0){
+                String itemJson= JSONUtil.toJsonStr(listOrderItem);
+                storeOrder.setItemJson(itemJson);
+                fsStoreOrderMapper.uploadItemJson(storeOrder);
+            }
+        }
+    }
+
+    public void returnDeliveryId(){
+        IErpOrderService erpOrderService = getErpOrderService();
+        List<String> list = fsStoreOrderMapper.selectErpCode();
+        for (String s : list) {
+            ErpOrderQueryRequert request = new ErpOrderQueryRequert();
+            request.setCode(s);
+            ErpOrderQueryResponse response = erpOrderService.getOrder(request);
+            if(response.getOrders()!=null&&response.getOrders().size()>0){
+                    for(ErpOrderQuery orderQuery : response.getOrders()){
+                        if(orderQuery.getDeliverys()!=null&&orderQuery.getDeliverys().size()>0){
+                            for(ErpDeliverys delivery:orderQuery.getDeliverys()){
+                                if(delivery.getDelivery()&&StringUtils.isNotEmpty(delivery.getMail_no())){
+                                    FsStoreOrderScrm order = new FsStoreOrderScrm();
+                                    order.setExtendOrderId(s);
+                                    order.setDeliveryId(delivery.getMail_no());
+                                    order.setStatus(2);
+                                    fsStoreOrderMapper.updateDelivery(order);
+                                }
+                            }
+                        }
+                    }
+                }
+
+
+        }
+
+    }
+
+    public void changeStatus(){
+        List<Long> list  = fsStoreOrderMapper.selectOrderId();
+        for (Long orderId : list){
+            FsStoreOrderScrm order = fsStoreOrderMapper.selectFsStoreOrderById(orderId);
+            String lastFourNumber = "";
+            if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
+                lastFourNumber = order.getUserPhone();
+                if (lastFourNumber.length() == 11) {
+                    lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+                }
+            }
+            ExpressInfoDTO dto=expressService.getExpressInfo(order.getOrderCode(),order.getDeliverySn(),order.getDeliveryId(),lastFourNumber);
+            FsStoreOrderScrm map=new FsStoreOrderScrm();
+            map.setDeliveryStatus(Integer.parseInt(dto.getState()));
+            map.setId(order.getId());
+            map.setDeliveryType(dto.getStateEx());
+            fsStoreOrderMapper.updateFsStoreOrder(map);
+        }
+    }
+
+
+
+    public void subCompanyMoney(){
+        List<Long> list = paymentMapper.selectPaymentIds();
+        for (Long paymentId : list){
+            FsStorePaymentScrm payment=fsStorePaymentService.selectFsStorePaymentById(paymentId);
+            if(payment.getCompanyId()!=null&&payment.getCompanyId()>0){
+                companyService.subCompanyPaymentMoney(payment);
+            }
+        }
+    }
+
+
+    public void updateOrderItem() throws ParseException {
+        List <Long> ids = itemMapper.selectOrderIdByNoErp();
+        for (Long id:ids){
+            fsStoreOrderService.createOmsOrder(id);
+        }
+    }
+
+
+
+    //每天执行一次
+    public void syncExpress()
+    {
+        List<Long> ids =fsStoreOrderMapper.selectSyncExpressIds();
+
+        for (Long id : ids) {
+            FsStoreOrderExpressEditParam param =new FsStoreOrderExpressEditParam();
+            param.setOrderId(id);
+            fsStoreOrderService.syncExpress(param);
+        }
+
+    }
+
+    public void returnPayStatus() {
+        List<String> ids =fsStorePaymentMapper.selectPayStatusIds();
+        for (String id : ids) {
+            OrderQueryDTO o = new OrderQueryDTO();
+            o.setUpOrderId(id);
+            OrderResult orderResult = ybPayService.getOrder(o);
+            if ("0".equals(orderResult.getState())){
+                String[] order=orderResult.getLowOrderId().split("-");
+                if(orderResult.getStatus().equals("100")){
+                    switch (order[0]) {
+                        case "store":
+                            orderService.payConfirm(1,null,order[1], o.getUpOrderId(),orderResult.getBankTrxId(),orderResult.getBankOrderId());
+                        case "store_remain":
+                            orderService.payRemainConfirm( order[1], o.getUpOrderId(),orderResult.getBankTrxId(),orderResult.getBankOrderId());
+                        case "payment":
+                            fsStorePaymentService.payConfirm(order[1],o.getUpOrderId(),orderResult.getBankTrxId(),orderResult.getBankOrderId());
+                    }
+
+                }
+            }
+
+        }
+
+    }
+
+    public void AddTuiMoney()
+    {
+        List<Long> ids =fsStoreOrderMapper.selectAddTuiMoney();
+        for (Long id : ids) {
+            FsStoreOrderAddTuiMoneyParam param = new FsStoreOrderAddTuiMoneyParam();
+            param.setOrderId(id);
+            fsStoreOrderService.addTuiMoney(param);
+        }
+
+    }
+
+
+    public void selectPayMoneyLessOne(){
+        List<FsStoreOrderScrm> list = fsStoreOrderMapper.selectPayMoneyLessOne();
+        for (FsStoreOrderScrm order : list){
+            FsStoreAfterSalesParam param = new FsStoreAfterSalesParam();
+            param.setOrderCode(order.getOrderCode());
+            param.setServiceType(0);
+            param.setRefundAmount(order.getPayMoney());
+            param.setReasons("超时未处理,自动申请退款");
+            List<FsStoreAfterSalesProductParam> productParams = new ArrayList<>();
+            List <FsStoreOrderItemScrm> items = fsStoreOrderMapper.selectOrderItem(order.getId());
+            for (FsStoreOrderItemScrm item : items){
+                FsStoreAfterSalesProductParam param1 = new FsStoreAfterSalesProductParam();
+                param1.setProductId(item.getProductId());
+                param1.setNum(item.getNum());
+                productParams.add(param1);
+            }
+            param.setProductList(productParams);
+            fsStoreAfterSalesService.autoApplyForAfterSales(order.getUserId(),param);
+        }
+    }
+
+    public  void deleteCustomer(){
+
+    }
+
+    private IErpOrderService getErpOrderService(){
+        //判断是否开启erp
+        IErpOrderService erpOrderService = null;
+        FsErpConfig erpConfig = configUtil.getErpConfig();
+        Integer erpOpen = erpConfig.getErpOpen();
+        if (erpOpen != null && erpOpen == 1) {
+            //判断erp类型
+            Integer erpType = erpConfig.getErpType();
+            if (erpType != null) {
+                if (erpType == 1) {
+                    //管易
+                    erpOrderService = gyOrderService;
+                } else if (erpType == 2) {
+                    //旺店通
+                    erpOrderService = wdtOrderService;
+                } else if (erpType == 3) {
+                    //旺店通
+                    erpOrderService = k9OrderService;
+                }
+            }
+        }
+        return erpOrderService;
+    }
+
+    /**
+     * 添加看课汇总统计
+     */
+    /*public void insertWatchStatistics(){
+        *//***************************************进入营期会员看课汇总统计定时任务****************************************//*
+        fsUserWatchStatisticsService.insertStatistics();
+        *//***************************************营期会员看课汇总统计定时任务结束***************************************//*
+    }*/
+
+    /**
+     * 添加看课明细统计
+     */
+    /*public void insertWatchCourseStatistics(){
+        *//***************************************进入营期会员看课明细统计定时任务*******************************//*
+        fsUserWatchCourseStatisticsService.insertWatchCourseStatistics();
+        *//***************************************进入营期会员看课明细统计定时任务结束**********************************************//*
+    }*/
+
+    /**
+     * 定时查询未上线的用户
+     */
+    /*public void insertUserNotOnline(){
+        fsUserOnlineStateService.insertUserNotOnline();
+    }*/
+
+}

+ 18 - 0
fs-service/src/main/java/com/fs/task/stats/FsStatsMemberDailyTask.java

@@ -0,0 +1,18 @@
+package com.fs.task.stats;
+
+import com.fs.statis.service.IFsStatsMemberDailyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class FsStatsMemberDailyTask {
+
+    @Autowired
+    private IFsStatsMemberDailyService fsStatsMemberDailyService;
+
+    public void refreshMemberDailyData() {
+        fsStatsMemberDailyService.refreshMemberDailyData();
+    }
+}

+ 19 - 0
fs-service/src/main/java/com/fs/task/trafficlog/TrafficlogTask.java

@@ -0,0 +1,19 @@
+package com.fs.task.trafficlog;
+
+import com.fs.course.service.IFsCourseTrafficLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("trafficlogTask")
+@Slf4j
+public class TrafficlogTask {
+    @Autowired
+    private IFsCourseTrafficLogService fsCourseTrafficLogService;
+    /**
+     * 红包流量统计
+     */
+    /*public void sumTrafficlog(){
+        fsCourseTrafficLogService.sumTrafficlog();
+    }*/
+}

+ 2 - 2
fs-user-app/src/main/resources/application.yml

@@ -6,10 +6,10 @@ server:
 # Spring配置
 spring:
   profiles:
-#    active: dev
+    active: dev
 #    active: druid-jzzx
 #    active: druid-yzt
 #    active: druid-hdt
 #    active: druid-sxjz
 #    active: druid-yzt
-    active: druid-fcky-test
+#    active: druid-fcky-test