Prechádzať zdrojové kódy

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_scrm_java

caoliqin 1 mesiac pred
rodič
commit
ae9ebd3cad
33 zmenil súbory, kde vykonal 890 pridanie a 57 odobranie
  1. 15 0
      fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java
  2. 29 0
      fs-admin/src/main/java/com/fs/task/period/PeriodTask.java
  3. 55 3
      fs-common/src/main/java/com/fs/common/config/FSSysConfig.java
  4. 10 1
      fs-common/src/main/java/com/fs/common/utils/date/DateUtil.java
  5. 12 1
      fs-service-system/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java
  6. 15 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodDaysMapper.java
  7. 16 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java
  8. 8 0
      fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodDaysService.java
  9. 13 1
      fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodService.java
  10. 7 6
      fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseQuestionBankServiceImpl.java
  11. 47 9
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java
  12. 63 7
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodServiceImpl.java
  13. 19 0
      fs-service-system/src/main/java/com/fs/course/vo/UpdateCourseTimeVo.java
  14. 29 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KbStockRequest.java
  15. 48 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KbStockResponse.java
  16. 33 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderD1Data.java
  17. 67 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderData.java
  18. 12 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderRequest.java
  19. 10 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderResponse.java
  20. 20 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosRefundOrderD1Data.java
  21. 25 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosRefundOrderData.java
  22. 12 0
      fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosRefundOrderRequest.java
  23. 15 0
      fs-service-system/src/main/java/com/fs/kingbos/service/K9OrderService.java
  24. 19 0
      fs-service-system/src/main/java/com/fs/kingbos/service/K9StockService.java
  25. 152 0
      fs-service-system/src/main/java/com/fs/kingbos/service/impl/K9OrderServiceImpl.java
  26. 49 0
      fs-service-system/src/main/java/com/fs/kingbos/service/impl/K9StockServiceImpl.java
  27. 12 0
      fs-service-system/src/main/java/com/fs/kingbos/util/SignUtil.java
  28. 26 0
      fs-service-system/src/main/java/com/fs/kingbos/util/UrlUtil.java
  29. 3 1
      fs-service-system/src/main/java/com/fs/sop/service/impl/CompanySopRoleServiceImpl.java
  30. 25 27
      fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreCartServiceImpl.java
  31. 7 0
      fs-service-system/src/main/resources/application-config.yml
  32. 16 0
      fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodDaysMapper.xml
  33. 1 1
      fs-service-system/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml

+ 15 - 0
fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java

@@ -19,6 +19,7 @@ import com.fs.course.service.IFsUserCourseVideoRedPackageService;
 import com.fs.course.vo.FsPeriodCountVO;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 import com.fs.course.vo.PeriodRedPacketVO;
+import com.fs.course.vo.UpdateCourseTimeVo;
 import com.fs.his.vo.OptionsVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -142,6 +143,14 @@ public class FsUserCoursePeriodController extends BaseController {
     public R addCourse(@RequestBody FsUserCoursePeriodDays entity){
         return fsUserCoursePeriodDaysService.addCourse(entity);
     }
+    @PostMapping("/updateCourseTime")
+    public R updateCourseTime(@RequestBody UpdateCourseTimeVo vo){
+        return fsUserCoursePeriodDaysService.updateCourseTime(vo);
+    }
+    @PostMapping("/updateCourseDate")
+    public R updateCourseDate(@RequestBody UpdateCourseTimeVo vo){
+        return fsUserCoursePeriodDaysService.updateCourseDate(vo);
+    }
     @PostMapping("/updateListCourseData")
     public R updateListCourseData(@RequestBody List<FsUserCoursePeriodDays> entity){
         return fsUserCoursePeriodDaysService.updateListCourseData(entity);
@@ -217,5 +226,11 @@ public class FsUserCoursePeriodController extends BaseController {
         return fsUserCoursePeriodDaysService.periodCourseMove(id, targetId);
     }
 
+    @ApiOperation("结束营期")
+    @PostMapping("/closePeriod")
+    public R closePeriod(Long id) {
+        fsUserCoursePeriodService.closePeriod(id);
+        return R.ok();
+    }
 
 }

+ 29 - 0
fs-admin/src/main/java/com/fs/task/period/PeriodTask.java

@@ -0,0 +1,29 @@
+package com.fs.task.period;
+
+import com.fs.course.service.IFsUserCoursePeriodDaysService;
+import com.fs.course.service.IFsUserCoursePeriodService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component("periodTask")
+public class PeriodTask {
+
+    @Autowired
+    private IFsUserCoursePeriodService userCoursePeriodService;
+    @Autowired
+    private IFsUserCoursePeriodDaysService userCoursePeriodDaysService;
+
+    /**
+     * 更新营期状态
+     */
+    public void refreshPeriod() {
+        userCoursePeriodService.changePeriodStatus();
+    }
+
+    /**
+     * 更新营期课程状态
+     */
+    public void refreshPeriodDays() {
+        userCoursePeriodDaysService.changePeriodCourseStatus();
+    }
+}

+ 55 - 3
fs-common/src/main/java/com/fs/common/config/FSSysConfig.java

@@ -1,14 +1,12 @@
 package com.fs.common.config;
 
 
-import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
 /**
  * 读取项目相关配置
  *
-
  */
 @Component
 @ConfigurationProperties(prefix = "fs-config")
@@ -43,7 +41,13 @@ public class FSSysConfig
     String payGateWayUrl;
     String payNotifyUrl;
     String refundNotifyUrl;
-
+    //金博erp
+    private String kingbosan;//账套名称
+    private String kingbosSecret;//金博密钥
+    private String kingbosUrl;//金博地址
+    private String corgid;//机构编码
+    private String cwarehouseCode;
+    private String cwarehouseName;
 
     public String getKdnId() {
         return kdnId;
@@ -236,4 +240,52 @@ public class FSSysConfig
     public void setRefundNotifyUrl(String refundNotifyUrl) {
         this.refundNotifyUrl = refundNotifyUrl;
     }
+
+    public String getKingbosan() {
+        return kingbosan;
+    }
+
+    public void setKingbosan(String kingbosan) {
+        this.kingbosan = kingbosan;
+    }
+
+    public String getCorgid() {
+        return corgid;
+    }
+
+    public void setCorgid(String corgid) {
+        this.corgid = corgid;
+    }
+
+    public String getKingbosUrl() {
+        return kingbosUrl;
+    }
+
+    public void setKingbosUrl(String kingbosUrl) {
+        this.kingbosUrl = kingbosUrl;
+    }
+
+    public String getKingbosSecret() {
+        return kingbosSecret;
+    }
+
+    public void setKingbosSecret(String kingbosSecret) {
+        this.kingbosSecret = kingbosSecret;
+    }
+
+    public String getCwarehouseCode() {
+        return cwarehouseCode;
+    }
+
+    public void setCwarehouseCode(String cwarehouseCode) {
+        this.cwarehouseCode = cwarehouseCode;
+    }
+
+    public String getCwarehouseName() {
+        return cwarehouseName;
+    }
+
+    public void setCwarehouseName(String cwarehouseName) {
+        this.cwarehouseName = cwarehouseName;
+    }
 }

+ 10 - 1
fs-common/src/main/java/com/fs/common/utils/date/DateUtil.java

@@ -493,5 +493,14 @@ public final class DateUtil {
 		return itemEdate;
 	}
 
-
+	public static boolean isWithinRangeSafe(LocalDate targetDate, LocalDate startDate, LocalDate endDate) {
+		LocalDate actualStart = startDate.isBefore(endDate) ? startDate : endDate;
+		LocalDate actualEnd = startDate.isBefore(endDate) ? endDate : startDate;
+		return !targetDate.isBefore(actualStart) && !targetDate.isAfter(actualEnd);
+	}
+	public static boolean isWithinRangeSafe(LocalDateTime targetDate, LocalDateTime startDate, LocalDateTime endDate) {
+		LocalDateTime actualStart = startDate.isBefore(endDate) ? startDate : endDate;
+		LocalDateTime actualEnd = startDate.isBefore(endDate) ? endDate : startDate;
+		return !targetDate.isBefore(actualStart) && !targetDate.isAfter(actualEnd);
+	}
 }

