jiangping
2024-12-20 53b6400ec10c8ca61ccec91c82c358d2488eead8
Merge remote-tracking branch 'origin/master'

# Conflicts:
# server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java
已修改12个文件
262 ■■■■■ 文件已修改
h5/api/staff.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/reserved.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/login.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/service.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/EnergyConsum.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsEfficiency.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/staff.js
@@ -66,6 +66,15 @@
    data
  })
}
//  解绑openId
export const delHkUserOpenid = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hksync/delHkUserOpenid',
    method: 'post',
    data
  })
}
//  隐患随手拍 创建
export const DangerCreate = (data) => {
h5/pages/driver/reserved.vue
@@ -188,7 +188,9 @@
                    setTimeout(() => {
                        this.showToast('预约申请成功')
                    })
                    this.$jump('/pages/driver/reservedRecord')
                    uni.redirectTo({
                        url: '/pages/driver/index'
                    })
                }
            })
        },
h5/pages/staff/index.vue
@@ -53,7 +53,8 @@
        stagingHead,
        wxAuthorize,
        refreshToken,
        app_url
        app_url,
        delHkUserOpenid
    } from '@/api'
    export default {
        data() {
@@ -173,11 +174,25 @@
                logoutPost({
                    isH5: 1
                }).then(res => {
                    const userInfo = uni.getStorageSync('userInfo')
                    const openId = uni.getStorageSync('openId')
                    this.$store.commit('empty')
                    if(openId){
                        delHkUserOpenid({
                            userName: userInfo.username,
                            openId
                        }).then(ress => {
                    setTimeout(() => {
                        window.location.href = app_url
                    }, 300)
                })
                    }else{
                        setTimeout(() => {
                            window.location.href = app_url
                        }, 300)
                    }
                })
            },
            getTaskInfo() {
                stagingHead({
h5/pages/staff/task/index.vue
@@ -542,6 +542,7 @@
                  font-weight: 400;
                    color: #999999;
                    width: 120rpx;
                    text-align: right;
                }
        .loading {
          color: $uni-color-primary;
h5/pages/staffLogin/login.vue
@@ -157,7 +157,11 @@
            })
          })
                    saveHkUserOpenid({})
        }else{
                    this.initCaptcha()
        }
      }, () => {
                this.initCaptcha()
      })
    }
  }
h5/utils/service.js
@@ -48,7 +48,8 @@
                fail: (err) => {
                    // 页面中弹框显示失败
                    uni.showToast({
                        title: '请求接口失败'
                        title: '请求接口失败',
                        icon:"none"
                    })
                    // 返回错误消息
screen/src/views/EnergyConsum.vue
@@ -347,7 +347,7 @@
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: data5.value.map(i => i.timeData)
      data: data5.value.map(i => dayjs(i.timeData).format('M'))
    },
    tooltip: {
      trigger: 'axis',
@@ -483,7 +483,7 @@
      }
    },
    grid: {
      top: '26%',
      top: '18%',
      left: '4%',
      right: '2%',
      bottom: '2%',
@@ -577,7 +577,7 @@
  myChart.setOption({
    grid: {
      top: '24%',
      top: '20%',
      left: '6%',
      right: '2%',
      bottom: '4%',
@@ -591,7 +591,7 @@
    },
    xAxis: {
      type: 'category',
      data: data2.value.map(i => i.timeData)
      data: data2.value.map(i => dayjs(i.timeData).format('M'))
    },
    yAxis: {
      type: 'value',
screen/src/views/LogisticsEfficiency.vue
@@ -47,7 +47,7 @@
                    data1.monthLastOutTotal) / data1.monthLastOutTotal) * 100).toFixed(1)) }}%</span>
                  <span v-else-if="activeTab1 == 1 && data1.yearLastOutTotal">{{ Math.abs((((data1.yearOutTotal -
                    data1.yearLastOutTotal) / data1.yearLastOutTotal) * 100).toFixed(1)) }}%</span>
                  <span v-else>-</span>
                  <span v-else style="margin-left: 10px;">-</span>
                </div>
              </div>
              <div class="train_wrap">
