Explorar o código

Merge branch 'dev' into pre

yangdamao %!s(int64=2) %!d(string=hai) anos
pai
achega
acb521fbe7
Modificáronse 18 ficheiros con 366 adicións e 223 borrados
  1. 10 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysTenantController.java
  2. 10 10
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  3. 4 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java
  4. 13 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  5. 41 36
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  6. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantQueryBo.java
  7. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTopTenantEditBo.java
  8. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/bo/TopDivideLogQueryBo.java
  9. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/vo/TopDivideOrderVo.java
  10. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderAddBo.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java
  12. 183 165
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  13. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java
  14. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideLogMapper.xml
  15. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideOrderMapper.xml
  16. 27 5
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml
  17. 3 6
      zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml
  18. 50 1
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

+ 10 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysTenantController.java

@@ -135,6 +135,16 @@ public class SysTenantController extends BaseController {
         return toAjax(iSysTenantService.deleteTopTenant(bo) ? 1 : 0);
     }
 
+    /**
+     * 查询系统商户列表
+     */
+    @ApiOperation("查询系统商户列表")
+    @GetMapping("/top/list")
+    public AjaxResult<List<SysTenantVo>> getTopListAll(SysTenantQueryBo bo) {
+        List<SysTenantVo> list = iSysTenantService.queryList(bo);
+        return AjaxResult.success(list);
+    }
+
     /**
      * 删除系统商户
      */

+ 10 - 10
zhongzheng-admin-saas/src/main/resources/application-dev.yml

@@ -154,18 +154,18 @@ Nuonuo:
     APPSecret: 07168A248B2844E0
 
 oldOrder:
-    studyRecord: http://test.jqbao.net/WitSystem/BussinessApi/GetStudyRecord
-    orderCheck: http://test.jqbao.net/WitSystem/BussinessApi/AuditUnderOrder
-    finishOrder: http://test.jqbao.net/WitSystem/BussinessApi/CompleteOrder
-    refuseCheck: http://test.jqbao.net/WitSystem/BussinessApi/ReFundAuditResult
-    inputOrderSn: http://test.jqbao.net/WitSystem/BussinessApi/GetNewYxtinputOrderSn
-    checkOrderStudent: http://test.jqbao.net/WitSystem/BussinessApi/ReAuditUnderOrder
-    checkOrderBrokerage: http://test.jqbao.net/WitSystem/BussinessApi/CommissionRate
-    refundPay: http://192.168.1.222:6030/common/platform/pay
-    refundPayHandle: http://192.168.1.222:6030/common/platform/pay/handle
+    studyRecord: http://gdxypx.xy.com/WitSystem/BussinessApi/GetStudyRecord
+    orderCheck: http://gdxypx.xy.com/WitSystem/BussinessApi/AuditUnderOrder
+    finishOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CompleteOrder
+    refuseCheck: http://gdxypx.xy.com/WitSystem/BussinessApi/ReFundAuditResult
+    inputOrderSn: http://gdxypx.xy.com/WitSystem/BussinessApi/GetNewYxtinputOrderSn
+    checkOrderStudent: http://gdxypx.xy.com/WitSystem/BussinessApi/ReAuditUnderOrder
+    checkOrderBrokerage: http://gdxypx.xy.com/WitSystem/BussinessApi/CommissionRate
+    refundPay: http://192.168.1.222:5030/common/platform/pay
+    refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
 
 oldSys:
     host: http://gdxypx.xy.com
 
 invoice:
-    host: http://192.168.1.222:8077/sys/common/openMplatform/log
+    host: http://192.168.1.222:7077/sys/common/openMplatform/log

+ 4 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java

@@ -97,6 +97,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         LambdaQueryWrapper<SysTenant> lqw = Wrappers.lambdaQuery();
         lqw.ne(SysTenant::getStatus, -1);
         lqw.like(StrUtil.isNotBlank(bo.getTenantName()), SysTenant::getTenantName, bo.getTenantName());
+        lqw.eq(ObjectUtils.isNotNull(bo.getTenantid()),SysTenant::getTenantId, bo.getTenantid());
         return entity2Vo(this.list(lqw));
     }
 
@@ -444,6 +445,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         add.setTenantId(createTenantId());
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
+        add.setStatus(1);
         if (ObjectUtils.isNotNull(bo.getAccountList())){
             add.setAccountInformation(JSONArray.toJSONString(bo.getAccountList()));
         }
@@ -463,6 +465,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
 //        if(checkNameUnique(tenant)){
 //            throw new CustomException("公司名已存在");
 //        }
+        tenant.setHostH5(bo.getHostH5());
+        tenant.setHostPc(bo.getHostPc());
         tenant.setBillType(bo.getBillType());
         tenant.setBillDay(bo.getBillDay());
         tenant.setAccountInformation(JSONArray.toJSONString(bo.getAccountList()));

+ 13 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -35,6 +35,7 @@ import com.zhongzheng.modules.course.service.ICourseSubjectService;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
+import com.zhongzheng.modules.inform.domain.InformRemind;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.*;
@@ -185,6 +186,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             List<ClassGradeUserGoodsVo> classGradeUserGoodsVos = iClassGradeUserService.listUser(classGradeUserQueryBo);
             userVo.setClassGradeUserGoodsVoList(classGradeUserGoodsVos);
             userVo.setOrderNum(userVo.getGoodsCourseNum());
