he2802 4 лет назад
Родитель
Сommit
afdcbd4af5
25 измененных файлов с 441 добавлено и 28 удалено
  1. 2 0
      zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengApplication.java
  2. 40 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  3. 1 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java
  4. 11 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java
  5. 9 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java
  6. 2 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxPayController.java
  7. 5 4
      zhongzheng-api/src/main/resources/application.yml
  8. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysUser.java
  9. 2 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SecurityUtils.java
  10. 23 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  11. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java
  12. 109 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/mapper/ExamNumberMapper.java
  14. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamBeforeServiceImpl.java
  15. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamNumberServiceImpl.java
  16. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java
  17. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java
  18. 90 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  19. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java
  20. 47 19
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  21. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  22. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  23. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/bo/WxLoginBody.java
  24. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java
  25. 10 0
      zhongzheng-system/src/main/resources/mapper/modules/exam/ExamNumberMapper.xml

+ 2 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/ZhongZhengApplication.java

@@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.cloud.client.loadbalancer.LoadBalanced;
 import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.client.RestTemplate;
 
 /**
@@ -14,6 +15,7 @@ import org.springframework.web.client.RestTemplate;
  */
 
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@EnableScheduling
 public class ZhongZhengApplication
 {
     public static void main(String[] args)

+ 40 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -0,0 +1,40 @@
+package com.zhongzheng.controller.schedule;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.schedule.service.IScheduleService;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 定时任务
+ *
+ * @author ruoyi
+ * @date 2021-11-10
+ */
+@Api(value = "定时任务", tags = {"定时任务管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common")
+public class ScheduleController extends BaseController {
+
+    private final IScheduleService iScheduleService;
+
+
+    /**
+     * 查询學員用户列表
+     * @return
+     */
+    @ApiOperation("查询學員用户列表")
+    @GetMapping("/updateGoodsSend")
+    public AjaxResult updateGoodsSend(UserQueryBo bo) {
+        iScheduleService.updateGoodsSend(bo);
+        return AjaxResult.success();
+    }
+
+}

+ 1 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java

@@ -45,6 +45,7 @@ public class CommonGoodsController extends BaseController {
     @GetMapping("/list")
     public TableDataInfo<GoodsVo> list(GoodsQueryBo bo) {
         bo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
+        bo.setGoodsStatus(1);
         startPage();
         List<GoodsVo> list = iGoodsService.selectList(bo);
         return getDataTable(list);

+ 11 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -86,4 +86,15 @@ public class OrderController extends BaseController {
         return toAjax(iOrderService.updateByEditBo(bo) ? 1 : 0);
     }
 
+    /**
+     * 新增订单
+     */
+    @ApiOperation("新增小程序订单")
+    @PostMapping("placeSmallOrder")
+    public AjaxResult add(@RequestBody OrderAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        System.out.println(bo.getUserId()+"用户ID");
+        return AjaxResult.success(iOrderService.placeSmallOrder(bo));
+    }
 }

+ 9 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java

@@ -66,6 +66,15 @@ public class WxLoginController
         return AjaxResult.success(map);
     }
 
+    @ApiOperation("获取用户小程序openid")
+    @PostMapping("/wx/getOpenid")
+    public AjaxResult<Void> getOpenid(@RequestBody WxLoginBody loginBody)
+    {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        String openId = wxLoginService.getWxOpenId(loginBody,loginUser.getUser().getUserId());
+        return AjaxResult.success(openId);
+    }
+
     /**
      * 公众号登录方法
      *

+ 2 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxPayController.java

@@ -54,6 +54,8 @@ public class WxPayController
     @PostMapping("/callback")
     public String callback(@RequestBody String notifyData)
     {
+        System.out.println("支付回调");
+
         return iWxPayService.paymentCallBack(notifyData);
     }
 

+ 5 - 4
zhongzheng-api/src/main/resources/application.yml

@@ -137,6 +137,7 @@ mybatis-plus:
   # 指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署
   configurationProperties: null
   configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     # 自动驼峰命名规则(camel case)映射
     # 如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名
     mapUnderscoreToCamelCase: true
@@ -241,14 +242,14 @@ feign:
 
 wx:
   small:
-    appid: wx8295c6fa6b0b3106
-    appsecret: 2a95e366da4c4b17a3963e9756b878fd
+    appid: wxd0fac11d52c8808b
+    appsecret: 30177f3472718d5108b367b1f321d58c
   gzh:
     appid: wx6f48f721d18244eb
     appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
   wepay:
-    mchid: 1342013901
-    key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
+    mchid: 1618279619
+    key: FzHUf9jucza7mqsUOVCzcNkz1FWO92bH
     appsecret: 2f8b2b4ff66e2f6adfb9f08ae22d7474
 
 tencent:

+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SysUser.java

@@ -86,7 +86,7 @@ public class SysUser implements Serializable
 
     /** 帐号状态(1正常 0停用) */
     @Excel(name = "帐号状态", readConverterExp = "1=正常,0=停用")
-    private String status;
+    private Long status;
 
     /** 删除标志(0代表存在 2代表删除) */
     @TableLogic

+ 2 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SecurityUtils.java

@@ -38,6 +38,8 @@ public class SecurityUtils
     {
         try
         {
+            System.out.println(12890);
+            System.out.println(EnabledTenant);
             if(EnabledTenant){
                 return getLoginUser().getUsername();
             }else{

+ 23 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -4,6 +4,8 @@ package com.zhongzheng.framework.web.service;
 import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.exception.CustomException;
 
@@ -13,11 +15,13 @@ import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.modules.course.mapper.CourseSectionMapper;
 import com.zhongzheng.modules.user.bo.UserAddBo;
 import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.domain.UserBankRecord;
 import com.zhongzheng.modules.user.domain.UserSchoolInfo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.mapper.UserMapper;
 import com.zhongzheng.modules.user.mapper.UserSchoolInfoMapper;
 import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.bo.WxLoginBody;
 import org.apache.commons.codec.binary.Base64;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -167,6 +171,25 @@ public class WxLoginService
         }
         return true;
     }
+    //小程序获取用户openid
+    public String getWxOpenId(WxLoginBody loginBody,Long userId) {
+        LambdaQueryWrapper<User> lqw = Wrappers.lambdaQuery();
+        lqw.eq(User::getUserId, userId);
+        User user = iUserService.getOne(lqw);
+        String openId = user.getOpenId();
+        if(openId==null){
+            String param = String.format(wxAuthParam, appid, appsrcret, loginBody.getCode());
+            String resultString  = HttpUtils.sendGet(wxAuthUrl,param);
+            //解析json
+            JSONObject jsonObject = (JSONObject) JSONObject.parse(resultString);
+            String session_key = String.valueOf(jsonObject.get("session_key"));
+            openId = String.valueOf(jsonObject.get("openid"));
+            user.setOpenId(openId);
+            iUserService.updateById(user);
+        }
+        return openId;
+    }
+
 
     //小程序获取用户信息
     public User getWxUnionIdUser(WxLoginBody loginBody) {

+ 7 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ProfileTpServiceImpl.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.Page;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -160,7 +161,12 @@ public class ProfileTpServiceImpl extends ServiceImpl<ProfileTpMapper, ProfileTp
     public ProfileTpVo queryByGoodsId(Long goodsId) {
         ProfileTpQueryBo profileTpQueryBo = new ProfileTpQueryBo();
         profileTpQueryBo.setGoodsId(goodsId);
-        return profileTpMapper.selectList(profileTpQueryBo).get(0);
+        List<ProfileTpVo> profileTpVos = profileTpMapper.selectList(profileTpQueryBo);
+        if (!CollectionUtils.isEmpty(profileTpVos)){
+            return profileTpVos.get(0);
+        }else {
+            return null;
+        }
     }
 
 

+ 109 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -8,12 +8,23 @@ import cn.hutool.extra.template.TemplateConfig;
 import cn.hutool.extra.template.TemplateEngine;
 import cn.hutool.extra.template.TemplateUtil;
 import cn.hutool.poi.word.Word07Writer;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.service.impl.OssServiceImpl;
+import com.zhongzheng.modules.alisms.service.IAliSmsService;
 import com.zhongzheng.modules.base.bo.UserProfileFit;
+import com.zhongzheng.modules.goods.service.IGoodsService;
+import com.zhongzheng.modules.goods.vo.GoodsVo;
+import com.zhongzheng.modules.inform.bo.InformUserAddBo;
+import com.zhongzheng.modules.inform.service.IInformRemindService;
+import com.zhongzheng.modules.inform.service.IInformUserService;
+import com.zhongzheng.modules.inform.vo.InformRemindVo;
+import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.vo.UserVo;
 import org.apache.http.entity.ContentType;
 import org.apache.poi.xwpf.usermodel.BreakType;
 import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
@@ -59,9 +70,30 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     @Value("${zhongzheng.profile}")
     private String ZHONGZHENG_PROFILE;
 
-    @Autowired()
+    @Autowired
     private OssServiceImpl ossService;
 
+    @Autowired
+    private IGoodsService iGoodsService;
+
+    @Autowired
+    private com.zhongzheng.modules.alisms.service.IAliSmsService IAliSmsService;
+
+    @Autowired
+    private IUserService iUserService;
+
+    @Autowired
+    private IInformUserService iInformUserService;
+
+    @Autowired
+    private IInformRemindService informRemindService;
+
+    @Value("${aliyun.sms.materialReviewCode}")
+    private String materialReviewCode;
+
+    @Value("${aliyun.sms.NotificationOfFailureCode}")
+    private String NotificationOfFailureCode;
+
     @Override
     public UserProfileVo queryById(Long id){
         UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
@@ -205,9 +237,85 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         update.setUpdateTime(DateUtils.getNowTime());
         update.setAuditTime(DateUtils.getNowTime());
         update.setChangeStatus(1);
+        sendAuidit(update);
         return this.updateById(update);
     }
 
+    private void sendAuidit(UserProfile bo) {
+        UserProfileVo userProfileVo = this.queryById(bo.getId());
+        if (bo.getStatus().equals(1)) {
+            InformRemindVo informRemindVo = informRemindService.queryById(3L);
+            if (informRemindVo.getWayStatus().equals(1)) {
+                InformUserAddBo informUserAddBo = new InformUserAddBo();
+                informUserAddBo.setUserId(userProfileVo.getUserId());
+                informUserAddBo.setSendStatus(1);
+                informUserAddBo.setCreateTime(DateUtils.getNowTime());
+                informUserAddBo.setUpdateTime(DateUtils.getNowTime());
+                informUserAddBo.setRemindId(3L);
+                informUserAddBo.setSystemStatus(1);
+                informUserAddBo.setRemind("报名资料审核通过通知");
+                informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
+                GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
+                informUserAddBo.setText("尊敬的用户:您填写的"+goodsVo1.getGoodsName()+"课程报名信息审核成功,请尽快去学习吧");
+                iInformUserService.insertByAddBo(informUserAddBo);
+            }
+            if (informRemindVo.getNoteStatus().equals(1)){
+                InformUserAddBo informUserAddBo = new InformUserAddBo();
+                informUserAddBo.setUserId(userProfileVo.getUserId());
+                informUserAddBo.setSendTime(DateUtils.getNowTime());
+                informUserAddBo.setSendStatus(1);
+                informUserAddBo.setCreateTime(DateUtils.getNowTime());
+                informUserAddBo.setUpdateTime(DateUtils.getNowTime());
+                informUserAddBo.setRemindId(3L);
+                informUserAddBo.setSystemStatus(3);
+                informUserAddBo.setRemind("报名资料审核通过通知");
+                informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
+                GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
+                informUserAddBo.setText("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "已经开通,请尽快去学习吧。");
+                iInformUserService.insertByAddBo(informUserAddBo);
+                UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
+                Map<String, Object> param = new HashMap<>();
+                param.put("goods", goodsVo1.getGoodsName());
+                IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), materialReviewCode);
+            }
+        }else {
+            InformRemindVo informRemindTwoVo = informRemindService.queryById(4L);
+            if (informRemindTwoVo.getWayStatus().equals(1)) {
+                InformUserAddBo informUserAddBo = new InformUserAddBo();
+                informUserAddBo.setUserId(userProfileVo.getUserId());
+                informUserAddBo.setSendStatus(1);
+                informUserAddBo.setCreateTime(DateUtils.getNowTime());
+                informUserAddBo.setUpdateTime(DateUtils.getNowTime());
+                informUserAddBo.setRemindId(4L);
+                informUserAddBo.setSystemStatus(1);
+                informUserAddBo.setRemind("报名资料审核不通过通知");
+                informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
+                GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
+                informUserAddBo.setText("尊敬的用户:您填写的"+goodsVo1.getGoodsName()+"课程报名信息审核不通过,请重新完善吧");
+                iInformUserService.insertByAddBo(informUserAddBo);
+            }
+            if (informRemindTwoVo.getNoteStatus().equals(1)){
+                InformUserAddBo informUserAddBo = new InformUserAddBo();
+                informUserAddBo.setUserId(userProfileVo.getUserId());
+                informUserAddBo.setSendTime(DateUtils.getNowTime());
+                informUserAddBo.setSendStatus(1);
+                informUserAddBo.setCreateTime(DateUtils.getNowTime());
+                informUserAddBo.setUpdateTime(DateUtils.getNowTime());
+                informUserAddBo.setRemindId(3L);
+                informUserAddBo.setSystemStatus(3);
+                informUserAddBo.setRemind("报名资料审核不通过通知");
+                informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
+                GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
+                informUserAddBo.setText("尊敬的用户:您填写的"+goodsVo1.getGoodsName()+"课程报名信息审核不通过,请重新完善吧");
+                iInformUserService.insertByAddBo(informUserAddBo);
+                UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
+                Map<String, Object> param = new HashMap<>();
+                param.put("goods", goodsVo1.getGoodsName());
+                IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), NotificationOfFailureCode);
+            }
+        }
+    }
+
     @Override
     public List<UserProfileVo> listRecord(UserProfileQueryBo bo) {
         return baseMapper.listRecord(bo);

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/mapper/ExamNumberMapper.java

@@ -21,4 +21,6 @@ public interface ExamNumberMapper extends BaseMapper<ExamNumber> {
     Integer selectExam(@Param("goodsId") Long goodsId,@Param("examNumberId") Long examNumberId);
 
     Integer selectApply(Long goodsId);
+
+    Integer selectApplyBefore(Long goodsId);
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamBeforeServiceImpl.java

@@ -40,6 +40,15 @@ public class ExamBeforeServiceImpl extends ServiceImpl<ExamBeforeMapper, ExamBef
 
     @Override
     public List<ExamBeforeVo> queryList(ExamBeforeQueryBo bo) {
+        List<ExamBeforeVo> examBeforeVos = baseMapper.queryBefore(bo);
+        for (ExamBeforeVo examBeforeVo : examBeforeVos) {
+            if (examBeforeVo.getBeforeEndTime() < System.currentTimeMillis()/1000){
+                ExamBefore update = new ExamBefore();
+                update.setBeforeId(examBeforeVo.getBeforeId());
+                update.setStatus(2);
+                this.updateById(update);
+            }
+        }
         return baseMapper.queryBefore(bo);
     }
 

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamNumberServiceImpl.java

@@ -148,6 +148,11 @@ public class ExamNumberServiceImpl extends ServiceImpl<ExamNumberMapper, ExamNum
                     if (apply > 0) {
                         throw new IllegalArgumentException("当前商品已启用考试安排,不可删除");
                     }
+
+                    Integer applyBefore = baseMapper.selectApplyBefore(examNumberGoods.getGoodsId());
+                    if (applyBefore > 0) {
+                        throw new IllegalArgumentException("当前商品已启用前培安排,不可删除");
+                    }
                 }
                 Integer integer = baseMapper.selectExam(examNumberGoods.getGoodsId(),update.getExamNumberId());
                 if (bo.getStatus() == 1 && integer > 0) {

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java

@@ -30,6 +30,10 @@ private static final long serialVersionUID=1L;
     public static final Integer PAY_PART =1;  //1部分收费
     public static final Integer PAY_FULL =2;  //2完全收费
 
+
+    public static final Integer FROM_PLAT =1;  //业务员录单
+    public static final Integer FROM_SMALL =2;  //小程序订单
+
     /** $column.columnComment */
     @TableId(value = "order_id")
     private Long orderId;

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java

@@ -44,6 +44,14 @@ public interface IOrderService extends IService<Order> {
 
 	Map<String, Object> placePlatOrder(OrderAddBo bo);
 
+
+	/**
+	 * 小程序下单
+	 * @param bo
+	 * @return
+	 */
+	Map<String, String> placeSmallOrder(OrderAddBo bo);
+
 	/**
 	 * 根据编辑业务对象修改订单
 	 * @param bo 订单编辑业务对象

+ 90 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -38,6 +38,9 @@ import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderListVo;
 import com.zhongzheng.modules.order.vo.OrderVo;
+import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.vo.UserVo;
+import com.zhongzheng.modules.wx.service.IWxPayService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -80,10 +83,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private IProfileTpService iProfileTpService;
 
+    @Autowired
+    private IWxPayService iWxPayService;
 
     @Autowired
     private OrderMapper orderMapper;
 
+    @Autowired
+    private IUserService iUserService;
+
     @Autowired
     private com.zhongzheng.modules.alisms.service.IAliSmsService IAliSmsService;
 
@@ -235,7 +243,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
 
         add.setOrderSn(out_trade_no);
-        add.setOrderFrom(1);
+        add.setOrderFrom(Order.FROM_PLAT);
         add.setPayPrice(payPrice);
         add.setOrderPrice(totalPrice);
 
@@ -246,6 +254,87 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return result;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, String> placeSmallOrder(OrderAddBo bo) {
+        List<OrderGoodsAddBo> goodsList = bo.getGoodsList();
+        if(goodsList==null||goodsList.size()<1){
+            throw new CustomException("商品列表为空");
+        }
+        Order add = BeanUtil.toBean(bo, Order.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setOrderType(Order.CONSUME_ORDER);
+
+        //生成订单号
+        String out_trade_no = DateUtils.getDateOrderSn();
+        BigDecimal totalPrice = new BigDecimal(0);
+        BigDecimal payPrice = new BigDecimal(0);
+        String body = "中正祥粤云-";
+        //生成订单
+        for (OrderGoodsAddBo g : goodsList) {
+            //订单商品
+            Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId,g.getGoodsId()));
+            if(goods.getGoodsStatus()!=1){
+                throw new CustomException("商品尚未上架");
+            }
+            body = "中正祥粤云-"+goods.getGoodsName();
+            OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
+            orderGoods.setOrderSn(out_trade_no);
+            if(g.getGoodsInputData()!=null){
+                orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
+            }
+            //赋值业务信息
+           /* orderGoods.setBusinessOwner(bo.getOrderBusiness().getBusinessOwner());
+            orderGoods.setDept(bo.getOrderBusiness().getDept());
+            orderGoods.setSource(bo.getOrderBusiness().getSource());
+            orderGoods.setSchool(bo.getOrderBusiness().getSchool());*/
+
+            //收货公司信息
+           /* orderGoods.setAddress(bo.getOrderStudent().getAddress());
+            orderGoods.setCompany(bo.getOrderStudent().getCompany());*/
+            //成交价
+            orderGoods.setGoodsRealPrice(goods.getStandPrice());
+
+            orderGoods.setCreateTime(DateUtils.getNowTime());
+            orderGoods.setUpdateTime(DateUtils.getNowTime());
+            boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            //订单价格不计算优惠
+            totalPrice = totalPrice.add(goods.getStandPrice());
+            //暂不计算优惠券
+            payPrice = payPrice.add(goods.getStandPrice());
+            //视频商品安排班级
+            if(goods.getGoodsType()==1&&orderGoodsRs){
+                Long gradeId = null;
+                if(g.getGoodsInputData()!=null){
+                    gradeId = g.getGoodsInputData().getGradeId();
+                }
+                arrangeGrade(goods.getGoodsName(),goods.getGoodsId(),orderGoods.getOrderGoodsId(),gradeId,add.getUserId());
+            }
+        }
+
+        add.setOrderSn(out_trade_no);
+        add.setOrderFrom(Order.FROM_SMALL);
+        add.setPayPrice(payPrice);
+        add.setOrderPrice(totalPrice);
+        System.out.println("FR");
+        System.out.println(add);
+        Order add1 = new Order();
+        add1.setUserId(17L);
+        add1.setOrderSn("21122220575491026494");
+        add1.setCreateTime(DateUtils.getNowTime());
+        add1.setUpdateTime(DateUtils.getNowTime());
+        this.save(add1);
+        Map<String, Object> result = new HashMap<>();
+        result.put("oderId",add.getOrderId());
+        result.put("orderSn",out_trade_no);
+        UserVo userVo = iUserService.queryById(add.getUserId());
+        String price = "1";
+        Map<String, String> payResult =  iWxPayService.payment(out_trade_no,userVo.getOpenId(),body,price);
+        return payResult;
+    }
+
 
     @Override
     public Boolean updateByEditBo(OrderEditBo bo) {

+ 26 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java

@@ -0,0 +1,26 @@
+package com.zhongzheng.modules.schedule.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.polyv.bo.PolyvVideoAddBo;
+import com.zhongzheng.modules.polyv.bo.PolyvVideoEditBo;
+import com.zhongzheng.modules.polyv.bo.PolyvVideoQueryBo;
+import com.zhongzheng.modules.polyv.domain.PolyvVideo;
+import com.zhongzheng.modules.polyv.vo.PolyvVideoQuerVo;
+import com.zhongzheng.modules.polyv.vo.PolyvVideoVo;
+import com.zhongzheng.modules.polyv.vo.PolyvVo;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 保利威视频信息Service接口
+ *
+ * @author ruoyi
+ * @date 2021-06-11
+ */
+public interface IScheduleService extends IService<PolyvVideo> {
+
+    String updateGoodsSend(UserQueryBo bo);
+}

+ 47 - 19
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/SaticScheduleTask.java → zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java

@@ -1,7 +1,21 @@
-package com.zhongzheng.controller.grade;
+package com.zhongzheng.modules.schedule.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpStatus;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.Page;
+import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
+import com.zhongzheng.common.utils.polyv.PolyvUtils;
 import com.zhongzheng.modules.base.service.IProfileTpService;
 import com.zhongzheng.modules.base.vo.ProfileTpVo;
 import com.zhongzheng.modules.goods.service.IGoodsService;
@@ -10,33 +24,52 @@ import com.zhongzheng.modules.grade.service.IClassGradeGoodsService;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.inform.bo.InformUserAddBo;
-import com.zhongzheng.modules.inform.domain.Inform;
 import com.zhongzheng.modules.inform.service.IInformRemindService;
 import com.zhongzheng.modules.inform.service.IInformService;
 import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.inform.vo.InformRemindVo;
-import com.zhongzheng.modules.order.bo.OrderGoodsAddBo;
 import com.zhongzheng.modules.order.mapper.OrderMapper;
 import com.zhongzheng.modules.order.service.IOrderBusinessService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.polyv.bo.PolyvVideoAddBo;
+import com.zhongzheng.modules.polyv.bo.PolyvVideoEditBo;
+import com.zhongzheng.modules.polyv.bo.PolyvVideoQueryBo;
+import com.zhongzheng.modules.polyv.domain.PolyvVideDo;
+import com.zhongzheng.modules.polyv.domain.PolyvVideo;
+import com.zhongzheng.modules.polyv.domain.TokenResponse;
+import com.zhongzheng.modules.polyv.mapper.PolyvVideoMapper;
+import com.zhongzheng.modules.polyv.vo.PolyvVideoQuerVo;
+import com.zhongzheng.modules.polyv.vo.PolyvVideoVo;
+import com.zhongzheng.modules.polyv.vo.PolyvVo;
+import com.zhongzheng.modules.schedule.service.IScheduleService;
+import com.zhongzheng.modules.user.bo.UserQueryBo;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.UserVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.time.LocalDateTime;
+import java.io.IOException;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
-@Configuration      //1.主要用于标记配置类,兼备Component的效果。
-@EnableScheduling   // 2.开启定时任务
-public class SaticScheduleTask {
+import static com.squareup.okhttp.internal.Util.md5Hex;
+
+/**
+ * 定时任务
+ *
+ * @author change
+ * @date 2021-06-11
+ */
+@Service
+public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVideo> implements IScheduleService {
 
     @Autowired
     private IInformService informService;
@@ -80,11 +113,8 @@ public class SaticScheduleTask {
     @Value("${aliyun.sms.informationNotificationCode}")
     private String informationNotificationCode;
 
-    //3.添加定时任务
-    //@Scheduled(cron = "0/2 * * * * ?")
-    //或直接指定时间间隔,例如:5秒
-    @Scheduled(fixedRate = 5000)
-    private void configureTasks() {
+    @Override
+    public String updateGoodsSend(UserQueryBo bo) {
         InformRemindVo informRemindVo = informRemindService.queryById(1L);
         List<OrderGoodsVo> orderGoodsVo = iOrderGoodsService.selectOrderGoods();
 
@@ -167,8 +197,6 @@ public class SaticScheduleTask {
                 }
             }
         }
-
-
+        return "请求成功";
     }
-
-}
+}

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -38,6 +38,7 @@ public interface IUserService extends IService<User> {
 
 	List<UserStudyRecordVo> selectStudyRecordList(UserStudyRecordQueryBo bo);
 
+
 	/**
 	 * 根据新增业务对象插入用户
 	 * @param bo 用户新增业务对象

+ 23 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -141,9 +141,32 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         userPeriodSave(add, bo);
         //完成当天学习计划
         userPlanSave(add);
+        //判断有无学习结束
+        studyFinish(add);
         return 0;
     }
 
+    private void studyFinish(UserStudyRecord bo) {
+        //获得当前所在班级
+        if (bo.getStatus() != null && bo.getStatus().equals(1)){
+            Long secLong = 0L;
+            Long studyLong = 0L;
+            SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
+            subjectStudyRecordQueryBo.setGoodsId(bo.getGoodsId());
+            subjectStudyRecordQueryBo.setUserId(bo.getUserId());
+            subjectStudyRecordQueryBo.setGradeId(bo.getGradeId());
+            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listSubject(subjectStudyRecordQueryBo);
+            for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
+                secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
+                studyLong = new BigDecimal(studyLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getRecordNum().toString())).longValue();
+            }
+            //发送课时完成
+            if (secLong.equals(studyLong)) {
+
+            }
+        }
+    }
+
     @Override
     public Boolean updateByEditBo(UserStudyRecordEditBo bo) {
         UserStudyRecord update = BeanUtil.toBean(bo, UserStudyRecord.class);

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/bo/WxLoginBody.java

@@ -40,4 +40,5 @@ public class WxLoginBody {
 
 
 
+
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -92,7 +92,9 @@ public class WxPayServiceImpl  implements IWxPayService {
 
     private WXPayConstants.SignType signType;
 
-    private String notifyUrl = "https://api.xyyxt.net/wx/pay/callback";
+ //   private String notifyUrl = "https://api.xyyxt.net/wx/pay/callback";
+
+    private String notifyUrl = "http://42.192.164.187:19005/wx/pay/callback";
 
     private WXPayRequest wxPayRequest;
 

+ 10 - 0
zhongzheng-system/src/main/resources/mapper/modules/exam/ExamNumberMapper.xml

@@ -76,4 +76,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           and eag.goods_id =#{goodsId}
           and ea.`status`=1
     </select>
+
+    <select id="selectApplyBefore" parameterType="map" resultType="integer">
+        SELECT
+            COUNT(1)
+        FROM
+            exam_before_goods ebg
+                LEFT JOIN exam_before eb on ebg.before_id = eb.before_id
+        where ebg.goods_id = #{goodsId}
+          and eb.`status` in (1,0)
+    </select>
 </mapper>