+ 12 - 1
fs-service-system/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java

@@ -3,6 +3,7 @@ package com.fs.course.domain;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.Date;
 import java.util.List;
 
@@ -47,11 +48,15 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime startDateTime;
-
     /** 结束时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime endDateTime;
+    /** 领取红包时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "领取红包时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime lastJoinTime;
+
 
     /** 课程ID */
     @Excel(name = "课程ID")
@@ -75,4 +80,10 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     private String courseName;
     @TableField(exist = false)
     private String videoName;
+    @TableField(exist = false)
+    private LocalTime startTime;
+    @TableField(exist = false)
+    private LocalTime endTime1;
+    @TableField(exist = false)
+    private LocalTime joinTime;
 }

+ 15 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodDaysMapper.java

@@ -5,6 +5,8 @@ import com.fs.course.domain.FsUserCoursePeriodDays;
 import com.fs.his.vo.OptionsVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -83,4 +85,17 @@ public interface FsUserCoursePeriodDaysMapper extends BaseMapper<FsUserCoursePer
      */
     void batchUpdateCoursePeriodDays(List<FsUserCoursePeriodDays> fsUserCoursePeriodDaysList);
 
+    /**
+     * 开启课程
+     * @param date  日期
+     * @param time  时间
+     */
+    void startPeriodCourse(@Param("date") LocalDate date, @Param("time") LocalTime time);
+
+    /**
+     * 关闭课程
+     * @param date  日期
+     * @param time  时间
+     */
+    void endPeriodCourse(@Param("date") LocalDate date, @Param("time") LocalTime time);
 }

+ 16 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java

@@ -6,7 +6,9 @@ import com.fs.course.vo.FsUserCoursePeriodVO;
 import com.fs.course.vo.PeriodRedPacketVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -111,4 +113,18 @@ public interface FsUserCoursePeriodMapper
      * @return  count
      */
     int countPeriodByCampIds(@Param("params") Map<String, Object> params);
+
+    /**
+     * 开营
+     * @param now   当前日期
+     */
+    @Update("update fs_user_course_period set period_status = 2, update_time = now() where period_status = 1 and period_starting_time >= #{now}")
+    void startPeriod(@Param("now") LocalDate now);
+
+    /**
+     * 关营
+     * @param now   当前日期
+     */
+    @Update("update fs_user_course_period set period_status = 3, update_time = now() where period_status = 2 and period_end_time < #{now}")
+    void endPeriod(@Param("now") LocalDate now);
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodDaysService.java

@@ -7,6 +7,7 @@ import com.fs.course.param.CompanyRedPacketParam;
 import com.fs.course.param.PeriodCountParam;
 import com.fs.course.vo.FsPeriodCountVO;
 import com.fs.course.vo.PeriodRedPacketVO;
+import com.fs.course.vo.UpdateCourseTimeVo;
 import com.fs.his.vo.OptionsVO;
 
 import java.util.List;
@@ -109,4 +110,11 @@ public interface IFsUserCoursePeriodDaysService extends IService<FsUserCoursePer
      */
     R periodCourseMove(Long id, Long targetId);
 
+    R updateCourseTime(UpdateCourseTimeVo vo);
+
+    R updateCourseDate(UpdateCourseTimeVo vo);
+    /**
+     * 更新营期课程状态
+     */
+    void changePeriodCourseStatus();
 }

+ 13 - 1
fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodService.java