+
+            UserVisitLog userVisitLog = iUserVisitLogService.getOne(new LambdaQueryWrapper<UserVisitLog>().eq(UserVisitLog::getUserId, userVo.getUserId()).orderByDesc(UserVisitLog::getId).last("limit 1"));
+            if(Validator.isNotEmpty(userVisitLog)){
+                userVo.setLastVisitTime(userVisitLog.getCreateTime());
+                userVo.setVisitFromPlat(Integer.parseInt(userVisitLog.getFromPlat()));
+            }
+
+            UserStudyLog userStudyLog = iUserStudyLogService.getOne(new LambdaQueryWrapper<UserStudyLog>().eq(UserStudyLog::getUserId, userVo.getUserId()).orderByDesc(UserStudyLog::getId).last("limit 1"));
+            if(Validator.isNotEmpty(userStudyLog)){
+                userVo.setLastStudyTime(userStudyLog.getCreateTime());
+                userVo.setStudyFromPlat(Integer.parseInt(userStudyLog.getFromPlat()));
+            }
         }
         return list;
     }

+ 41 - 36
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.order.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -1027,7 +1028,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 List<TopCostTpItem> tpItems = new ArrayList<>();
                 for (TopCostTpItem x : items) {
                     BigDecimal price = goodsPrice;
-                    if (x.getDockStatus() == 1){
+                    if (ObjectUtil.isNotNull(x.getDockStatus()) && x.getDockStatus() == 1){
                         //启用成本扣除项
                         switch (x.getDockType()){
                             case 1://百分比
@@ -1054,51 +1055,55 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     //匹配不到成本项阶梯值
                     continue;
                 }
-                if (tpItems.size() > 1) {
-                    //匹配到多个成本项
-                    throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", businessName, goodsPrice.toString()));
-                }
-                //换算订单成本和盈亏
-                TopCostTpItem topCostTpItem = tpItems.stream().findFirst().get();
-                BigDecimal cost = new BigDecimal("0.00");//成本
+//                if (tpItems.size() > 1) {
+//                    //匹配到多个成本项
+//                    throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", businessName, goodsPrice.toString()));
+//                }
                 BigDecimal divideMoney = new BigDecimal("0.00");//分成
+                BigDecimal cost = new BigDecimal("0.00");//成本
                 BigDecimal bigDecimal = new BigDecimal("100");
-                if (topCostTpItem.getDockStatus() == 1){
-                    //启用成本扣除项
-                    switch (topCostTpItem.getDockType()){
+                for (TopCostTpItem tpItem : tpItems) {
+                    BigDecimal goodsDecimal = goodsPrice;
+                    //换算订单成本和盈亏
+                    TopCostTpItem topCostTpItem = tpItem;
+                    if (ObjectUtil.isNotNull(topCostTpItem.getDockStatus()) && topCostTpItem.getDockStatus() == 1){
+                        //启用成本扣除项
+                        switch (topCostTpItem.getDockType()){
+                            case 1://百分比
+                                //成本扣除金额
+                                BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
+                                BigDecimal multiply = goodsDecimal.multiply(divide1);
+                                goodsDecimal = goodsDecimal.subtract(multiply);
+                                break;
+                            case 2://固定金额
+                                goodsDecimal = goodsDecimal.subtract(topCostTpItem.getDockValue());
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    switch (topCostTpItem.getItemType()) {
                         case 1://百分比
-                            //成本扣除金额
-                            BigDecimal divide = topCostTpItem.getDockValue().divide(bigDecimal);
-                            BigDecimal multiply = goodsPrice.multiply(divide);
-                            goodsPrice = goodsPrice.subtract(multiply);
+                            BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
+                            BigDecimal multiply = goodsDecimal.multiply(divide);
+                            cost = cost.add(multiply);
+                            if (topCostTpItem.getItemCategory() == 1 && add.getFinishStatus() == 1){
+                                //订单已完单 并且是分成成本
+                                divideMoney = divideMoney.add(multiply);
+                            }
                             break;
                         case 2://固定金额
-                            goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
+                            cost = cost.add(topCostTpItem.getTypeValue());
+                            if (topCostTpItem.getItemCategory() == 1 && add.getFinishStatus() == 1){
+                                //分成
+                                divideMoney = divideMoney.add(topCostTpItem.getTypeValue());
+                            }
                             break;
                         default:
                             break;
                     }
-
-                }
-                switch (topCostTpItem.getItemType()) {
-                    case 1://百分比
-                        BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
-                        cost = goodsPrice.multiply(divide);
-                        if (topCostTpItem.getItemCategory() == 1 && add.getFinishStatus() == 1){
-                            //订单已完单 并且是分成成本
-                            divideMoney = goodsPrice.multiply(divide);
-                        }
-                        break;
-                    case 2://固定金额
-                        cost = topCostTpItem.getTypeValue();
-                        if (topCostTpItem.getItemCategory() == 1 && add.getFinishStatus() == 1){
-                            //分成
-                            divideMoney = topCostTpItem.getTypeValue();
-                        }
-                        break;
-                    default:
-                        break;
                 }
+
                 if (add.getFinishStatus() == 1 && divideTotal.compareTo(BigDecimal.ZERO) >0 ){
                     orderGoods.setDivideModel(divideModel);
                     orderGoods.setDivideMoney(divideMoney);

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantQueryBo.java

@@ -35,6 +35,8 @@ public class SysTenantQueryBo extends BaseEntity {
 	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
 	private String isAsc;
 
+	@ApiModelProperty("机构ID")
+	private Long tenantid;
 
 	/** 0 失效 1启用 */
 	@ApiModelProperty("0 失效 1启用")

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTopTenantEditBo.java

@@ -28,6 +28,12 @@ public class SysTopTenantEditBo {
     @NotNull(message = "名称不能为空")
     private String tenantName;
 
+    @ApiModelProperty("")
+    private String hostH5;
+
+    @ApiModelProperty("")
+    private String hostPc;
+
     @ApiModelProperty("账单类型 (1月份 2季度 3半年 4年度)")
     private Integer billType;
 

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/bo/TopDivideLogQueryBo.java

@@ -79,4 +79,6 @@ public class TopDivideLogQueryBo extends BaseEntity {
 	/** 业务号 */
 	@ApiModelProperty("业务号")
 	private String createNo;
+	@ApiModelProperty("账单类型 (1月份 2季度 3半年 4年度)")
+	private Integer billType;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/vo/TopDivideOrderVo.java

@@ -97,4 +97,7 @@ public class TopDivideOrderVo {
 	private BigDecimal brokerage;
 	@ApiModelProperty("角色名称")
 	private String roleName;
+
+	@ApiModelProperty("订单来源 1新系统C端订单,2旧系统C端订单,3旧系统B端订单 ")
+	private Integer orderFrom;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderAddBo.java

@@ -182,4 +182,7 @@ public class TopOldOrderAddBo {
     /** 佣金 */
     @ApiModelProperty("佣金")
     private BigDecimal brokerage;
+
+    @ApiModelProperty("下单企业")
+    private String purchaseOrg;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java

@@ -148,4 +148,6 @@ private static final long serialVersionUID=1L;
     private Long checkTime;
     /** 账款结清时间 */
     private Long creditTime;
+    /** 下单企业 */
+    private String purchaseOrg;
 }

+ 183 - 165
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -413,7 +413,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 List<TopCostTpItem> tpItems = new ArrayList<>();
                 for (TopCostTpItem x : items) {
                     BigDecimal price = goodsPrice;
-                    if (x.getDockStatus() == 1){
+                    if (ObjectUtil.isNotNull(x.getDockStatus()) && x.getDockStatus() == 1){
                         //启用成本扣除项
                         switch (x.getDockType()){
                             case 1://百分比
@@ -440,41 +440,46 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     //匹配不到成本项阶梯值
                     continue;
                 }
-                if (tpItems.size() > 1) {
-                    //匹配到多个成本项
-                    throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
-                }
-                //换算订单成本和盈亏
+//                if (tpItems.size() > 1) {
+//                    //匹配到多个成本项
+//                    throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
+//                }
+
                 BigDecimal cost = new BigDecimal("0.00");//成本
                 BigDecimal bigDecimal = new BigDecimal("100");
-                TopCostTpItem topCostTpItem = tpItems.stream().findFirst().get();
-                if (topCostTpItem.getDockStatus() == 1){
-                    //启用成本扣除项
-                    switch (topCostTpItem.getDockType()){
+                for (TopCostTpItem tpItem : tpItems) {
+                    BigDecimal goodsPriceDecimal = goodsPrice;
+                    //换算订单成本和盈亏
+                    TopCostTpItem topCostTpItem = tpItem;
+                    if (ObjectUtil.isNotNull(topCostTpItem.getDockStatus()) && topCostTpItem.getDockStatus() == 1){
+                        //启用成本扣除项
+                        switch (topCostTpItem.getDockType()){
+                            case 1://百分比
+                                //成本扣除金额
+                                BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
+                                BigDecimal multiply = goodsPriceDecimal.multiply(divide1);
+                                goodsPriceDecimal = goodsPriceDecimal.subtract(multiply);
+                                break;
+                            case 2://固定金额
+                                goodsPriceDecimal = goodsPriceDecimal.subtract(topCostTpItem.getDockValue());
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    switch (topCostTpItem.getItemType()) {
                         case 1://百分比
-                            //成本扣除金额
-                            BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
-                            BigDecimal multiply = goodsPrice.multiply(divide1);
-                            goodsPrice = goodsPrice.subtract(multiply);
+                            BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
+                            BigDecimal multiply = goodsPriceDecimal.multiply(divide);
+                            cost = cost.add(multiply);
                             break;
                         case 2://固定金额
-                            goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
+                            cost = cost.add(topCostTpItem.getTypeValue());
                             break;
                         default:
                             break;
                     }
                 }
-                switch (topCostTpItem.getItemType()) {
-                    case 1://百分比
-                        BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
-                        cost = goodsPrice.multiply(divide);
-                        break;
-                    case 2://固定金额
-                        cost = topCostTpItem.getTypeValue();
-                        break;
-                    default:
-                        break;
-                }
                 costTotal = costTotal.add(cost);
             }
 
@@ -684,7 +689,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             List<TopCostTpItemVo> tpItems = new ArrayList<>();
             for (TopCostTpItemVo x : items) {
                 BigDecimal price = goodsPrice;
-                if (x.getDockStatus() == 1){
+                if (ObjectUtil.isNotNull(x.getDockStatus()) && x.getDockStatus() == 1){
                     //启用成本扣除项
                     switch (x.getDockType()){
                         case 1://百分比
@@ -711,41 +716,45 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 //匹配不到成本项阶梯值
                 continue;
             }
-            if (tpItems.size() > 1) {
-                //匹配到多个成本项
-                throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
-            }
-            //换算订单成本和盈亏
-            TopCostTpItemVo topCostTpItem = tpItems.stream().findFirst().get();
+//            if (tpItems.size() > 1) {
+//                //匹配到多个成本项
+//                throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
+//            }
             BigDecimal cost = new BigDecimal("0.00");//成本
             BigDecimal bigDecimal = new BigDecimal("100");
-            if (topCostTpItem.getDockStatus() == 1){
-                //启用成本扣除项
-                switch (topCostTpItem.getDockType()){
+            for (TopCostTpItemVo tpItem : tpItems) {
+                BigDecimal goodsPriceDecimal = goodsPrice;
+                //换算订单成本和盈亏
+                TopCostTpItemVo topCostTpItem = tpItem;
+                if (ObjectUtil.isNotNull(topCostTpItem.getDockStatus()) && topCostTpItem.getDockStatus() == 1){
+                    //启用成本扣除项
+                    switch (topCostTpItem.getDockType()){
+                        case 1://百分比
+                            //成本扣除金额
+                            BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
+                            BigDecimal multiply = goodsPriceDecimal.multiply(divide1);
+                            goodsPriceDecimal = goodsPriceDecimal.subtract(multiply);
+                            break;
+                        case 2://固定金额
+                            goodsPriceDecimal = goodsPriceDecimal.subtract(topCostTpItem.getDockValue());
+                            break;
+                        default:
+                            break;
+                    }
+                }
+                switch (topCostTpItem.getItemType()) {
                     case 1://百分比
-                        //成本扣除金额
-                        BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
-                        BigDecimal multiply = goodsPrice.multiply(divide1);
-                        goodsPrice = goodsPrice.subtract(multiply);
+                        BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
+                        BigDecimal multiply = goodsPriceDecimal.multiply(divide);
+                        cost = cost.add(multiply);
                         break;
                     case 2://固定金额
-                        goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
+                        cost = cost.add(topCostTpItem.getTypeValue());
                         break;
                     default:
                         break;
                 }
             }
-            switch (topCostTpItem.getItemType()) {
-                case 1://百分比
-                    BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
-                    cost = goodsPrice.multiply(divide);
-                    break;
-                case 2://固定金额
-                    cost = topCostTpItem.getTypeValue();
-                    break;
-                default:
-                    break;
-            }
             costTotal = costTotal.add(cost);
         }
         BigDecimal cost = costTotal.add(brokerage);
@@ -920,12 +929,15 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
 
     @Override
     public List<TopOldOrderGoodsListVo> getOrderGoodsList(TopOldOrderGoodsQuery query) {
-        TopOldOrder order = baseMapper.getOrderBySn(query.getOrderSn());
-        if (order.getOrderFrom() == 1) {
+        //学员数量
+        Integer userCount = 0;
+        List<TopOldOrderGoodsListVo> list;
+        if (query.getOrderFrom() == 1) {
             //新系统订单
-            List<TopOldOrderGoodsListVo> topOldOrderGoodsListVos = orderGoodsService.listByOrderSn(query);
-            if (CollectionUtils.isNotEmpty(topOldOrderGoodsListVos)) {
-                topOldOrderGoodsListVos.forEach(item -> {
+            list = orderGoodsService.listByOrderSn(query);
+            userCount = 1;
+            if (CollectionUtils.isNotEmpty(list)) {
+                list.forEach(item -> {
                     item.setUserCount(1);
                     //专业
                     if (StringUtils.isNotBlank(item.getSubjectIds())) {
@@ -953,66 +965,64 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     }
                 });
             }
-            return topOldOrderGoodsListVos;
-        }
-        //旧系统订单
-        List<TopOldOrderGoodsListVo> list = topOrderGoodsService.getListByQuery(query);
-        if (CollectionUtils.isNotEmpty(list)) {
-            //学员数量
-            Integer userCount = 0;
-            List<TopOldOrderGoods> goodsList = topOrderGoodsService
-                    .list(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, query.getOrderSn())
-                            .eq(TopOldOrderGoods::getStatus, 1)
-                            .ne(TopOldOrderGoods::getRefundStatus, 2)
-                            .in(TopOldOrderGoods::getPayStatus, Arrays.asList(2, 3, 4)));
-            if (CollectionUtils.isNotEmpty(goodsList)) {
-                userCount = goodsList.stream().map(TopOldOrderGoods::getUserCard).collect(Collectors.toSet()).size();
-            }
-            // 老系统查询学习状态
-            Map<String, String> params = new HashMap<>();
-            Long nowTime = DateUtils.getNowTime();
-            String sign = ToolsUtils.EncoderByMd5(query.getOrderSn() + nowTime.toString() + "pubilc2022");
-            params.put("stamp", nowTime.toString());
-            params.put("sign", sign);
-            params.put("orderSn", query.getOrderSn());
-            params.put("type", order.getOrderType().toString());
-            String respone = "";
-            try {
-                respone = HttpUtils.postFormBody(ORDER_STUDY, params);
-                if (!respone.contains("\"Status\":true")) {
-                    throw new CustomException("旧系统订单学员学习情况接口请求错误");
-                }
-                JSONObject jsonObject = JSONObject.parseObject(respone);
-                Object data = jsonObject.get("Data");
-                if (ObjectUtils.isNull(data)) {
-                    //data 为空
-                    list.forEach(x -> x.setStudyStatus("未开始"));
-                } else {
-                    List<TopOldOrderStudyVo> studyVos = JSONArray.parseArray(JSONObject.toJSONString(data), TopOldOrderStudyVo.class);
-                    list.forEach(item -> {
-                        item.setStudyStatus("未开始");
-                        TopOldOrderStudyVo studyVo = studyVos.stream().filter(x -> x.getUnderOrdeEnrollItemId().equals(item.getSignId())
-                                && x.getIdNum().equals(item.getUserCard())).findFirst().orElse(null);
-                        if (ObjectUtils.isNotNull(studyVo) && ObjectUtils.isNotNull(studyVo.getStudyHours())) {
-                            if (ObjectUtils.isNull(studyVo.getStudyHours()) && studyVo.getStudyHours() == 0) {
-                                item.setStudyStatus("未开始");
-                            } else if (studyVo.getStudyHours() < studyVo.getTotalHours()) {
-                                item.setStudyStatus("学习中");
-                            } else {
-                                item.setStudyStatus("已结束");
+        }else {
+            //旧系统订单
+            list = topOrderGoodsService.getListByQuery(query);
+            if (CollectionUtils.isNotEmpty(list)) {
+                List<TopOldOrderGoods> goodsList = topOrderGoodsService
+                        .list(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, query.getOrderSn())
+                                .eq(TopOldOrderGoods::getStatus, 1)
+                                .ne(TopOldOrderGoods::getCheckStatus, -1));
+                if (CollectionUtils.isNotEmpty(goodsList)) {
+                    userCount = goodsList.stream().map(TopOldOrderGoods::getUserCard).collect(Collectors.toSet()).size();
+                }
+                // 老系统查询学习状态
+                TopOldOrder order = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, query.getOrderSn()));
+                Map<String, String> params = new HashMap<>();
+                Long nowTime = DateUtils.getNowTime();
+                String sign = ToolsUtils.EncoderByMd5(query.getOrderSn() + nowTime.toString() + "pubilc2022");
+                params.put("stamp", nowTime.toString());
+                params.put("sign", sign);
+                params.put("orderSn", query.getOrderSn());
+                params.put("type", order.getOrderType().toString());
+                String respone = "";
+                try {
+                    respone = HttpUtils.postFormBody(ORDER_STUDY, params);
+                    if (!respone.contains("\"Status\":true")) {
+                        throw new CustomException("旧系统订单学员学习情况接口请求错误");
+                    }
+                    JSONObject jsonObject = JSONObject.parseObject(respone);
+                    Object data = jsonObject.get("Data");
+                    if (ObjectUtils.isNull(data)) {
+                        //data 为空
+                        list.forEach(x -> x.setStudyStatus("未开始"));
+                    } else {
+                        List<TopOldOrderStudyVo> studyVos = JSONArray.parseArray(JSONObject.toJSONString(data), TopOldOrderStudyVo.class);
+                        list.forEach(item -> {
+                            item.setStudyStatus("未开始");
+                            TopOldOrderStudyVo studyVo = studyVos.stream().filter(x -> x.getUnderOrdeEnrollItemId().equals(item.getSignId())
+                                    && x.getIdNum().equals(item.getUserCard())).findFirst().orElse(null);
+                            if (ObjectUtils.isNotNull(studyVo) && ObjectUtils.isNotNull(studyVo.getStudyHours())) {
+                                if (ObjectUtils.isNull(studyVo.getStudyHours()) && studyVo.getStudyHours() == 0) {
+                                    item.setStudyStatus("未开始");
+                                } else if (studyVo.getStudyHours() < studyVo.getTotalHours()) {
+                                    item.setStudyStatus("学习中");
+                                } else {
+                                    item.setStudyStatus("已结束");
+                                }
                             }
-                        }
-                    });
+                        });
+                    }
+                } catch (IOException e) {
+                    log.error("旧系统订单学员学习情况接口请求错误" + respone);
+                    throw new CustomException("旧系统订单学员学习情况接口请求错误");
                 }
-            } catch (IOException e) {
-                log.error("旧系统订单学员学习情况接口请求错误" + respone);
-                throw new CustomException("旧系统订单学员学习情况接口请求错误");
-            }
-            //数据处理
-            for (TopOldOrderGoodsListVo item : list) {
-                item.setUserCount(userCount);
             }
         }
+        //数据处理
+        for (TopOldOrderGoodsListVo item : list) {
+            item.setUserCount(userCount);
+        }
         return list;
     }
 
@@ -2928,7 +2938,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     List<TopCostTpItemVo> tpItems = new ArrayList<>();
                     for (TopCostTpItemVo x : items) {
                         BigDecimal price = goodsPrice;
-                        if (x.getDockStatus() == 1){
+                        if (ObjectUtil.isNotNull(x.getDockStatus()) && x.getDockStatus() == 1){
                             //启用成本扣除项
                             switch (x.getDockType()){
                                 case 1://百分比
@@ -2955,41 +2965,45 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                         //匹配不到成本项阶梯值
                         continue;
                     }
-                    if (tpItems.size() > 1) {
-                        //匹配到多个成本项
-                        throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", businessName, goodsPrice.toString()));
-                    }
-                    //换算订单成本和盈亏
-                    TopCostTpItemVo topCostTpItem = tpItems.stream().findFirst().get();
+//                    if (tpItems.size() > 1) {
+//                        //匹配到多个成本项
+//                        throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", businessName, goodsPrice.toString()));
+//                    }
                     BigDecimal cost = new BigDecimal("0.00");//成本
                     BigDecimal bigDecimal = new BigDecimal("100");
-                    if (topCostTpItem.getDockStatus() == 1){
-                        //启用成本扣除项
-                        switch (topCostTpItem.getDockType()){
+                    for (TopCostTpItemVo tpItem : tpItems) {
+                        BigDecimal goodsPriceDecimal = goodsPrice;
+                        //换算订单成本和盈亏
+                        TopCostTpItemVo topCostTpItem = tpItem;
+                        if (ObjectUtil.isNotNull(topCostTpItem.getDockStatus()) && topCostTpItem.getDockStatus() == 1){
+                            //启用成本扣除项
+                            switch (topCostTpItem.getDockType()){
+                                case 1://百分比
+                                    //成本扣除金额
+                                    BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
+                                    BigDecimal multiply = goodsPriceDecimal.multiply(divide1);
+                                    goodsPriceDecimal = goodsPriceDecimal.subtract(multiply);
+                                    break;
+                                case 2://固定金额
+                                    goodsPriceDecimal = goodsPriceDecimal.subtract(topCostTpItem.getDockValue());
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                        switch (topCostTpItem.getItemType()) {
                             case 1://百分比
-                                //成本扣除金额
-                                BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
-                                BigDecimal multiply = goodsPrice.multiply(divide1);
-                                goodsPrice = goodsPrice.subtract(multiply);
+                                BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
+                                BigDecimal multiply = goodsPriceDecimal.multiply(divide);
+                                cost = cost.add(multiply);
                                 break;
                             case 2://固定金额
-                                goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
+                                cost = cost.add(topCostTpItem.getTypeValue());
                                 break;
                             default:
                                 break;
                         }
                     }
-                    switch (topCostTpItem.getItemType()) {
-                        case 1://百分比
-                            BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
-                            cost = goodsPrice.multiply(divide);
-                            break;
-                        case 2://固定金额
-                            cost = topCostTpItem.getTypeValue();
-                            break;
-                        default:
-                            break;
-                    }
                     costTotal = costTotal.add(cost);
                 }
 
@@ -3067,7 +3081,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     List<TopCostTpItemVo> tpItems = new ArrayList<>();
                     for (TopCostTpItemVo x : items) {
                         BigDecimal price = goodsPrice;
-                        if (x.getDockStatus() == 1){
+                        if (ObjectUtil.isNotNull(x.getDockStatus()) && x.getDockStatus() == 1){
                             //启用成本扣除项
                             switch (x.getDockType()){
                                 case 1://百分比
@@ -3094,41 +3108,45 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                         //匹配不到成本项阶梯值
                         continue;
                     }
-                    if (tpItems.size() > 1) {
-                        //匹配到多个成本项
-                        throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", businessName, goodsPrice.toString()));
-                    }
-                    //换算订单成本和盈亏
-                    TopCostTpItemVo topCostTpItem = tpItems.stream().findFirst().get();
+//                    if (tpItems.size() > 1) {
+//                        //匹配到多个成本项
+//                        throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", businessName, goodsPrice.toString()));
+//                    }
                     BigDecimal cost = new BigDecimal("0.00");//成本
                     BigDecimal bigDecimal = new BigDecimal("100");
-                    if (topCostTpItem.getDockStatus() == 1){
-                        //启用成本扣除项
-                        switch (topCostTpItem.getDockType()){
+                    for (TopCostTpItemVo tpItem : tpItems) {
+                        BigDecimal goodsPriceDecimal = goodsPrice;
+                        //换算订单成本和盈亏
+                        TopCostTpItemVo topCostTpItem = tpItem;
+                        if (ObjectUtil.isNotNull(topCostTpItem.getDockStatus()) && topCostTpItem.getDockStatus() == 1){
+                            //启用成本扣除项
+                            switch (topCostTpItem.getDockType()){
+                                case 1://百分比
+                                    //成本扣除金额
+                                    BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
+                                    BigDecimal multiply = goodsPriceDecimal.multiply(divide1);
+                                    goodsPriceDecimal = goodsPriceDecimal.subtract(multiply);
+                                    break;
+                                case 2://固定金额
+                                    goodsPriceDecimal = goodsPriceDecimal.subtract(topCostTpItem.getDockValue());
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                        switch (topCostTpItem.getItemType()) {
                             case 1://百分比
-                                //成本扣除金额
-                                BigDecimal divide1 = topCostTpItem.getDockValue().divide(bigDecimal);
-                                BigDecimal multiply = goodsPrice.multiply(divide1);
-                                goodsPrice = goodsPrice.subtract(multiply);
+                                BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
+                                BigDecimal multiply = goodsPriceDecimal.multiply(divide);
+                                cost = cost.add(multiply);
                                 break;
                             case 2://固定金额
-                                goodsPrice = goodsPrice.subtract(topCostTpItem.getDockValue());
+                                cost = cost.add(topCostTpItem.getTypeValue());
                                 break;
                             default:
                                 break;
                         }
                     }
-                    switch (topCostTpItem.getItemType()) {
-                        case 1://百分比
-                            BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
-                            cost = goodsPrice.multiply(divide);
-                            break;
-                        case 2://固定金额
-                            cost = topCostTpItem.getTypeValue();
-                            break;
-                        default:
-                            break;
-                    }
                     costTotal = costTotal.add(cost);
                 }
                 BigDecimal cost = costTotal.add(brokerage);

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java

@@ -270,4 +270,7 @@ public class TopOldOrderVo {
 
 	@ApiModelProperty("是否坏账")
 	private boolean badBill;
+
+	@ApiModelProperty("下单企业")
+	private String purchaseOrg;
 }

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideLogMapper.xml

@@ -37,6 +37,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="tenantId != null and tenantId != ''">
             AND dl.tenant_id = #{tenantId}
         </if>
+        <if test="billType != null and billType != ''">
+            AND st.bill_type = #{billType}
+        </if>
         <if test="payStatus != null ">
             AND dl.pay_status = #{payStatus}
         </if>

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideOrderMapper.xml

@@ -26,6 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             oo.divide_company_money,
             oo.divide_seller_money,
             oo.brokerage,
+            oo.order_from,
             r.role_name
         FROM
             top_divide_order tdo

+ 27 - 5
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -90,6 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="creditStatus != null and creditStatus == 1">
             AND vto.pay_price = vto.order_received
         </if>
+        <if test="finishStatus != null">
+            AND vto.finish_status = #{finishStatus}
+        </if>
         <if test="invoiceStatus != null and invoiceStatus != ''">
             AND vto.invoice_status = #{invoiceStatus}
         </if>
@@ -102,6 +105,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="orderSn != null and orderSn != ''">
             AND vto.order_sn = #{orderSn}
         </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND vto.tenant_id = #{tenantId}
+        </if>
         <if test="orderSnList != null and orderSnList.size()!=0 ">
             AND vto.order_sn in
             <foreach collection="orderSnList" item="item" index="index" open="(" close=")" separator=",">
@@ -110,9 +116,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         <if test="keyword != null and keyword != ''">
             AND (
-            vto.create_org LIKE CONCAT( '%', #{keyword}, '%' )
---             OR vto.course_org LIKE CONCAT( '%', #{keyword}, '%' )
-            OR vto.order_org LIKE CONCAT( '%', #{keyword}, '%' ))
+            vto.order_sn LIKE CONCAT( '%', #{keyword}, '%' )
+            OR vto.create_no LIKE CONCAT( '%', #{keyword}, '%' )
+            OR vto.purchase_org LIKE CONCAT( '%', #{keyword}, '%' ))
         </if>
         order by vto.create_time DESC
     </select>
@@ -160,6 +166,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="orderSn != null and orderSn != ''">
             AND ot.order_sn = #{orderSn}
         </if>
+        <if test="finishStatus != null">
+            AND ot.finish_status = #{finishStatus}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND ot.tenant_id = #{tenantId}
+        </if>
         <if test="orderSnList != null and orderSnList.size()!=0 ">
             AND ot.order_sn in
             <foreach collection="orderSnList" item="item" index="index" open="(" close=")" separator=",">
@@ -168,8 +180,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         <if test="keyword != null and keyword != ''">
             AND (
-            ot.create_org LIKE CONCAT( '%', #{keyword}, '%' )
-            OR ot.order_org LIKE CONCAT( '%', #{keyword}, '%' ))
+            ot.order_sn LIKE CONCAT( '%', #{keyword}, '%' )
+            OR ot.create_no LIKE CONCAT( '%', #{keyword}, '%' )
+            OR ot.purchase_org LIKE CONCAT( '%', #{keyword}, '%' ))
         </if>
             ) + (SELECT
         COUNT( DISTINCT o.order_sn ) AS num
@@ -213,6 +226,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="invoiceStatus != null and invoiceStatus != ''">
             AND o.invoice_status = #{invoiceStatus}
         </if>
+        <if test="finishStatus != null">
+            AND o.finish_status = #{finishStatus}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND o.tenant_id = #{tenantId}
+        </if>
         <if test="startTime != null and startTime != ''">
             AND o.create_time <![CDATA[ >= ]]> #{startTime}
         </if>
@@ -227,6 +246,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <foreach collection="orderSnList" item="item" index="index" open="(" close=")" separator=",">
                 #{item}
             </foreach>
+        </if>
+        <if test="keyword != null and keyword != ''">
+            AND o.order_sn LIKE CONCAT( '%', #{keyword}, '%' )
         </if>
                 )) as number
     </select>

+ 3 - 6
zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

@@ -149,14 +149,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectList" parameterType="com.zhongzheng.modules.user.bo.UserQueryBo" resultMap="UserResult">
         SELECT DISTINCT
         u.*,
-        (case WHEN u.union_id is null then 0 ELSE 1 end) as user_bind_wx,
-        (case WHEN uwf.gzh_open_id is null then 0 ELSE 1 end) as user_follow_wx
+        (case WHEN u.union_id is null then 0 ELSE 1 end) as user_bind_wx
         <if test="getOrderNum != null and getOrderNum == 1" >
-        ,ou.goods_course_num,ou.goods_bank_num,ou.goods_live_num,uvl.last_visit_time,uvl.visit_from_plat,usl.study_from_plat,usl.last_study_time
+        ,ou.goods_course_num,ou.goods_bank_num,ou.goods_live_num
         </if>
         FROM
         `user` u
-        LEFT JOIN user_wx_follow uwf ON u.union_id = uwf.union_id
+       
         <if test="getOrderNum != null and getOrderNum == 1" >
             LEFT JOIN (
             SELECT
@@ -174,8 +173,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             GROUP BY
             o.user_id
             ) ou ON u.user_id = ou.user_id
-            LEFT JOIN (SELECT user_id,from_plat as visit_from_plat,create_time as last_visit_time from user_visit_log where id in(SELECT MAX(id) from user_visit_log GROUP BY user_id))uvl on u.user_id = uvl.user_id
-            LEFT JOIN (SELECT user_id,from_plat as study_from_plat,create_time as last_study_time from user_study_log where id in(SELECT MAX(id) from user_study_log GROUP BY user_id))usl on u.user_id = usl.user_id
         </if>
         <if test="businessId != null and businessId != ''">
             LEFT JOIN `order` o ON u.user_id = o.user_id and o.`status` = 1

+ 50 - 1
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -1384,7 +1384,21 @@
                cs.recording_url,
                cs.live_url,
                cs.live_start_time,
-               cs.live_end_time
+               cs.live_end_time,
+               ( SELECT
+                     IFNULL(COUNT(up.id),0)
+        FROM
+        user_period up
+        LEFT JOIN user_period_status ups ON up.id = ups.period_id
+        WHERE
+        up.grade_id =r.grade_id
+        AND up.user_id = #{userId}
+        AND up.module_id= r.module_id
+        and up.chapter_id=r.chapter_id
+        and up.course_id=r.course_id
+        and up.section_id=r.section_id
+        AND ups.period_status =1
+        and ups.record_end_time is not null) learning
         FROM (
                  SELECT from_unixtime(usr.update_time, '%Y-%m-%d') date,
         MAX( usr.update_time ) sort_time,
@@ -1418,6 +1432,41 @@
         ORDER BY r.sort_time DESC
     </select>
 
+    <select id="listUserRecord_COUNT" resultType="Long">
+        SELECT
+        count(* )
+        FROM (
+                 SELECT from_unixtime(usr.update_time, '%Y-%m-%d') date,
+        MAX( usr.update_time ) sort_time,
+		section_id,
+		MAX( usr.video_current_time ) video_current_time,
+		usr.goods_id,
+		usr.course_id,
+		usr.module_id,
+		usr.chapter_id,
+        usr.grade_id,
+        usr.order_goods_id
+                 FROM
+                     user_study_record usr
+                 WHERE
+                     usr.user_id = #{userId}
+                 GROUP BY
+                     from_unixtime( usr.update_time, '%Y-%m-%d' ),
+                     usr.section_id,
+                     usr.goods_id,
+                     usr.course_id,
+                     usr.module_id,
+                     usr.chapter_id,
+                     usr.grade_id,
+                     usr.grade_id,
+                     usr.order_goods_id
+             ) r
+                 LEFT JOIN course_section cs ON r.section_id = cs.section_id
+                 LEFT JOIN goods g ON g.goods_id = r.goods_id
+                 LEFT JOIN class_grade_user cgu ON cgu.grade_id = r.grade_id and cgu.user_id = #{userId}
+        where cgu.change_grade = 0
+    </select>
+
     <select id="getLastLive" parameterType="com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo"
             resultMap="SectionStudyRecordVoResult">
         SELECT usr.*,