he2802 há 2 anos atrás
pai
commit
7397430696
20 ficheiros alterados com 520 adições e 9 exclusões
  1. 9 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  2. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java
  3. 255 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  4. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantBadBillConfigBo.java
  5. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/bo/TopDivideOrderAddBo.java
  6. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/bo/TopDivideOrderQueryBo.java
  7. 15 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/domain/TopDivideLog.java
  8. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/domain/TopDivideOrder.java
  9. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/mapper/TopDivideOrderMapper.java
  10. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/ITopDivideOrderService.java
  11. 0 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideLogServiceImpl.java
  12. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideOrderServiceImpl.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/vo/TopDivideLogVo.java
  14. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/vo/TopDivideOrderVo.java
  15. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  16. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java
  17. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderBankPayAddBo.java
  18. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideLogMapper.xml
  19. 89 2
      zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideOrderMapper.xml
  20. 3 3
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

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

@@ -41,6 +41,8 @@ public class ScheduleController extends BaseController {
 
     private final ITopOrderRecNoteService iTopOrderRecNoteService;
 
+    private final IScheduleService iScheduleService;
+
     @ApiOperation("发票开票结果更新")
     @GetMapping("/distributionRebate")
     public AjaxResult distributionRebate(UserQueryBo bo){
@@ -61,4 +63,11 @@ public class ScheduleController extends BaseController {
         iTopOrderRecNoteService.timeNoteBatchPush();
         return AjaxResult.success();
     }
+
+    @ApiOperation("应收应付月度账单")
+    @GetMapping("/makeDivideMonthBill")
+    public AjaxResult makeDivideMonthBill(){
+        iScheduleService.makeDivideMonthBill();
+        return AjaxResult.success();
+    }
 }

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

@@ -103,4 +103,6 @@ public interface IScheduleService extends IService<PolyvVideo> {
     void goodsCopyOne();
 
     void distributionRebate();
+
+    void makeDivideMonthBill();
 }

+ 255 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -22,6 +23,7 @@ import com.zhongzheng.modules.course.bo.CourseModuleChapterQueryBo;
 import com.zhongzheng.modules.course.bo.CourseSectionQueryBo;
 import com.zhongzheng.modules.course.domain.CourseSection;
 import com.zhongzheng.modules.course.domain.CourseSubject;
+import com.zhongzheng.modules.course.domain.MajorCategory;
 import com.zhongzheng.modules.course.service.*;
 import com.zhongzheng.modules.course.vo.CourseChapterSectionVo;
 import com.zhongzheng.modules.course.vo.CourseMenuVo;
@@ -96,7 +98,18 @@ import com.zhongzheng.modules.polyv.domain.PolyvVideo;
 import com.zhongzheng.modules.polyv.mapper.PolyvVideoMapper;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
 import com.zhongzheng.modules.schedule.service.IScheduleService;
+import com.zhongzheng.modules.system.bo.SysTenantBadBillConfigBo;
+import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
+import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.system.vo.SysTenantVo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideOrderAddBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
+import com.zhongzheng.modules.top.financial.domain.TopDivideLog;
+import com.zhongzheng.modules.top.financial.service.ITopDivideLogService;
+import com.zhongzheng.modules.top.financial.service.ITopDivideOrderService;
+import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.user.service.ITopSysConfigService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.*;
 import com.zhongzheng.modules.user.mapper.UserPlanMapper;
@@ -112,6 +125,7 @@ import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
@@ -274,6 +288,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     @Autowired
     private IWisdomService iWisdomService;
 
+    @Autowired
+    private ITopSysConfigService topConfigService;
+
     @Autowired
     private IDistributionRebateService iDistributionRebateService;
 
@@ -283,6 +300,15 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     @Autowired
     private IDistributionSellerService iDistributionSellerService;
 
+    @Autowired
+    private ITopDivideOrderService iTopDivideOrderService;
+
+    @Autowired
+    private ITopDivideLogService iTopDivideLogService;
+
+    @Autowired
+    private  ISysTenantService iSysTenantService;
+
     @Value("${aliyun.sms.OpenTheGoodsCode}")
     private String OpenTheGoodsCode;
 
@@ -1156,6 +1182,235 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void makeDivideMonthBill() {
+        //生成机构分成
+        // 上月起始
+        Calendar cal1 = new GregorianCalendar();
+        cal1.add(Calendar.MONTH, -1);
+        cal1.set(Calendar.DAY_OF_MONTH, 1);
+        cal1.set(Calendar.HOUR_OF_DAY, 0);
+        cal1.set(Calendar.MINUTE, 0);
+        cal1.set(Calendar.SECOND, 0);
+
+        // 上月末尾
+        Calendar cal2 = Calendar.getInstance();
+        cal2.add(Calendar.MONTH, -1);
+        cal2.set(
+                Calendar.DAY_OF_MONTH, cal2.getActualMaximum(Calendar.DAY_OF_MONTH));
+        cal2.set(Calendar.HOUR_OF_DAY, 23);
+        cal2.set(Calendar.MINUTE, 59);
+        cal2.set(Calendar.SECOND, 59);
+        //所有机构列表
+        SysTenantQueryBo tenantQueryBo = new SysTenantQueryBo();
+        tenantQueryBo.setStatus(1);
+        List< SysTenantVo > companyList = iSysTenantService.queryList(tenantQueryBo);
+        //生成月度记录
+        for(SysTenantVo tenantVo : companyList){
+            TopDivideLog divideLog = new TopDivideLog();
+            divideLog.setTenantId(tenantVo.getTenantId().toString());
+            divideLog.setDivideType(1);
+            divideLog.setPayStatus(2);
+            divideLog.setMonthTime(cal1.getTimeInMillis()/1000);
+            int year = cal1.get(Calendar.YEAR);
+            int month = cal1.get(Calendar.MONTH) + 1;
+            divideLog.setYear(year);
+            divideLog.setMonth(month);
+            divideLog.setCreateTime(DateUtils.getNowTime());
+            divideLog.setUpdateTime(DateUtils.getNowTime());
+            //判断账单是否生成
+            TopDivideLog nowMonth = iTopDivideLogService.getOne(new LambdaQueryWrapper<TopDivideLog>()
+                    .eq(TopDivideLog::getTenantId,tenantVo.getTenantId())
+                    .eq(TopDivideLog::getDivideType,1)
+                    .eq(TopDivideLog::getYear,year)
+                    .eq(TopDivideLog::getMonth,month)
+                    .last("limit 1"));
+            if(Validator.isNotEmpty(nowMonth)){
+                continue;
+            }
+            //获取上个账单
+            LambdaQueryWrapper<TopDivideLog> lqw = Wrappers.lambdaQuery();
+            TopDivideLog divideLogLast = iTopDivideLogService.getOne(lqw.eq(TopDivideLog::getTenantId,tenantVo.getTenantId()).eq(TopDivideLog::getDivideType,1).orderByDesc(TopDivideLog::getId).last("limit 1"));
+            divideLog.setDeductMoney(new BigDecimal(0));
+            if(Validator.isNotEmpty(divideLogLast)){
+                //上个月流入未扣金额
+                divideLog.setDeductMoney(divideLogLast.getUnDeductMoney());
+            }
+            //创建账单
+            if(iTopDivideLogService.save(divideLog)){
+                TopDivideOrderQueryBo queryBo1 = new TopDivideOrderQueryBo();
+                queryBo1.setAccomplishStartTime(cal1.getTimeInMillis()/1000);
+                queryBo1.setAccomplishEndTime(cal2.getTimeInMillis()/1000);
+                queryBo1.setDivideModel(1);
+                queryBo1.setTenantId(tenantVo.getTenantId());
+                //订单总待付分成
+                BigDecimal totalPayMoney = new BigDecimal(0);
+                List<TopDivideOrderVo> list1 = iTopDivideOrderService.getMonthFinishList(queryBo1);
+                for(TopDivideOrderVo vo : list1){
+                    totalPayMoney = totalPayMoney.add(vo.getDivideCompanyMoney());
+                    TopDivideOrderAddBo addBo = new TopDivideOrderAddBo();
+                    addBo.setDivideLogId(divideLog.getId());
+                    addBo.setOrderSn(vo.getOrderSn());
+                    addBo.setOrderType(1);
+                    iTopDivideOrderService.insertByAddBo(addBo);
+                }
+                divideLog.setTotalPayMoney(totalPayMoney);
+                //退款待扣分成
+                queryBo1.setRefundTimeStartTime(cal1.getTimeInMillis()/1000);
+                queryBo1.setRefundTimeEndTime(cal2.getTimeInMillis()/1000);
+                List<TopDivideOrderVo> reList = iTopDivideOrderService.getMonthRefundList(queryBo1);
+                //退款待扣分成
+                BigDecimal deductMoney = new BigDecimal(0);
+                for(TopDivideOrderVo vo : reList){
+                    deductMoney = deductMoney.add(vo.getDivideMoney());
+                    TopDivideOrderAddBo addBo = new TopDivideOrderAddBo();
+                    addBo.setDivideLogId(divideLog.getId());
+                    addBo.setOrderSn(vo.getOrderSn());
+                    addBo.setRefundSn(vo.getRefundSn());
+                    addBo.setOrderType(2);
+                    iTopDivideOrderService.insertByAddBo(addBo);
+                }
+                //加上上个月流入待扣分成
+                divideLog.setDeductMoney(divideLog.getDeductMoney().add(deductMoney));
+
+                if(divideLog.getTotalPayMoney().compareTo(divideLog.getDeductMoney()) == 0){
+                    divideLog.setRealDeductMoney(divideLog.getDeductMoney());
+                    divideLog.setUnDeductMoney(new BigDecimal(0));
+                    divideLog.setPayMoney(new BigDecimal(0));
+                }
+                else if(divideLog.getTotalPayMoney().compareTo(divideLog.getDeductMoney()) == -1){
+                    //小于
+                    divideLog.setRealDeductMoney(divideLog.getTotalPayMoney());
+                    divideLog.setUnDeductMoney(divideLog.getDeductMoney().subtract(divideLog.getTotalPayMoney()));
+                    divideLog.setPayMoney(new BigDecimal(0));
+                }
+                else if(divideLog.getTotalPayMoney().compareTo(divideLog.getDeductMoney()) == 1){
+                    //大于
+                    divideLog.setRealDeductMoney(divideLog.getDeductMoney());
+                    divideLog.setUnDeductMoney(new BigDecimal(0));
+                    divideLog.setPayMoney(divideLog.getTotalPayMoney().subtract(divideLog.getDeductMoney()));
+                }
+                iTopDivideLogService.updateById(divideLog);
+                //坏账
+                String badBillJson = topConfigService.selectConfigByKeyNoCache("bad_bill");
+                if(Validator.isNotEmpty(badBillJson)){
+                    Calendar c = Calendar.getInstance();
+                    c.add(Calendar.YEAR, -1);
+                    Long year1 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year2 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year3 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year4 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year5 = c.getTimeInMillis()/1000;
+                    List<SysTenantBadBillConfigBo> configList = JSONArray.parseArray(badBillJson, SysTenantBadBillConfigBo.class);
+                    BigDecimal badPrice = new BigDecimal(0);
+                    for(SysTenantBadBillConfigBo configBo : configList){
+                        if(configBo.getYearType()==1){
+                            TopDivideOrderQueryBo orderQueryBo1 = new TopDivideOrderQueryBo();
+                            orderQueryBo1.setTenantId(tenantVo.getTenantId());
+                            orderQueryBo1.setBuyStartTime(year1);
+                            BigDecimal price1 = iTopDivideOrderService.getMonthBadSum(orderQueryBo1);
+                            BigDecimal value1 = price1.divide(new BigDecimal(100)).multiply(new BigDecimal(configBo.getDetainRate()));
+                            badPrice = badPrice.add(value1);
+                        }
+                        else if(configBo.getYearType()==2){
+                            TopDivideOrderQueryBo orderQueryBo2 = new TopDivideOrderQueryBo();
+                            orderQueryBo2.setTenantId(tenantVo.getTenantId());
+                            orderQueryBo2.setBuyStartTime(year1);
+                            orderQueryBo2.setBuyEndTime(year2);
+                            BigDecimal price2 = iTopDivideOrderService.getMonthBadSum(orderQueryBo2);
+                            BigDecimal value2 = price2.divide(new BigDecimal(100)).multiply(new BigDecimal(configBo.getDetainRate()));
+                            badPrice = badPrice.add(value2);
+                        }
+                        else if(configBo.getYearType()==3){
+                            TopDivideOrderQueryBo orderQueryBo3 = new TopDivideOrderQueryBo();
+                            orderQueryBo3.setTenantId(tenantVo.getTenantId());
+                            orderQueryBo3.setBuyStartTime(year2);
+                            orderQueryBo3.setBuyEndTime(year3);
+                            BigDecimal price3 = iTopDivideOrderService.getMonthBadSum(orderQueryBo3);
+                            BigDecimal value3 = price3.divide(new BigDecimal(100)).multiply(new BigDecimal(configBo.getDetainRate()));
+                            badPrice = badPrice.add(value3);
+                        }
+                        else if(configBo.getYearType()==4){
+                            TopDivideOrderQueryBo orderQueryBo4 = new TopDivideOrderQueryBo();
+                            orderQueryBo4.setTenantId(tenantVo.getTenantId());
+                            orderQueryBo4.setBuyStartTime(year3);
+                            orderQueryBo4.setBuyEndTime(year4);
+                            BigDecimal price4 = iTopDivideOrderService.getMonthBadSum(orderQueryBo4);
+                            BigDecimal value4 = price4.divide(new BigDecimal(100)).multiply(new BigDecimal(configBo.getDetainRate()));
+                            badPrice = badPrice.add(value4);
+                        }
+                        else if(configBo.getYearType()==5){
+                            TopDivideOrderQueryBo orderQueryBo5 = new TopDivideOrderQueryBo();
+                            orderQueryBo5.setTenantId(tenantVo.getTenantId());
+                            orderQueryBo5.setBuyStartTime(year4);
+                            orderQueryBo5.setBuyEndTime(year5);
+                            BigDecimal price5 = iTopDivideOrderService.getMonthBadSum(orderQueryBo5);
+                            BigDecimal value5 = price5.divide(new BigDecimal(100)).multiply(new BigDecimal(configBo.getDetainRate()));
+                            badPrice.add(value5);
+                        }
+                        else if(configBo.getYearType()==6){
+                            TopDivideOrderQueryBo orderQueryBo6 = new TopDivideOrderQueryBo();
+                            orderQueryBo6.setTenantId(tenantVo.getTenantId());
+                            orderQueryBo6.setBuyStartTime(year5);
+                            BigDecimal price6 = iTopDivideOrderService.getMonthBadSum(orderQueryBo6);
+                            BigDecimal value6 = price6.divide(new BigDecimal(100)).multiply(new BigDecimal(configBo.getDetainRate()));
+                            badPrice = badPrice.add(value6);
+                        }
+                    }
+                    divideLog.setBadMoney(badPrice);
+                    BigDecimal lastBadPrice = new BigDecimal(0);
+                    //和上个账单坏账比较
+                    if(Validator.isNotEmpty(divideLogLast)){
+                        lastBadPrice = divideLogLast.getRealBadMoney();
+                    }
+                    if(badPrice.compareTo(lastBadPrice) == 0){
+                        //等于互相抵消
+                        divideLog.setRealBadMoney(badPrice);
+                    }
+                    else if(badPrice.compareTo(lastBadPrice) == -1){
+                        //小于
+                        BigDecimal diffBad = lastBadPrice.multiply(badPrice);
+                        divideLog.setPayMoney(divideLog.getPayMoney().add(diffBad));
+                        divideLog.setRealBadMoney(badPrice);
+                    }
+                    else if(badPrice.compareTo(lastBadPrice) == 1){
+                        //大于
+                        BigDecimal diffBad = badPrice.multiply(lastBadPrice);
+                        if(divideLog.getPayMoney().compareTo(diffBad) == 0){
+                            divideLog.setPayMoney(new BigDecimal(0));
+                            divideLog.setRealBadMoney(badPrice);
+                        }
+                        if(divideLog.getPayMoney().compareTo(diffBad) == -1){
+                            //小于
+                            divideLog.setPayMoney(new BigDecimal(0));
+                            divideLog.setRealBadMoney(lastBadPrice.add(divideLog.getPayMoney()));
+                        }
+                        if(divideLog.getPayMoney().compareTo(diffBad) == 1){
+                            //大于
+                            divideLog.setPayMoney(divideLog.getPayMoney().multiply(diffBad));
+                            divideLog.setRealBadMoney(badPrice);
+                        }
+                    }
+                    iTopDivideLogService.updateById(divideLog);
+                }
+
+            }
+        }
+        /*for(SysTenantVo tenantVo : companyList){
+
+
+            //获取上个账单
+            TopDivideLog divideLog = iTopDivideLogService.getOne(lqw.eq(TopDivideLog::getTenantId,tenantVo.getTenantId()).eq(TopDivideLog::getDivideType,1).orderByDesc(TopDivideLog::getId).last("limit 1"));
+
+        }*/
+
+    }
+
     @Override
     public void closeTimeOutOrder() {
         OrderQueryBo bo = new OrderQueryBo();

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantBadBillConfigBo.java

@@ -16,7 +16,7 @@ import lombok.Data;
 public class SysTenantBadBillConfigBo {
 
     /** 账龄 */
-    @ApiModelProperty("账龄 1(1年以上),2(1-2年),3(2-3年),4(3-4年),5(5年以上)")
+    @ApiModelProperty("账龄 1(1年以上),2(1-2年),3(2-3年),4(3-4年),5(4-5年),6(5年以上)")
     private Integer yearType;
 
     @ApiModelProperty("扣押百分比")

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

@@ -36,4 +36,6 @@ public class TopDivideOrderAddBo {
     /** 更新时间 */
     @ApiModelProperty("更新时间")
     private Long updateTime;
+    @ApiModelProperty("退款号")
+    private String refundSn;
 }

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/bo/TopDivideOrderQueryBo.java

@@ -63,4 +63,28 @@ public class TopDivideOrderQueryBo extends BaseEntity {
 	@Excel(name = "审核状态:0待审核,1已通过,-1未通过," , readConverterExp = "2=待支付,3已支付")
 	@ApiModelProperty("审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付)")
 	private Integer checkStatus;
+
+	@ApiModelProperty("完单开始时间")
+	private Long accomplishStartTime;
+
+	@ApiModelProperty("完单结束时间")
+	private Long accomplishEndTime;
+
+	@ApiModelProperty("分成模式 1机构分成 2业务员分成")
+	private Integer divideModel;
+
+	@ApiModelProperty("企业ID")
+	private Long tenantId;
+
+	@ApiModelProperty("退款开始时间")
+	private Long refundTimeStartTime;
+
+	@ApiModelProperty("退款结束时间")
+	private Long refundTimeEndTime;
+
+	@ApiModelProperty("下单开始时间")
+	private Long buyStartTime;
+
+	@ApiModelProperty("下单结束时间")
+	private Long buyEndTime;
 }

+ 15 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/domain/TopDivideLog.java

@@ -33,8 +33,7 @@ private static final long serialVersionUID=1L;
     private Integer month;
     /** 待付分成(元),待审提成(元),待付佣金(元) */
     private BigDecimal payMoney;
-    /** 业务ID */
-    private Long sellerId;
+
     /** 状态 1正常 0关闭 */
     private Integer status;
     /** 创建时间 */
@@ -52,6 +51,10 @@ private static final long serialVersionUID=1L;
     /** 待扣分成(元),待扣提成(元) */
     private BigDecimal deductMoney;
 
+    private BigDecimal totalPayMoney;
+
+    private Long monthTime;
+
     private String tenantId;
     /** 业务员名称 */
     private String createUsername;
@@ -60,4 +63,14 @@ private static final long serialVersionUID=1L;
     /** 业务号 */
     private String createNo;
 
+    private Long payTime;
+
+    private BigDecimal badMoney;
+
+    private BigDecimal realBadMoney;
+
+    private BigDecimal realDeductMoney;
+
+    private BigDecimal unDeductMoney;
+
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/domain/TopDivideOrder.java

@@ -40,4 +40,5 @@ private static final long serialVersionUID=1L;
     /** 更新时间 */
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
+    private String refundSn;
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/mapper/TopDivideOrderMapper.java

@@ -8,6 +8,7 @@ import com.zhongzheng.modules.top.financial.domain.TopDivideOrder;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -20,4 +21,12 @@ public interface TopDivideOrderMapper extends BaseMapper<TopDivideOrder> {
     List<TopDivideOrderVo> getFinishList(TopDivideOrderQueryBo bo);
 
     List<TopDivideOrderVo> getRefundList(TopDivideOrderQueryBo bo);
+
+    List<TopDivideOrderVo> getMonthFinishList(TopDivideOrderQueryBo bo);
+
+    List<String> getMonthFinishAllTenant(TopDivideOrderQueryBo bo);
+
+    List<TopDivideOrderVo> getMonthRefundList(TopDivideOrderQueryBo bo);
+
+    BigDecimal getMonthBadSum(TopDivideOrderQueryBo bo);
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/ITopDivideOrderService.java

@@ -9,6 +9,7 @@ import com.zhongzheng.modules.top.financial.domain.TopDivideOrder;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
 
@@ -54,4 +55,12 @@ public interface ITopDivideOrderService extends IService<TopDivideOrder> {
 
 	List<TopDivideOrderVo> getMonthOrderList(TopDivideOrderQueryBo bo);
 
+	List<TopDivideOrderVo> getMonthFinishList(TopDivideOrderQueryBo bo);
+
+	List<String> getMonthFinishAllTenant(TopDivideOrderQueryBo bo);
+
+	List<TopDivideOrderVo> getMonthRefundList(TopDivideOrderQueryBo bo);
+
+	BigDecimal getMonthBadSum(TopDivideOrderQueryBo bo);
+
 }

+ 0 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideLogServiceImpl.java

@@ -55,7 +55,6 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
         lqw.eq(bo.getYear() != null, TopDivideLog::getYear, bo.getYear());
         lqw.eq(bo.getMonth() != null, TopDivideLog::getMonth, bo.getMonth());
         lqw.eq(bo.getPayMoney() != null, TopDivideLog::getPayMoney, bo.getPayMoney());
-        lqw.eq(bo.getSellerId() != null, TopDivideLog::getSellerId, bo.getSellerId());
         lqw.eq(bo.getStatus() != null, TopDivideLog::getStatus, bo.getStatus());
         lqw.eq(bo.getDivideType() != null, TopDivideLog::getDivideType, bo.getDivideType());
         lqw.eq(bo.getPayStatus() != null, TopDivideLog::getPayStatus, bo.getPayStatus());

+ 21 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideOrderServiceImpl.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.Page;
 
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -118,4 +119,24 @@ public class TopDivideOrderServiceImpl extends ServiceImpl<TopDivideOrderMapper,
         fList.addAll(rList);
         return fList;
     }
+
+    @Override
+    public List<TopDivideOrderVo> getMonthFinishList(TopDivideOrderQueryBo bo) {
+        return baseMapper.getMonthFinishList(bo);
+    }
+
+    @Override
+    public List<String> getMonthFinishAllTenant(TopDivideOrderQueryBo bo) {
+        return baseMapper.getMonthFinishAllTenant(bo);
+    }
+
+    @Override
+    public List<TopDivideOrderVo> getMonthRefundList(TopDivideOrderQueryBo bo) {
+        return baseMapper.getMonthRefundList(bo);
+    }
+
+    @Override
+    public BigDecimal getMonthBadSum(TopDivideOrderQueryBo bo) {
+        return baseMapper.getMonthBadSum(bo);
+    }
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/vo/TopDivideLogVo.java

@@ -108,5 +108,7 @@ public class TopDivideLogVo {
 	private Integer billType;
 
 	private Long monthTime;
+	@ApiModelProperty("打款时间")
+	private Long payTime;
 
 }

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

@@ -66,4 +66,18 @@ public class TopDivideOrderVo {
 	@Excel(name = "1已打款 0未打款")
 	@ApiModelProperty("1已打款 0未打款")
 	private Integer payStatus;
+
+	@ApiModelProperty("订单时间(完单时间 退款时间)")
+	private Long orderTime;
+	/** 机构分成钱 */
+	@ApiModelProperty("机构分成钱")
+	private BigDecimal divideCompanyMoney;
+	/** 业务员分成钱 */
+	@ApiModelProperty("业务员分成钱")
+	private BigDecimal divideSellerMoney;
+	@ApiModelProperty("待扣分成钱")
+	private BigDecimal divideMoney;
+	@ApiModelProperty("退款单号")
+	private String refundSn;
+
 }

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

@@ -40,6 +40,7 @@ import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
+import com.zhongzheng.modules.system.bo.SysTenantBadBillConfigBo;
 import com.zhongzheng.modules.system.domain.SysOldOrg;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysOldOrgService;
@@ -67,6 +68,7 @@ import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
 import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
 import com.zhongzheng.modules.top.user.domain.TopSysRole;
 import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
+import com.zhongzheng.modules.top.user.service.ITopSysConfigService;
 import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
 import com.zhongzheng.modules.top.user.service.ITopSysUserRoleService;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
@@ -188,6 +190,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private IOrderGoodsRefundService orderGoodsRefundService;
 
+    @Autowired
+    private ITopSysConfigService topConfigService;
+
     @Value("${oldOrder.studyRecord}")
     private String ORDER_STUDY;
 
@@ -2659,11 +2664,63 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Override
     public List<TopOldOrderVo> queryReceiveList(TopOldOrderQueryBo bo) {
         List<TopOldOrderVo> list = this.baseMapper.queryReceiveList(bo);
+        String badBillJson = topConfigService.selectConfigByKeyNoCache("bad_bill");
         for (TopOldOrderVo vo : list) {
             if (vo.getCreditStatus() == 0 && Validator.isNotEmpty(vo.getPredictReceiveTime())) {
                 Integer predictDay = DateUtils.dayBetween(vo.getPredictReceiveTime(), DateUtils.getNowTime());
                 vo.setPredictReceiveDay(predictDay);
             }
+            if(Validator.isEmpty(badBillJson)){
+                vo.setBadBill(false);
+            }else{
+                List<SysTenantBadBillConfigBo> configList = JSONArray.parseArray(badBillJson, SysTenantBadBillConfigBo.class);
+                for(SysTenantBadBillConfigBo configBo : configList){
+                    Calendar c = Calendar.getInstance();
+                    c.add(Calendar.YEAR, -1);
+                    Long year1 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year2 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year3 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year4 = c.getTimeInMillis()/1000;
+                    c.add(Calendar.YEAR, -1);
+                    Long year5 = c.getTimeInMillis()/1000;
+                    if(Validator.isNotEmpty(vo.getBuyTime())){
+                        if(configBo.getYearType()==1){
+                            if(vo.getBuyTime()<year1){
+                                vo.setBadBill(true);
+                            }
+                        }
+                        if(configBo.getYearType()==2){
+                            if(vo.getBuyTime()<year1&&vo.getBuyTime()>year2){
+                                vo.setBadBill(true);
+                            }
+                        }
+                        if(configBo.getYearType()==3){
+                            if(vo.getBuyTime()<year2&&vo.getBuyTime()>year3){
+                                vo.setBadBill(true);
+                            }
+                        }
+                        if(configBo.getYearType()==4){
+                            if(vo.getBuyTime()<year3&&vo.getBuyTime()>year4){
+                                vo.setBadBill(true);
+                            }
+                        }
+                        if(configBo.getYearType()==5){
+                            if(vo.getBuyTime()<year4&&vo.getBuyTime()>year5){
+                                vo.setBadBill(true);
+                            }
+                        }
+                        if(configBo.getYearType()==6){
+                            if(vo.getBuyTime()<year5){
+                                vo.setBadBill(true);
+                            }
+                        }
+                    }
+
+                }
+            }
         }
         return list;
     }

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

@@ -246,4 +246,7 @@ public class TopOldOrderVo {
 	private Integer checkType;
 	@ApiModelProperty("分成审核状态:0待审核,1已通过,-1未通过,2待支付,3已支付")
 	private Integer divideCheckStatus;
+
+	@ApiModelProperty("是否坏账")
+	private boolean badBill;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderBankPayAddBo.java

@@ -66,4 +66,7 @@ public class TopOrderBankPayAddBo {
     private String loginName;
 
     private Long loginId;
+
+    @ApiModelProperty("分成记录ID")
+    private Long divideLogId;
 }

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

@@ -150,4 +150,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
+
 </mapper>

+ 89 - 2
zhongzheng-system/src/main/resources/mapper/modules/top/TopDivideOrderMapper.xml

@@ -19,11 +19,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             tdo.*,
             st.tenant_name ,
             cl.check_status,
-            dl.pay_status
+            dl.pay_status,
+            (SELECT accomplish_time from v_top_order where  order_sn = tdo.order_sn) orderTime,
+            oo.remark
         FROM
             top_divide_order tdo
                 LEFT JOIN top_divide_log dl ON tdo.divide_log_id = dl.id
                 LEFT JOIN sys_tenant st ON dl.tenant_id = st.tenant_id
+                LEFT JOIN top_old_order oo ON tdo.order_sn =  oo.order_sn
                 LEFT JOIN
             top_old_order_check_log cl ON (dl.divide_type+1) = cl.check_from AND  cl.check_sign = 1  AND  tdo.order_sn = cl.order_sn
         WHERE
@@ -35,13 +38,97 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT
             tdo.*,
             st.tenant_name,
-            dl.pay_status
+            dl.pay_status,
+               oo.remark
         FROM
             top_divide_order tdo
                 LEFT JOIN top_divide_log dl ON tdo.divide_log_id = dl.id
                 LEFT JOIN sys_tenant st ON dl.tenant_id = st.tenant_id
+                LEFT JOIN top_old_order oo ON tdo.order_sn =  oo.order_sn
         WHERE
             tdo.order_type = 2
           AND tdo.divide_log_id = #{divideLogId}
     </select>
+
+    <select id="getMonthFinishAllTenant" parameterType="com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo"  resultType="String">
+        SELECT
+        v.tenant_id
+        FROM
+        v_top_order v
+        WHERE
+        1 = 1
+        AND v.finish_status = 1
+        <if test="divideModel != null and divideModel != ''">
+            AND v.divide_model = #{divideModel}
+        </if>
+        <if test="accomplishStartTime != null and accomplishStartTime != ''">
+            AND v.accomplish_time BETWEEN #{accomplishStartTime} and #{accomplishEndTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND v.tenant_id = #{tenantId}
+        </if>
+        GROUP BY v.tenant_id
+    </select>
+
+    <select id="getMonthFinishList" parameterType="com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo"  resultType="com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo">
+        SELECT
+        v.order_sn,
+        v.divide_company_money,
+        v.divide_seller_money,
+        v.tenant_id
+        FROM
+        v_top_order v
+        WHERE
+        1 = 1
+        AND v.finish_status = 1
+        <if test="divideModel != null and divideModel != ''">
+            AND v.divide_model = #{divideModel}
+        </if>
+        <if test="accomplishStartTime != null and accomplishStartTime != ''">
+            AND v.accomplish_time BETWEEN #{accomplishStartTime} and #{accomplishEndTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND v.tenant_id = #{tenantId}
+        </if>
+    </select>
+
+    <select id="getMonthRefundList" parameterType="com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo"  resultType="com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo">
+        SELECT
+        tor.order_sn,
+        tor.divide_money,
+        tor.tenant_id,
+        tor.refund_sn
+        FROM
+        top_old_order_refund tor
+        WHERE
+        1 = 1
+        AND tor.period_status = 3
+        <if test="divideModel != null and divideModel != ''">
+            AND tor.divide_model = #{divideModel}
+        </if>
+        <if test="refundTimeStartTime != null and refundTimeStartTime != ''">
+            AND tor.refund_time BETWEEN #{refundTimeStartTime} and #{refundTimeEndTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND tor.tenant_id = #{tenantId}
+        </if>
+    </select>
+
+    <select id="getMonthBadSum" parameterType="com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo"  resultType="BigDecimal">
+        SELECT
+        IFNULL(SUM(too.order_uncollected),0)
+        FROM
+        top_old_order too
+        WHERE
+        too.status=1
+        <if test="buyStartTime != null and buyStartTime != ''">
+            AND too.buy_time <![CDATA[ >= ]]> #{buyStartTime}
+        </if>
+        <if test="buyEndTime != null and buyEndTime != ''">
+            AND too.buy_time <![CDATA[ <= ]]> #{buyEndTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND too.tenant_id = #{tenantId}
+        </if>
+    </select>
 </mapper>

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

@@ -257,12 +257,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             top_old_order too
                 LEFT JOIN sys_tenant st ON too.tenant_id = st.tenant_id
                 LEFT JOIN top_order_rec_note rn ON too.tenant_id = rn.tenant_id and too.order_sn = rn.order_sn
-        where 1=1
+        where too.status=1
         <if test="startTime != null and startTime != ''">
-            AND too.create_time <![CDATA[ >= ]]> #{startTime}
+            AND too.buy_time <![CDATA[ >= ]]> #{startTime}
         </if>
         <if test="endTime != null and endTime != ''">
-            AND too.create_time <![CDATA[ <= ]]> #{endTime}
+            AND too.buy_time <![CDATA[ <= ]]> #{endTime}
         </if>
         <if test="keyNo != null and keyNo != ''">
             AND (too.tenant_id like concat('%', #{keyNo}, '%') or too.create_no like concat('%', #{keyNo}, '%'))