@@ -1,9 +1,10 @@
 package com.fs.course.service;
 
-import java.util.List;
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 
+import java.util.List;
+
 /**
  * 会员营期Service接口
  *
@@ -66,4 +67,15 @@ public interface IFsUserCoursePeriodService
      * @return vo
      */
     List<FsUserCoursePeriodVO> selectFsUserCoursePeriodPage(FsUserCoursePeriod fsUserCoursePeriod);
+
+    /**
+     * 结束营期
+     * @param id    营期ID
+     */
+    void closePeriod(Long id);
+
+    /**
+     * 更新营期状态
+     */
+    void changePeriodStatus();
 }

+ 7 - 6
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseQuestionBankServiceImpl.java

@@ -148,7 +148,8 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
         //日志id
         Long logId = null;
 
-        FsCourseAnswerLogs rightLog = new FsCourseAnswerLogs();
+        new FsCourseAnswerLogs();
+        FsCourseAnswerLogs rightLog;
         //判断短链类型
         if (param.getLinkType()!=null&&param.getLinkType()==1){
             rightLog = courseAnswerLogsMapper.selectRightLogByCourseVideo(param.getVideoId(), param.getUserId(),null);
@@ -174,11 +175,11 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
 
             rightLog = courseAnswerLogsMapper.selectRightLogByCourseVideo(param.getVideoId(), param.getUserId(), param.getQwUserId());
             if (rightLog != null) {
-                if (log.getRewardType() != null) {
-                    return R.error("该课程已答题完成,不可重复答题");
-                } else {
-                    return R.ok("答题成功");
-                }
+//                if (log.getRewardType() != null) {
+//                    return R.error("该课程已答题完成,不可重复答题");
+//                } else {
+//                }
+                return R.ok("该课程已答题完成,不可重复答题");
             }
             errorCount = courseAnswerLogsMapper.selectErrorCountByCourseVideo(param.getVideoId(), param.getUserId(),param.getQwUserId());
         }

+ 47 - 9
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java

@@ -1,14 +1,5 @@
 package com.fs.course.service.impl;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Wrapper;
-import java.time.LocalDate;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.core.domain.R;
@@ -24,6 +15,7 @@ import com.fs.course.param.PeriodCountParam;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
 import com.fs.course.vo.FsPeriodCountVO;
 import com.fs.course.vo.PeriodRedPacketVO;
+import com.fs.course.vo.UpdateCourseTimeVo;
 import com.fs.course.vo.newfs.FsCourseAnalysisCountVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.store.mapper.FsUserMapper;
@@ -32,9 +24,14 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -153,6 +150,9 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
             day.setLesson(dayList.size() + i.getAndIncrement());
             day.setDayDate(period.getPeriodStartingTime().plusDays(day.getLesson()));
             day.setCourseId(entity.getCourseId());
+            day.setStartDateTime(LocalDateTime.of(day.getDayDate(), entity.getStartTime()));
+            day.setEndDateTime(LocalDateTime.of(day.getDayDate(), entity.getEndTime1()));
+            day.setLastJoinTime(LocalDateTime.of(day.getDayDate(), entity.getJoinTime()));
             day.setVideoId(e);
             day.setCreateTime(new Date());
             // 默认开启今天及以后的两天
@@ -271,6 +271,44 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
         return R.ok();
     }
 