@@ -137,22 +137,26 @@
                <img src="@/assets/images/energy_ef/ic_renwuzongliang@2x.png" alt="">
                <div class="content">
                  <div class="name">当前任务量</div>
                  <div class="num"><span>{{ data4.planTaskNum }}</span>万支</div>
                  <div class="num"><span>{{ activeTab4 == 0 ? data1.currentOutNum : data1.currentInNum }}</span>万支</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt="">
                <div class="content">
                  <div class="name">当日完成任务总量</div>
                  <div class="num"><span class="today">{{ data4.finishTaskNum }}</span>万支</div>
                  <div class="num"><span v-if="data1.currentOutDoneNum || data1.currentInDoneNum" class="today">{{ activeTab4 == 0 ? data1.currentOutDoneNum :
                    data1.currentInDoneNum
                      }}</span>万支</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/energy_ef/ic_bili@2x.png" alt="">
                <div class="content">
                  <div class="name">已完成比例</div>
                  <div class="num" v-if="data4.finishTaskNum && data4.planTaskNum"><span class="finish">{{ ((
                    data4.finishTaskNum / data4.planTaskNum) * 100).toFixed(1) }}%</span>万支</div>
                  <div class="num">
                    <span v-if="activeTab4 == 0 && data1.currentOutNum" class="finish">{{ ((data1.currentOutDoneNum / data1.currentOutNum) * 100).toFixed(1) }}%</span>
                    <span v-if="activeTab4 == 1 && data1.currentInNum" class="finish">{{ ((data1.currentInDoneNum / data1.currentInNum) * 100).toFixed(1) }}%</span>
                  </div>
                </div>
              </div>
            </div>
@@ -870,17 +874,9 @@
    dataList3.value = result
  })
}
const data4 = ref({})
const activeTab4 = ref(0)
const tabClick4 = (val) => {
  activeTab4.value = val
  getData4()
}
const getData4 = () => {
  wljobData({ queryType: activeTab4.value }).then(res => {
    const result = res.data
    data4.value = result
  })
}
const dataList5 = ref([])
const data5 = ref(0)
@@ -947,7 +943,7 @@
  getData1()
  getData2()
  getData3()
  getData4()
  // getData4()
  getData5()
  getData6()
  getData7()
@@ -994,15 +990,15 @@
          .num {
            margin-right: 10px;
            font-weight: bold;
            font-size: 46px;
            height: 44px;
            line-height: 52px;
            font-size: 44px;
            height: 48px;
            line-height: 50px;
            font-weight: bold;
            color: #00F2F3;
            letter-spacing: 3px;
            background-image: -webkit-linear-gradient(top,
                #01D9FE 0%,
                #0177FE 60%,
                #1cdafb 0%,
                #0177FE 70%,
                #0177FE 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -3405,4 +3405,19 @@
        return dateBeforeDay.toString();
    }
    /**
     * 获取X年后的日期
     * @param date
     * @param beforMonths 下年 -1  上年 1
     * @return
     */
    public static String getBeforYear(Date date,Integer beforMonths){
        ZonedDateTime zonedDateTime = date.toInstant().atZone(ZoneId.systemDefault());
        // 转换为java.time.LocalDate,计算x天的日期
        LocalDate dateBeforeDay = zonedDateTime.toLocalDate().minusYears(beforMonths);
        return dateBeforeDay.toString();
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -12,6 +12,7 @@
import com.doumee.dao.web.response.DriverHomeVO;
import com.doumee.dao.web.response.LineUpVO;
import com.doumee.dao.web.response.PlatformWorkVO;
import com.doumee.dao.web.response.platformReport.WholeProvinceBoardVO;
import java.util.List;
@@ -244,4 +245,10 @@
    void timeOutWork();
    PlatformJob getLastWaitJob(String uuid, LoginUserInfo loginUser);
    void wholeProvinceCenterData(WholeProvinceBoardVO data);
    void centerDataForInOut(WholeProvinceBoardVO data);
    void centerDataOutInRata(WholeProvinceBoardVO data);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -35,6 +35,7 @@
import com.doumee.dao.web.response.DriverHomeVO;
import com.doumee.dao.web.response.LineUpVO;
import com.doumee.dao.web.response.PlatformWorkVO;
import com.doumee.dao.web.response.platformReport.WholeProvinceBoardVO;
import com.doumee.service.business.PlatformJobService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -2202,6 +2203,164 @@
    }
    /**
     * 累计出库量统计 - 大屏
     * @param data
     */
    @Override
    public void wholeProvinceCenterData(WholeProvinceBoardVO data){
//        //累计本年度出库量
//        List<PlatformJob> platformJobList = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>()
//                .lambda()
//                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED)
//                .isNotNull(PlatformJob::getDoneDate)
//                .in(PlatformJob::getType,Constants.platformJobType.wxczh,Constants.platformJobType.zyczh)
//                .like( PlatformJob::getDoneDate, DateUtil.getFomartDate(new Date(),"yyyy"))
//        );
//        data.setYearOutTotal(platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
//        data.setYearOutTimes(platformJobList.size());
//
//
//        List<PlatformJob> platformJobsMonthList = platformJobList.stream().filter(i->DateUtil.getFomartDate(i.getDoneDate(),"yyyy-MM").equals(DateUtil.getFomartDate(new Date(),"yyyy-MM"))).collect(Collectors.toList());
//        data.setMonthOutTotal(platformJobsMonthList.stream().filter(i->Objects.nonNull(i.getTotalNum())).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
//        data.setMonthOutTimes(platformJobsMonthList.size());
//        String beforYear = DateUtil.getBeforYear(new Date(),1);
//
//        //累计本年度出库量
//        List<PlatformJob> beforYearPlatformJobList = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>()
//                .lambda()
//                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED)
//                .isNotNull(PlatformJob::getDoneDate)
//                .in(PlatformJob::getType,Constants.platformJobType.wxczh,Constants.platformJobType.zyczh)
//                .like( PlatformJob::getDoneDate, beforYear.substring(0,4))
//        );
//
//        List<PlatformJob> beforPlatformJobsMonthList = platformJobList.stream().filter(i->DateUtil.getFomartDate(i.getDoneDate(),"yyyy-MM").equals(beforYear.substring(0,7))).collect(Collectors.toList());
//        //同比数据
//        data.setYearOutTotalOnYear(beforYearPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
//        data.setMonthOutTotalOnYear(beforPlatformJobsMonthList.stream().filter(i->Objects.nonNull(i.getTotalNum())).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
//
    }
    @Override
    public void centerDataForInOut(WholeProvinceBoardVO data){
//        //今日完成的出入库所有数据
//        List<PlatformJob> platformJobList = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>()
//                .lambda()
//                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED)
//                .like( PlatformJob::getDoneDate, DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"))
//        );
//        //今日之前 所有未完成的出入库数据 - WMS推送
//        List<PlatformJob> wmsPlatformJobList  = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>()
//                .lambda()
//                .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED
//                        ,Constants.PlatformJobStatus.CANCEL)
//                .eq(PlatformJob::getOrigin ,Constants.ONE)
//                .le(PlatformJob::getCreateDate, DateUtil.getFomartDate(new Date(),"yyyy-MM-dd") +" 23:59:59")
//        );
//        //今日之前 所有未完成的出入库数据 - 预约数据
//        List<PlatformJob> bookPlatformJobList  = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>()
//                .lambda()
//                .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED
//                        ,Constants.PlatformJobStatus.CANCEL)
//                .eq(PlatformJob::getOrigin ,Constants.ONE)
//                .le(PlatformJob::getArriveDate, DateUtil.getFomartDate(new Date(),"yyyy-MM-dd") +" 23:59:59")
//        );
//
//        BigDecimal finishOutTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        BigDecimal unFinishWmsOutTotal = wmsPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        BigDecimal unFinishBookOutTotal = bookPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//
//        BigDecimal finishInTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        BigDecimal unFinishWmsInTotal = wmsPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        BigDecimal unFinishBookInTotal = bookPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//
//        data.setOutTotal(finishOutTotal);
//        data.setOutPlanTotal(finishOutTotal.add(unFinishWmsOutTotal).add(unFinishBookOutTotal));
//
//        data.setInTotal(finishInTotal);
//        data.setInPlanTotal(finishInTotal.add(unFinishWmsInTotal).add(unFinishBookInTotal));
    }
    @Override
    public void centerDataOutInRata(WholeProvinceBoardVO data){
//        //累计本月度所有操作量
//        List<PlatformJob> platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
//                        .selectAll(PlatformJob.class)
//                        .select(" ( select ifnull(sum(p.param3),0) from platform_log p where p.obj_id = platform_job.id  ) ",PlatformJob::getWorkTime)
//                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED)
//                .isNotNull(PlatformJob::getDoneDate)
//                .like( PlatformJob::getDoneDate, DateUtil.getFomartDate(new Date(),"yyyy-MM"))
//        );
//
//        //获取本月所有出库量
//        BigDecimal monthOutTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        Long monthOutWorkTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getWorkTime()).reduce(Long.valueOf(Constants.ZERO),Long::sum);
//        BigDecimal monthInTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        Long monthInWorkTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getWorkTime()).reduce(Long.valueOf(Constants.ZERO),Long::sum);
//
//        data.setMonthOutRata(BigDecimal.ZERO);
//        //月度出库效率
//        if(Objects.nonNull(monthOutTotal) && Objects.nonNull(monthOutWorkTotal) && monthOutWorkTotal>0L && monthOutTotal.compareTo(BigDecimal.ZERO) > 0){
//            BigDecimal workTotal = new BigDecimal(monthOutWorkTotal);
//            data.setMonthOutRata(monthOutTotal.multiply(new BigDecimal(3600)).divide(workTotal,2,BigDecimal.ROUND_UP));
//        }
//
//        //月度入库效率
//
//        data.setMonthInRata(BigDecimal.ZERO);
//        if(Objects.nonNull(monthInTotal) && Objects.nonNull(monthInWorkTotal) && monthInWorkTotal>0L && monthInTotal.compareTo(BigDecimal.ZERO) > 0){
//            BigDecimal workTotal = new BigDecimal(monthInWorkTotal);
//            data.setMonthInRata(monthInTotal.multiply(new BigDecimal(3600)).divide(workTotal,2,BigDecimal.ROUND_UP));
//        }
//
//
//
//        List<PlatformJob> dayPlatformJobList = platformJobJoinMapper.selectList(new QueryWrapper<PlatformJob>()
//                .lambda()
//                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE
//                        ,Constants.PlatformJobStatus.AUTHED_LEAVE
//                        ,Constants.PlatformJobStatus.LEAVED)
//                .isNotNull(PlatformJob::getDoneDate)
//                .like( PlatformJob::getDoneDate, DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"))
//        );
//
//        BigDecimal dayOutTotal = dayPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        Long dayOutWorkTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.wxczh)||i.getType().equals(Constants.platformJobType.zyczh))).map(i->i.getWorkTime()).reduce(Long.valueOf(Constants.ZERO),Long::sum);
//        BigDecimal dayInTotal = dayPlatformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getTotalNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
//        Long dayInWorkTotal = platformJobList.stream().filter(i->Objects.nonNull(i.getTotalNum())&&(i.getType().equals(Constants.platformJobType.zycxh)||i.getType().equals(Constants.platformJobType.wxcxh)||i.getType().equals(Constants.platformJobType.sgscxh))).map(i->i.getWorkTime()).reduce(Long.valueOf(Constants.ZERO),Long::sum);
//
//        data.setDayOutRata(BigDecimal.ZERO);
//        //日出库效率
//        if(Objects.nonNull(dayOutTotal) && Objects.nonNull(dayOutWorkTotal) && dayOutWorkTotal>0L && dayOutTotal.compareTo(BigDecimal.ZERO) > 0){
//            BigDecimal workTotal = new BigDecimal(dayOutWorkTotal);
//            data.setDayOutRata(dayOutTotal.multiply(new BigDecimal(3600)).divide(workTotal,2,BigDecimal.ROUND_UP));
//        }
//        //日入库效率
//        data.setDayInRata(BigDecimal.ZERO);
//        if(Objects.nonNull(dayInTotal) && Objects.nonNull(dayInWorkTotal) && dayInWorkTotal>0L && dayInTotal.compareTo(BigDecimal.ZERO) > 0){
//            BigDecimal workTotal = new BigDecimal(dayInWorkTotal);
//            data.setMonthInRata(dayInTotal.multiply(new BigDecimal(3600)).divide(workTotal,2,BigDecimal.ROUND_UP));
//        }
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -229,6 +229,7 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Integer createFk(Visits visits,Boolean isERP,Integer source) {
        visits.setId(null);
        isValidBaseParam(visits);
        //检查是否必须答题,并且符合答题要求
        ProblemLog problemLog = isValidProblemLog(visits,source);