+    @Override
+    public R updateCourseTime(UpdateCourseTimeVo vo) {
+        List<FsUserCoursePeriodDays> list = fsUserCoursePeriodDaysMapper.selectBatchIds(vo.getIds());
+        list.forEach(day -> {
+            day.setStartDateTime(LocalDateTime.of(day.getDayDate(), vo.getStartTime()));
+            day.setEndDateTime(LocalDateTime.of(day.getDayDate(), vo.getEndTime1()));
+            day.setLastJoinTime(LocalDateTime.of(day.getDayDate(), vo.getJoinTime()));
+            fsUserCoursePeriodDaysMapper.updateById(day);
+        });
+        return R.ok();
+    }
+
+    @Override
+    public R updateCourseDate(UpdateCourseTimeVo vo) {
+        FsUserCoursePeriodDays day = getById(vo.getId());
+        FsUserCoursePeriod period = fsUserCoursePeriodMapper.selectFsUserCoursePeriodById(day.getPeriodId());
+        if(!DateUtil.isWithinRangeSafe(vo.getDayDate(), period.getPeriodStartingTime(), period.getPeriodEndTime())) return R.error("时间不在营期范围内");
+        day.setDayDate(vo.getDayDate());
+        day.setStartDateTime(LocalDateTime.of(day.getDayDate(), day.getStartDateTime().toLocalTime()));
+        day.setEndDateTime(LocalDateTime.of(day.getDayDate(), day.getEndDateTime().toLocalTime()));
+        day.setLastJoinTime(LocalDateTime.of(day.getDayDate(), day.getLastJoinTime().toLocalTime()));
+        updateById(day);
+        return R.ok();
+    }
+
+    /**
+     * 更新营期课程状态
+     */
+    @Transactional(rollbackFor = RuntimeException.class)
+    @Override
+    public void changePeriodCourseStatus() {
+        // 开启
+        fsUserCoursePeriodDaysMapper.startPeriodCourse(LocalDate.now(), LocalTime.now());
+
+        // 关闭
+        fsUserCoursePeriodDaysMapper.endPeriodCourse(LocalDate.now(), LocalTime.now());
+    }
+
     private static FsCourseAnalysisCountVO getCourseAnalysisCountVO(FsUserCoursePeriodDays v, Map<Long, FsCourseAnalysisCountVO> courseMap, Map<Long, FsCourseAnalysisCountVO> redPacketMap, Map<Long, FsCourseAnalysisCountVO> answerMap) {
         FsCourseAnalysisCountVO countVO = new FsCourseAnalysisCountVO();
         FsCourseAnalysisCountVO courseVO = courseMap.getOrDefault(v.getVideoId(), countVO);

+ 63 - 7
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodServiceImpl.java

@@ -1,15 +1,23 @@
 package com.fs.course.service.impl;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.List;
-import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.common.exception.ServiceException;
+import com.fs.course.domain.FsUserCoursePeriod;
+import com.fs.course.domain.FsUserCoursePeriodDays;
+import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
+import com.fs.course.mapper.FsUserCoursePeriodMapper;
+import com.fs.course.service.IFsUserCoursePeriodService;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.course.mapper.FsUserCoursePeriodMapper;
-import com.fs.course.domain.FsUserCoursePeriod;
-import com.fs.course.service.IFsUserCoursePeriodService;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 会员营期Service业务层处理
@@ -22,6 +30,8 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
 {
     @Autowired
     private FsUserCoursePeriodMapper fsUserCoursePeriodMapper;
+    @Resource
+    private FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
 
     /**
      * 查询会员营期
@@ -109,4 +119,50 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
     public List<FsUserCoursePeriodVO> selectFsUserCoursePeriodPage(FsUserCoursePeriod fsUserCoursePeriod) {
         return fsUserCoursePeriodMapper.selectFsUserCoursePeriodPage(fsUserCoursePeriod);
     }
+
+    /**
+     * 结束营期
+     * @param id    营期ID
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void closePeriod(Long id) {
+        // 修改营期结束时间
+        FsUserCoursePeriod fsUserCoursePeriod = fsUserCoursePeriodMapper.selectFsUserCoursePeriodById(id);
+        if (Objects.isNull(fsUserCoursePeriod)) {
+            throw new ServiceException("结束营期失败:营期不存在");
+        }
+
+        if (fsUserCoursePeriod.getPeriodStatus() == 1) {
+            throw new ServiceException("结束营期失败:营期未开始不能进行结束操作!");
+        }
+
+        if (fsUserCoursePeriod.getPeriodStatus() == 3) {
+            throw new ServiceException("结束营期失败:营期已结束不能进行结束操作!");
+        }
+
+        fsUserCoursePeriod.setPeriodEndTime(LocalDate.now());
+        fsUserCoursePeriodMapper.updateFsUserCoursePeriod(fsUserCoursePeriod);
+
+        // 修改大于当前时间的课程状态
+        Wrapper<FsUserCoursePeriodDays> updateWrapper = Wrappers.<FsUserCoursePeriodDays>lambdaUpdate()
+        .set(FsUserCoursePeriodDays::getStatus, 2)
+        .eq(FsUserCoursePeriodDays::getPeriodId, fsUserCoursePeriod.getPeriodId())
+        .eq(FsUserCoursePeriodDays::getStatus, 0)
+        .gt(FsUserCoursePeriodDays::getDayDate, LocalDate.now());
+        fsUserCoursePeriodDaysMapper.update(null, updateWrapper);
+    }
+
+    /**
+     * 更新营期状态
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changePeriodStatus() {
+        // 开营
+        fsUserCoursePeriodMapper.startPeriod(LocalDate.now());
+
+        // 关营
+        fsUserCoursePeriodMapper.endPeriod(LocalDate.now());
+    }
 }

+ 19 - 0
fs-service-system/src/main/java/com/fs/course/vo/UpdateCourseTimeVo.java

@@ -0,0 +1,19 @@
+package com.fs.course.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.List;
+
+@Data
+public class UpdateCourseTimeVo {
+
+    private List<Long> ids;
+    private Long id;
+    private LocalTime startTime;
+    private LocalTime endTime1;
+    private LocalTime joinTime;
+    private LocalDate dayDate;
+}

+ 29 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KbStockRequest.java

@@ -0,0 +1,29 @@
+package com.fs.kingbos.domian;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class KbStockRequest {
+
+    /**
+     * 单据ID
+     */
+    @JSONField(name = "key", ordinal = 1)
+    @Builder.Default
+    private String key = "GoodStock";
+
+    /**
+     * 仓库编码
+     */
+    @JSONField(name = "ckid", ordinal = 2)
+    private String stockCode;
+
+    /**
+     * 商品编码 【注:不传值,默认查询对应仓库所有商品库存;传值查询对应商品库存。传值格式为:商品编码+英文逗号。如:123,456,789】
+     */
+    @JSONField(name = "cgoodsid", ordinal = 3)
+    private String goodsCode;
+}

+ 48 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KbStockResponse.java

@@ -0,0 +1,48 @@
+package com.fs.kingbos.domian;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class KbStockResponse {
+
+    /**
+     * true:请求成功;false:请求失败;
+     */
+    @JSONField(name = "IsSuccess")
+    private Boolean success;
+
+    /**
+     * 提示消息
+     */
+    @JSONField(name = "errmsg")
+    private String msg;
+
+    /**
+     * 返回数据
+     */
+    @JSONField(name = "data")
+    private String data;
+
+    /**
+     * 库存
+     */
+    private Integer stock;
+
+    public Integer getStock() {
+        int stocks = 0;
+        JSONArray dataArray = JSON.parseArray(this.data);
+        for (int i = 0; i < dataArray.size(); i++) {
+            JSONObject base = dataArray.getJSONObject(i);
+            for (Object item : base.getJSONArray("base")) {
+                JSONObject json = (JSONObject) item;
+                stocks += json.getIntValue("fqty");
+            }
+        }
+
+        return stocks;
+    }
+}

+ 33 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderD1Data.java

@@ -0,0 +1,33 @@
+package com.fs.kingbos.domian;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class KingbosOrderD1Data {
+    // OMS发货单号
+    private String cdo_id;
+    // OMS订单号
+    private String co_id;
+    // 药品编码
+    private String csku_id;
+    // ERP药品编码
+    private String cgoodsid;
+    // 药品名称
+    private String cname;
+    // 规格代码
+    private String cshop_sku_id;
+    // 数量
+    private BigDecimal iqty;
+    // 单价
+    private BigDecimal fprice;
+    // 总金额
+    private BigDecimal famount;
+    // 订单来源平台
+    private String cordersource;
+    // 是否退款
+    private Integer isreturn;
+    // 优惠金额
+    private BigDecimal fpromoamount;
+}

+ 67 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderData.java

@@ -0,0 +1,67 @@
+package com.fs.kingbos.domian;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 金博订单实体  data
+ */
+@Data
+public class KingbosOrderData {
+    // 订单来源
+    private String cordersource;
+    // 订单下单时间
+    private Date dorder_date;
+    // 店铺买家编号
+    private String cshop_buyer_id;
+    // 平台类型
+    private String cplatformtype;
+    // 平台店铺编号
+    private String cshop_id;
+    // 平台店铺名称
+    private String cshop_name;
+    // 平台订单号
+    private String cso_id;
+    // OMS订单号
+    private String co_id;
+    // OMS发货单号
+    private String cdo_id;
+    // 应付金额
+    private BigDecimal fpay_amount;
+    // 已付金额
+    private BigDecimal fpaid_amount;
+    // 运费
+    private BigDecimal ffreight;
+    // 优惠金额
+    private BigDecimal ffree_amount;
+    // 订单状态
+    private String cstatus;
+    // 物流成本
+    private BigDecimal fpostcost;
+    // 最后更新时间
+    private Date dmodified;
+    // 收件人(省)
+    private String creceiver_state;
+    // 收件人(城市)
+    private String creceiver_city;
+    // 收件人(区)
+    private String creceiver_district;
+    // 收件人(详细地址)
+    private String creceiver_address;
+    // 收件人(名称)
+    private String creceiver_name;
+    // 收件人(电话)
+    private String creceiver_mobile;
+    // 快递单号
+    private String cexpress_no;
+    // 快递公司代码
+    private String cexpress_code;
+    // 快递公司名称
+    private String cexpress_name;
+    // 仓库代码
+    private String cwarehouse_code;
+    // 仓库名称
+    private String cwarehouse_name;
+}

+ 12 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderRequest.java

@@ -0,0 +1,12 @@
+package com.fs.kingbos.domian;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class KingbosOrderRequest {
+    private String key;//单据ID
+    private KingbosOrderData data; //主表
+    private List<KingbosOrderD1Data> d1_data; //D1表
+}

+ 10 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosOrderResponse.java

@@ -0,0 +1,10 @@
+package com.fs.kingbos.domian;
+
+import lombok.Data;
+
+@Data
+public class KingbosOrderResponse {
+    private Boolean isSuccess; //true:请求成功;false:请求失败;
+    private String cbilid; //平台单号
+    private String errmsg;  //错误信息
+}

+ 20 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosRefundOrderD1Data.java

@@ -0,0 +1,20 @@
+package com.fs.kingbos.domian;
+
+import cn.hutool.core.annotation.Alias;
+import lombok.Data;
+
+@Data
+public class KingbosRefundOrderD1Data {
+
+    /**
+     * 平台订单来源
+     */
+    @Alias("cordersource")
+    private String corderSource;
+
+    /**
+     * OMS售后单号
+     */
+    @Alias("cas_id")
+    private String casId;
+}

+ 25 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosRefundOrderData.java

@@ -0,0 +1,25 @@
+package com.fs.kingbos.domian;
+
+import cn.hutool.core.annotation.Alias;
+import lombok.Data;
+
+@Data
+public class KingbosRefundOrderData {
+    /**
+     * 平台订单来源
+     */
+    @Alias("cordersource")
+    private String corderSource;
+
+    /**
+     * OMS售后单号
+     */
+    @Alias("cas_id")
+    private String casId;
+
+    /**
+     * OMS订单号
+     */
+    @Alias("co_id")
+    private String coId;
+}

+ 12 - 0
fs-service-system/src/main/java/com/fs/kingbos/domian/KingbosRefundOrderRequest.java

@@ -0,0 +1,12 @@
+package com.fs.kingbos.domian;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class KingbosRefundOrderRequest {
+    private String key;//单据ID
+    private KingbosRefundOrderData data; //主表
+    private List<KingbosRefundOrderD1Data> d1_data; //D1表
+}

+ 15 - 0
fs-service-system/src/main/java/com/fs/kingbos/service/K9OrderService.java

@@ -0,0 +1,15 @@
+package com.fs.kingbos.service;
+
+import com.fs.kingbos.domian.KingbosOrderRequest;
+import com.fs.kingbos.domian.KingbosOrderResponse;
+import com.fs.kingbos.domian.KingbosRefundOrderRequest;
+
+import java.text.ParseException;
+
+public interface K9OrderService {
+    KingbosOrderResponse addOrder(KingbosOrderRequest request);
+
+    KingbosOrderResponse refundOrder(KingbosRefundOrderRequest request);
+
+    void createOmsOrder(Long orderId) throws ParseException;
+}

+ 19 - 0
fs-service-system/src/main/java/com/fs/kingbos/service/K9StockService.java

@@ -0,0 +1,19 @@
+package com.fs.kingbos.service;
+
+import com.fs.common.exception.ServiceException;
+import com.fs.kingbos.domian.KbStockRequest;
+import com.fs.kingbos.domian.KbStockResponse;
+
+/**
+ * 库存服务
+ */
+public interface K9StockService {
+
+    /**
+     * 查看库存
+     * @param request 入参
+     * @return  KbStockResponse
+     * @throws ServiceException 异常
+     */
+    KbStockResponse getStock(KbStockRequest request) throws ServiceException;
+}

+ 152 - 0
fs-service-system/src/main/java/com/fs/kingbos/service/impl/K9OrderServiceImpl.java

@@ -0,0 +1,152 @@
+package com.fs.kingbos.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.fs.common.config.FSSysConfig;
+import com.fs.common.utils.StringUtils;
+import com.fs.kingbos.domian.*;
+import com.fs.kingbos.service.K9OrderService;
+import com.fs.kingbos.util.SignUtil;
+import com.fs.kingbos.util.UrlUtil;
+import com.fs.store.domain.FsStoreOrder;
+import com.fs.store.domain.FsStoreOrderItem;
+import com.fs.store.dto.FsStoreCartDTO;
+import com.fs.store.mapper.FsStoreOrderMapper;
+import com.fs.store.mapper.FsStoreProductMapper;
+import com.fs.store.service.IFsStoreOrderItemService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class K9OrderServiceImpl implements K9OrderService {
+    public final static Logger logger = LoggerFactory.getLogger(K9OrderServiceImpl.class);
+    @Autowired
+    FSSysConfig sysConfig;
+    @Autowired
+    private FsStoreOrderMapper fsStoreOrderMapper;
+    @Autowired
+    private IFsStoreOrderItemService storeOrderItemService;
+    @Autowired
+    private FsStoreProductMapper productMapper;
+    @Override
+    public KingbosOrderResponse addOrder(KingbosOrderRequest request) {
+        JSONObject param = JSONUtil.createObj();
+        param.set("key", "OL");
+        param.set("data", request.getData());
+        param.set("d1_data", request.getD1_data());
+        String timeStep = System.currentTimeMillis() + "";
+        String sign = SignUtil.sign(param.toString(),sysConfig.getKingbosSecret(), sysConfig.getKingbosan(), timeStep);
+        String url = UrlUtil.getUrl(sysConfig.getKingbosUrl(),sign, timeStep);
+        String json = param.toString();
+        String result = HttpUtil.post(url, json);
+        logger.info("zyp \n【金博网络订单】:"+result);
+        KingbosOrderResponse response = JSONUtil.toBean(result, KingbosOrderResponse.class);
+        return response;
+    }
+
+
+    @Override
+    public KingbosOrderResponse refundOrder(KingbosRefundOrderRequest request) {
+        JSONObject param = JSONUtil.createObj();
+        param.set("key", "WR");
+        param.set("data", request.getData());
+        param.set("d1_data", request.getD1_data());
+        String timeStep = System.currentTimeMillis() + "";
+        String sign = SignUtil.sign(param.toString(),sysConfig.getKingbosSecret(), sysConfig.getKingbosan(), timeStep);
+        String url = UrlUtil.getUrl(sysConfig.getKingbosUrl(),sign, timeStep);
+        String result = HttpUtil.post(url, param.toString());
+        logger.info("zyp \n【金博网络退货单】:"+result);
+        KingbosOrderResponse response = JSONUtil.toBean(result, KingbosOrderResponse.class);
+        return response;
+    }
+
+
+    @Override
+    @Transactional
+    public void createOmsOrder(Long orderId) throws ParseException {
+        FsStoreOrder order=fsStoreOrderMapper.selectFsStoreOrderById(orderId);
+        if(StringUtils.isEmpty(order.getExtendOrderId())&&order.getStatus()!=1){
+            return;
+        }
+        //组装金博data
+        KingbosOrderData data = new KingbosOrderData();
+        data.setCordersource("中康未来智慧药房");
+        data.setDorder_date(order.getCreateTime());
+        data.setCshop_buyer_id("zkwlzhyf100");//传固定值不可变
+        data.setCplatformtype("zkwlzhyfminiapp");
+        data.setCshop_id("zkwlzhyf2024");//中康未来智慧药房
+        data.setCshop_name("中康未来智慧药房");
+        data.setCso_id(order.getOrderCode());
+        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        data.setCo_id(orderSn);
+        data.setCdo_id(orderSn);
+        data.setFpay_amount(order.getPayPrice());
+        data.setFpaid_amount(order.getPayMoney());
+        data.setFfreight(order.getTotalPostage());
+        data.setFfree_amount(order.getCouponPrice());
+        data.setCstatus("待发货");
+        data.setFpostcost(BigDecimal.ZERO);
+        data.setDmodified(new Date());
+        String[] address=order.getUserAddress().split(" ");
+        data.setCreceiver_state(address[0]);
+        data.setCreceiver_city(address[1]);
+        data.setCreceiver_district(address[2]);
+        //处理地址多空隔问题
+        if(address.length>3){
+            StringBuffer addrs=new StringBuffer();
+            for(int i=3;i<address.length;i++){
+                addrs.append(address[i]);
+            }
+            data.setCreceiver_address(addrs.toString());
+        }
+        else if(address.length==3){
+            data.setCreceiver_address(address[2]);
+        }
+        //处理地址字符问题
+        data.setCreceiver_address(data.getCreceiver_address().replace("+","加"));
+        data.setCreceiver_address(data.getCreceiver_address().replace("\n",""));
+        data.setCreceiver_name(order.getRealName());
+        data.setCreceiver_mobile(order.getUserPhone());
+        data.setCexpress_name(order.getDeliveryName());
+        data.setCexpress_code("SF");
+        data.setCwarehouse_code(sysConfig.getCwarehouseCode());
+        data.setCwarehouse_name(sysConfig.getCwarehouseName());
+        List<KingbosOrderD1Data> d1Datas = new ArrayList<>();
+        FsStoreOrderItem itemMap=new FsStoreOrderItem();
+        itemMap.setOrderId(order.getId());
+        List<FsStoreOrderItem> orderItems=storeOrderItemService.selectFsStoreOrderItemList(itemMap);
+        for (FsStoreOrderItem orderItem: orderItems){
+            FsStoreCartDTO cartDTO= JSONUtil.toBean(orderItem.getJsonInfo(),FsStoreCartDTO.class);
+            KingbosOrderD1Data item = new KingbosOrderD1Data();
+            item.setCdo_id(data.getCdo_id());
+            item.setCo_id(data.getCo_id());
+            item.setCsku_id(cartDTO.getBarCode());
+            item.setCgoodsid(cartDTO.getBarCode());
+            item.setCname(cartDTO.getProductName());
+            item.setCshop_sku_id(cartDTO.getBarCode());
+            item.setIqty(new BigDecimal(orderItem.getNum()));
+            item.setFprice(cartDTO.getPrice());
+            item.setFamount(new BigDecimal(orderItem.getNum()).multiply(cartDTO.getPrice()));
+            item.setCordersource(data.getCordersource());
+            item.setIsreturn(0);
+            item.setFpromoamount(BigDecimal.ZERO);
+            d1Datas.add(item);
+        }
+        KingbosOrderRequest request = new KingbosOrderRequest();
+        request.setData(data);
+        request.setD1_data(d1Datas);
+        KingbosOrderResponse response = this.addOrder(request);
+        logger.info("\n【金博网络订单】: addOrder  res:{}", response);
+    }
+}

+ 49 - 0
fs-service-system/src/main/java/com/fs/kingbos/service/impl/K9StockServiceImpl.java

@@ -0,0 +1,49 @@
+package com.fs.kingbos.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fs.common.config.FSSysConfig;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.http.HttpUtils;
+import com.fs.kingbos.domian.KbStockRequest;
+import com.fs.kingbos.domian.KbStockResponse;
+import com.fs.kingbos.service.K9StockService;
+import com.fs.kingbos.util.SignUtil;
+import com.fs.kingbos.util.UrlUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+@AllArgsConstructor
+public class K9StockServiceImpl implements K9StockService {
+
+    private final FSSysConfig sysConfig;
+
+    /**
+     * 查看库存
+     * @param request 参数
+     * @return  KbStockResponse
+     * @throws ServiceException 异常
+     */
+    @Override
+    public KbStockResponse getStock(KbStockRequest request) throws ServiceException {
+        // 构造参数
+        String timeStep = System.currentTimeMillis() + "";
+        if (StringUtils.isBlank(request.getStockCode())) {
+            request.setStockCode(sysConfig.getCwarehouseCode());
+        }
+        String json = JSON.toJSONString(request);
+        String sign = SignUtil.sign(json, sysConfig.getKingbosSecret(), sysConfig.getKingbosan(), timeStep);
+        String url = sysConfig.getKingbosUrl().replace("do=k9save", "do=k9view");
+        url = UrlUtil.getUrl(url, sign, timeStep);
+
+        // 发送请求
+        log.info("\n【金博网络】: getStock send request url: {}", url);
+        String result = HttpUtils.doPost(url, json);
+        log.info("\n【金博网络】: getStock res:{}", result);
+        return JSONObject.parseObject(result, KbStockResponse.class);
+    }
+}

+ 12 - 0
fs-service-system/src/main/java/com/fs/kingbos/util/SignUtil.java

@@ -0,0 +1,12 @@
+package com.fs.kingbos.util;
+
+
+import com.fs.ad.yk.utils.Md5Util;
+
+public class SignUtil {
+
+    public static String sign(String data, String secret, String name, String timestamp) {
+        String enValue = "kingbos" + secret + timestamp + name + "zy01" + data;
+        return Md5Util.MD5(enValue);
+    }
+}

+ 26 - 0
fs-service-system/src/main/java/com/fs/kingbos/util/UrlUtil.java

@@ -0,0 +1,26 @@
+package com.fs.kingbos.util;
+
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+
+public class UrlUtil {
+    public static String getUrl(String url, String sign, String timeStep) {
+        String updatedUrl = updateURLParams(url, "timestep", timeStep);
+        updatedUrl = updateURLParams(updatedUrl, "sign", sign);
+        return updatedUrl;
+    }
+
+    public static String updateURLParams(String url, String param, String value) {
+        String encodedValue;
+        try {
+            encodedValue = URLEncoder.encode(value, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            encodedValue = value;
+            e.printStackTrace();
+        }
+
+        return url.replaceAll(param + "=", param + "=" + encodedValue);
+    }
+}

+ 3 - 1
fs-service-system/src/main/java/com/fs/sop/service/impl/CompanySopRoleServiceImpl.java

@@ -51,7 +51,9 @@ public class CompanySopRoleServiceImpl extends ServiceImpl<CompanySopRoleMapper,
      */
     @Override
     public List<Company> selectCompanySopRoleList(CompanySopRole companySopRole){
-        List<Company> companyList = companyService.selectCompanyList(new Company());
+        Company company = new Company();
+        company.setIsDel(0);
+        List<Company> companyList = companyService.selectCompanyList(company);
         List<Long> companyIdList = PubFun.listToNewList(companyList, Company::getCompanyId);
         companySopRole.setCompanyIds(companyIdList);
         List<CompanySopRole> roleList = baseMapper.selectCompanySopRoleList(companySopRole);

+ 25 - 27
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreCartServiceImpl.java

@@ -1,32 +1,35 @@
 package com.fs.store.service.impl;
 
-import java.util.Date;
-import java.util.List;
-
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
-import com.fs.erp.domain.ErpGoodsStock;
-import com.fs.erp.dto.ErpGoodsStockQueryRequert;
-import com.fs.erp.dto.ErpGoodsStockQueryResponse;
 import com.fs.erp.service.IErpGoodsService;
+import com.fs.kingbos.domian.KbStockRequest;
+import com.fs.kingbos.domian.KbStockResponse;
+import com.fs.kingbos.service.K9StockService;
+import com.fs.store.domain.FsStoreCart;
 import com.fs.store.domain.FsStoreProductAttrValue;
 import com.fs.store.domain.FsStoreProductGroup;
 import com.fs.store.dto.StoreProductGroupDTO;
-import com.fs.store.mapper.*;
+import com.fs.store.mapper.FsStoreCartMapper;
+import com.fs.store.mapper.FsStoreProductAttrValueMapper;
+import com.fs.store.mapper.FsStoreProductGroupMapper;
+import com.fs.store.mapper.FsStoreProductMapper;
 import com.fs.store.param.FsStoreCartCountParam;
 import com.fs.store.param.FsStoreCartDelParam;
 import com.fs.store.param.FsStoreCartNumParam;
 import com.fs.store.param.FsStoreCartParam;
+import com.fs.store.service.IFsStoreCartService;
 import com.fs.store.vo.FsStoreCartVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.store.domain.FsStoreCart;
-import com.fs.store.service.IFsStoreCartService;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * 购物车Service业务层处理
@@ -48,6 +51,9 @@ public class FsStoreCartServiceImpl implements IFsStoreCartService
     private FsStoreProductGroupMapper productGroupMapper;
     @Autowired
     IErpGoodsService goodsService;
+    @Autowired
+    private K9StockService k9StockService;
+
     /**
      * 查询购物车
      *
@@ -206,15 +212,11 @@ public class FsStoreCartServiceImpl implements IFsStoreCartService
         FsStoreProductAttrValue productAttrValue=valueMapper.selectFsStoreProductAttrValueById(productAttrValueId);
         if(StringUtils.isEmpty(productAttrValue.getGroupBarCode())){
             //单品
-            ErpGoodsStockQueryRequert request=new ErpGoodsStockQueryRequert();
-            request.setBarcode(productAttrValue.getBarCode());
-            ErpGoodsStockQueryResponse response=goodsService.getGoodsStock(request);
-            if(response.getStocks()!=null){
-                Integer stocks=0;
-                for(ErpGoodsStock stock:response.getStocks()){
-                    Double goodsStock=Double.parseDouble(stock.getSalable_qty());
-                    stocks+=goodsStock.intValue();
-                }
+            KbStockRequest request = KbStockRequest.builder().goodsCode(productAttrValue.getBarCode()).build();
+            KbStockResponse response = k9StockService.getStock(request);
+            if(response.getSuccess()){
+                int stocks = response.getStock();
+
                 if(stocks<=0){
                     productAttrValue.setStock(0);
                     valueMapper.updateFsStoreProductAttrValue(productAttrValue);
@@ -244,15 +246,11 @@ public class FsStoreCartServiceImpl implements IFsStoreCartService
                 if(productGroupDTOS!=null){
                     for(StoreProductGroupDTO dto:productGroupDTOS){
                         FsStoreProductAttrValue attrValue=valueMapper.selectFsStoreProductAttrValueById(dto.getId());
-                        ErpGoodsStockQueryRequert request=new ErpGoodsStockQueryRequert();
-                        request.setBarcode(attrValue.getBarCode());
-                        ErpGoodsStockQueryResponse response=goodsService.getGoodsStock(request);
-                        if(response.getStocks()!=null){
-                            Integer stocks=0;
-                            for(ErpGoodsStock stock:response.getStocks()){
-                                Double goodsStock=Double.parseDouble(stock.getSalable_qty());
-                                stocks+=goodsStock.intValue();
-                            }
+                        KbStockRequest request = KbStockRequest.builder().goodsCode(attrValue.getBarCode()).build();
+                        KbStockResponse response = k9StockService.getStock(request);
+                        if(response.getSuccess()){
+                            Integer stocks = response.getStock();
+
                             if(stocks<=0){
                                 attrValue.setStock(0);
                                 valueMapper.updateFsStoreProductAttrValue(attrValue);

+ 7 - 0
fs-service-system/src/main/resources/application-config.yml

@@ -20,6 +20,13 @@ fsConfig:
   erpWdShopCode: beiliyou2-test
   erpWdBaseUrl: https://api.wangdian.cn/openapi2/
   erpWarehouseCode: beiliyou2-test
+  #金博ERP
+  kingbosan: 陕西中康
+  kingbosSecret: 12CA1038CE8A45D1BA325898A3F2F029
+  kingbosUrl: http://zkyf888.gnway.cc:53868/?an=陕西中康&do=k9save&timestep=&sign=&corgid=zy01
+  corgid: zy01
+  cwarehouseCode: "CK01"
+  cwarehouseName: "合格仓"
   #第三方支付配置
   payOpen: 1
   payPartnerId: 22051909542647100020

+ 16 - 0
fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodDaysMapper.xml

@@ -157,4 +157,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{item.id}
         </foreach>
     </update>
+
+    <update id="startPeriodCourse">
+        update fs_user_course_period_days ucpd
+        left join fs_user_course_period ucp on ucp.period_id = ucpd.period_id
+        set ucpd.status = 1, ucpd.update_time = now()
+        where ucpd.status = 0 and ucpd.day_date = #{date} and ucp.view_start_time >= #{time}
+    </update>
+
+    <update id="endPeriodCourse">
+        update fs_user_course_period_days ucpd
+        left join fs_user_course_period ucp on ucp.period_id = ucpd.period_id
+        set ucpd.status = 2, ucpd.update_time = now()
+        <![CDATA[
+        where ucpd.status = 1 and (ucpd.day_date > #{date} or ucp.view_end_time < #{time})
+        ]]>
+    </update>
 </mapper>

+ 1 - 1
fs-service-system/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml

@@ -10,7 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             ctc.training_camp_id,
             ctc.training_camp_name,
             ctc.order_number,
-            min(if(ctp.period_starting_time > now(), ctp.period_starting_time, null)) as recent_date,
+            min(if(ctp.period_starting_time >= CURDATE(), ctp.period_starting_time, null)) as recent_date,
             count(distinct ctp.period_id) as period_count,
             count(distinct cu.user_id)  as vip_count
         from fs_user_course_training_camp ctc