jiangping
2025-04-28 8470e06b5ce5189162f9f6cd3f2cea7d14ad80af
Merge remote-tracking branch 'origin/master'

# Conflicts:
# server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
已修改10个文件
722 ■■■■■ 文件已修改
h5/App.vue 517 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/n_pages/visitorApplication/visitorApplication.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java 2 ●●● 补丁 | 查看 | 原始文档 | 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 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/App.vue
@@ -1,272 +1,299 @@
<script>
import { wxAuthorize, refreshToken, app_url } from '@/api'
export default {
  onLaunch: function () {
    window.addEventListener("popstate", (event) => {
            const path = this.$route.fullPath
            // console.log('path', path);
        if(path == '/pages/login/login' || path == '/'){
                window.location.href = app_url
            }
            if(path == '/pages/wdata/home'){
                window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/wdata/home'
            }
            if(path == '/pages/waybill/home'){
                window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
            }
    })
        uni.setStorageSync('transportList', [])
        console.log('onLaunch')
  },
  onShow: function () {
    console.log('App Show')
  },
  onHide: function () {
    console.log('App Hide')
  }
}
    import {
        wxAuthorize,
        refreshToken,
        app_url
    } from '@/api'
    export default {
        onLaunch: function() {
            window.addEventListener("popstate", (event) => {
                const path = this.$route.fullPath
                // console.log('path', path);
                if (path == '/pages/login/login' || path == '/') {
                    window.location.href = app_url
                }
                if (path == '/pages/wdata/home') {
                    window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/wdata/home'
                }
                if (path == '/pages/waybill/home') {
                    window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
                }
            })
            uni.setStorageSync('transportList', [])
            console.log('onLaunch')
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        }
    }
</script>
<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
html, body {
    height: auto;
    min-height: 100%;
    overflow: visible;
}
.flex-cb {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
    /*每个页面公共css */
    @import "uview-ui/index.scss";
.container {
  height: 100%;
  width: 100%;
  max-width: 800rpx;
  overflow-y: auto;
}
.empty_wrap{
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    color: #666666;
    min-height: 600rpx;
    image{
        width: 300rpx;
        height: 300rpx;
    html,
    body {
        height: auto;
        min-height: 100%;
        overflow: visible;
    }
}
.doumee-container .ivu-tabs-nav {
  width: 100%;
}
.doumee-container .ivu-tabs-nav .ivu-tabs-tab {
  width: calc(100% / 3);
}
    .flex-cb {
        display: flex;
        justify-content: space-between;
        align-items: center;
    }
.doumee-container .ivu-tabs-nav .ivu-tabs-tab {
  margin-right: 0;
  text-align: center;
}
    .container {
        height: 100%;
        width: 100%;
        max-width: 800rpx;
        overflow-y: auto;
    }
.cell {
  background-color: #fff;
  display: flex;
  justify-content: space-between;
  align-items: center;
  min-height: 100rpx;
  padding: 24rpx 30rpx;
  box-sizing: border-box;
  border-bottom: 1rpx solid #eee;
  font-size: 15rpx;
  position: relative;
}
    .empty_wrap {
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        color: #666666;
        min-height: 600rpx;
.cell .title {
  flex-shrink: 0;
  color: #222;
  line-height: 20rpx;
  height: 20rpx;
  width: 28%;
  margin-right: 5%;
}
        image {
            width: 300rpx;
            height: 300rpx;
        }
    }
.cell .content {
  flex: 1;
  font-size: 28rpx;
  font-weight: 400;
  color: #999999;
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
    .doumee-container .ivu-tabs-nav {
        width: 100%;
    }
.cell .content .input {
  width: 100%;
  height: 100%;
  font-size: 28rpx;
  font-weight: 400;
  color: #333333;
  text-align: right;
}
    .doumee-container .ivu-tabs-nav .ivu-tabs-tab {
        width: calc(100% / 3);
    }
.cell.is-link::after {
  content: "";
  display: block;
  width: 8rpx;
  height: 8rpx;
  transform: rotate(-45deg);
  border-right: 1rpx solid #999999;
  border-bottom: 1rpx solid #999999;
  margin-left: 5rpx;
}
    .doumee-container .ivu-tabs-nav .ivu-tabs-tab {
        margin-right: 0;
        text-align: center;
    }
.card {
  background-color: #fff;
  padding: 16rpx;
  position: relative;
}
    .cell {
        background-color: #fff;
        display: flex;
        justify-content: space-between;
        align-items: center;
        min-height: 100rpx;
        padding: 24rpx 30rpx;
        box-sizing: border-box;
        border-bottom: 1rpx solid #eee;
        font-size: 15rpx;
        position: relative;
    }
.card::after {
  content: "";
  display: block;
  position: absolute;
  width: calc(100% - 32rpx);
  height: 0;
  bottom: 0;
  left: 16rpx;
  border-bottom: 1rpx solid #f7f7f7;
}
    .cell .title {
        flex-shrink: 0;
        color: #222;
        line-height: 20rpx;
        height: 20rpx;
        width: 28%;
        margin-right: 5%;
    }
.card .title {
  color: #777777;
  margin-bottom: 12rpx;
}
    .cell .content {
        flex: 1;
        font-size: 28rpx;
        font-weight: 400;
        color: #999999;
        display: flex;
        align-items: center;
        justify-content: flex-end;
    }
.card .content {
  color: #222;
}
    .cell .content .input {
        width: 100%;
        height: 100%;
        font-size: 28rpx;
        font-weight: 400;
        color: #333333;
        text-align: right;
    }
.placeholder9 {
  color: #999999 !important;
  font-size: 28rpx;
}
.placeholder3{
    color: #333333 !important;
}
.red{
    color: red !important;
}
    .cell.is-link::after {
        content: "";
        display: block;
        width: 8rpx;
        height: 8rpx;
        transform: rotate(-45deg);
        border-right: 1rpx solid #999999;
        border-bottom: 1rpx solid #999999;
        margin-left: 5rpx;
    }
//设置圆角
checkbox .uni-checkbox-input {
  border-radius: 50%;
}
    .card {
        background-color: #fff;
        padding: 16rpx;
        position: relative;
    }
checkbox .uni-checkbox-input.uni-checkbox-input-checked {
  color: #fff !important;
  border: 1px solid #4d99a8 !important;
  background-color: #4d99a8 !important;
}
    .card::after {
        content: "";
        display: block;
        position: absolute;
        width: calc(100% - 32rpx);
        height: 0;
        bottom: 0;
        left: 16rpx;
        border-bottom: 1rpx solid #f7f7f7;
    }
checkbox .uni-checkbox-input.uni-checkbox-input-checked:before {
  /* color: #4d99a8 !important;  */
  /* border: 1px solid #4d99a8 !important; */
  /* font-size: 58rpx; */
  /* border-radius: 50%; */
}
    .card .title {
        color: #777777;
        margin-bottom: 12rpx;
    }
//
    .card .content {
        color: #222;
    }
view {
  box-sizing: border-box;
}
    .placeholder9 {
        color: #999999 !important;
        font-size: 28rpx;
    }
image {
  box-sizing: border-box;
  margin: 0;
  display: flex;
}
input {
  font-size: 30rpx;
}
textarea {
  box-sizing: border-box;
  // background-color: #f7f7f7;
  font-size: 30rpx !important;
  padding: 0;
  border-radius: 8rpx;
  color: #333333 !important;
}
.u-textarea {
  padding: 0 !important;
  color: #333333 !important;
}
    .placeholder3 {
        color: #333333 !important;
    }
.df_ac {
  display: flex;
  align-items: center;
}
    .red {
        color: red !important;
    }
.main_app {
  padding: 10rpx 30rpx 0rpx;
  font-size: 28rpx;
  color: #333333;
}
.popupShow {
  overflow: hidden;
  position: fixed;
  width: 100%;
}
.placeholder6 {
  color: #666666;
  font-size: 28rpx;
}
.primaryColor {
  color: $uni-color-primary;
}
.avatar {
  width: 64rpx;
  height: 64rpx;
  border-radius: 50%;
  margin-right: 20rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: $uni-color-primary;
  color: #fff;
  font-size: 30rpx;
}
.placeholder9 {
  color: #999999;
  font-size: 28rpx;
}
.fs24 {
  font-size: 24rpx;
}
.mr24 {
  margin-right: 24rpx;
}
.mt24 {
  margin-top: 24rpx;
}
    //设置圆角
    checkbox .uni-checkbox-input {
        border-radius: 50%;
    }
.mr12 {
  margin-right: 12rpx;
}
.ml12 {
  margin-left: 12rpx;
}
.ml6 {
  margin-left: 6rpx;
}
.mt6 {
  margin-top: 6rpx;
}
.mr6 {
  margin-right: 6rpx;
}
</style>
    checkbox .uni-checkbox-input.uni-checkbox-input-checked {
        color: #fff !important;
        border: 1px solid #4d99a8 !important;
        background-color: #4d99a8 !important;
    }
    checkbox .uni-checkbox-input.uni-checkbox-input-checked:before {
        /* color: #4d99a8 !important;  */
        /* border: 1px solid #4d99a8 !important; */
        /* font-size: 58rpx; */
        /* border-radius: 50%; */
    }
    //
    view {
        box-sizing: border-box;
    }
    image {
        box-sizing: border-box;
        margin: 0;
        display: flex;
    }
    input {
        font-size: 30rpx;
    }
    textarea {
        box-sizing: border-box;
        // background-color: #f7f7f7;
        font-size: 30rpx !important;
        padding: 0;
        border-radius: 8rpx;
        color: #333333 !important;
    }
    .u-textarea {
        padding: 0 !important;
        color: #333333 !important;
    }
    .df_ac {
        display: flex;
        align-items: center;
    }
    .main_app {
        padding: 10rpx 30rpx 0rpx;
        font-size: 28rpx;
        color: #333333;
    }
    .popupShow {
        overflow: hidden;
        position: fixed;
        width: 100%;
    }
    .placeholder6 {
        color: #666666;
        font-size: 28rpx;
    }
    .primaryColor {
        color: $uni-color-primary;
    }
    .avatar {
        width: 64rpx;
        height: 64rpx;
        border-radius: 50%;
        margin-right: 20rpx;
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: $uni-color-primary;
        color: #fff;
        font-size: 30rpx;
    }
    .placeholder9 {
        color: #999999;
        font-size: 28rpx;
    }
    .fs24 {
        font-size: 24rpx;
    }
    .mr24 {
        margin-right: 24rpx;
    }
    .mt24 {
        margin-top: 24rpx;
    }
    .mr12 {
        margin-right: 12rpx;
    }
    .ml12 {
        margin-left: 12rpx;
    }
    .ml6 {
        margin-left: 6rpx;
    }
    .mt6 {
        margin-top: 6rpx;
    }
    .mr6 {
        margin-right: 6rpx;
    }
</style>
h5/n_pages/visitorApplication/visitorApplication.vue
@@ -575,10 +575,10 @@
        title: '证件类型不能为空',
        icon: 'none'
      })
      if (!this.withUserList.idcardNo) return uni.showToast({
        title: '证件号码不能为空',
        icon: 'none'
      })
      // if (!this.withUserList.idcardNo) return uni.showToast({
      //   title: '证件号码不能为空',
      //   icon: 'none'
      // })
      if (!this.withUserList.faceImg) return uni.showToast({
        title: '人脸照片不能为空',
        icon: 'none'
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -1316,7 +1316,7 @@
        for (Rooms rooms:roomList) {
            //查询当前会议室是否存在进行中的会议
            if(bookingsMapper.selectCount(new QueryWrapper<Bookings>().lambda().eq(Bookings::getIsdeleted,Constants.ZERO)
                    .eq(Bookings::getStatus,Constants.ZERO).isNotNull(Bookings::getStartTimeReal)
                    .eq(Bookings::getStatus,Constants.ZERO).isNotNull(Bookings::getStartTimeReal).apply(" DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(START_TIME, '%Y-%m-%d') ")
            )<=Constants.ZERO){
                //根据会议室获取可以开启的会议记录(第一条记录)
                Bookings bookings = bookingsMapper.selectOne(new QueryWrapper<Bookings>().lambda()
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -92,7 +92,7 @@
    @GetMapping("/timer/sms/sendWaitingSmsNotice")
    ApiResponse sendWaitingSmsNotice();
    @ApiOperation("【数字化月台】月台今日作业外完成通知定时")
    @ApiOperation("【数字化月台】月台今日作业未完成通知定时")
    @GetMapping("/timer/platformJob/sendUnFinishNotice")
    ApiResponse sendUnFinishNotice();
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java
@@ -245,6 +245,17 @@
    }
    @ApiOperation("恢复作业")
    @PostMapping("/restoreWork")
    @CloudRequiredPermission("business:platform:update")
    public ApiResponse restoreWork (@RequestBody JobOperateDTO jobOperateDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        jobOperateDTO.setLoginUserInfo(getLoginUser(token));
        PlatformJob platformJob = platformJobService.restoreWork(jobOperateDTO);
        platformJobService.cancelInPark(platformJob);
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("完成作业")
    @PostMapping("/finishWork")
    @CloudRequiredPermission("business:platform:update")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java
@@ -171,6 +171,16 @@
    }
    @ApiOperation("恢复作业")
    @PostMapping("/restoreWork")
    @CloudRequiredPermission("business:platform:update")
    public ApiResponse restoreWork (@RequestBody JobOperateDTO jobOperateDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        jobOperateDTO.setLoginUserInfo(getLoginUser(token));
        PlatformJob platformJob = platformJobService.restoreWork(jobOperateDTO);
        platformJobService.cancelInPark(platformJob);
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("完成作业")
    @PostMapping("/finishWork")
    @CloudRequiredPermission("business:platform:update")
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -782,7 +782,7 @@
    public void  sendUnFinishNotice(SystemDictDataBiz systemDictDataBiz,WxNoticeConfigMapper wxNoticeConfigMapper,Integer unFinishNum,String objCode,
                                           List<String> openIds){
        String token = this.getToken(systemDictDataBiz);
        if(StringUtils.isBlank(token)){
        if(StringUtils.isBlank(token)||Constants.equalsInteger(unFinishNum,Constants.ZERO)){
            return;
        }
        try{
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -257,4 +257,11 @@
    void sendUnFinishNotice();
    void dealJobFinish(List<Integer> jobIdList);
    /**
     * 恢复作业
     * @param jobOperateDTO
     * @return
     */
    PlatformJob restoreWork(JobOperateDTO jobOperateDTO);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -335,8 +335,14 @@
                .ge(pageWrap.getModel().getBeginDoneDateStart() != null, PlatformJob::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getBeginDoneDateStart()))
                .le(pageWrap.getModel().getBeginDoneDateEnd() != null, PlatformJob::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getBeginDoneDateEnd()))
                .isNotNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()), PlatformJob::getContractNum)
                .isNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), PlatformJob::getContractNum)
//                .isNotNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()),
//                        PlatformJob::getContractNum)
//                .isNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), PlatformJob::getContractNum)
                .exists(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()),
                        "select 1  from platform_wms_detail tt where tt.isdeleted=0  and  tt.job_id=t.id")
                .notExists(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()),
                        "select 1  from platform_wms_detail tt where tt.isdeleted=0  and  tt.job_id=t.id")
                .exists(StringUtils.isNotBlank(pageWrap.getModel().getWmsContractNum()),
                        "select tt.id from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num='"+pageWrap.getModel().getWmsContractNum()+"' and  tt.job_id=t.id");
        queryWrapper.orderByDesc(PlatformJob::getCreateDate);
@@ -737,8 +743,7 @@
                    PlatformGroup platformGroup = platformGroupMapper.selectById(groupId);
                    if(Objects.nonNull(platformGroup)&&StringUtils.isNotBlank(platformGroup.getUnFinishNoticeUsers())){
                        List<SystemUser> systemUserList = systemUserMapper.selectList(new QueryWrapper<SystemUser>().lambda()
                                .eq(SystemUser::getDeleted,Constants.ZERO)
                                .eq(SystemUser::getStatus,Constants.ZERO)
                                .eq(SystemUser::getDeleted,Constants.ZERO).eq(SystemUser::getStatus,Constants.ZERO)
                                .isNotNull(SystemUser::getOpenid)
                                .in(SystemUser::getMemberId,Arrays.asList(platformGroup.getUnFinishNoticeUsers().split(",")))
                        );
@@ -756,23 +761,6 @@
            }
        }
    }
    public static void main(String[] args) {
        Integer key1 =20;
        Integer key2 =20;
        Integer key3 =30;
        Integer key4 =40;
        List<Integer> list = new ArrayList<>();
        list.add(key1);
        list.add(key2);
        list.add(key3);
        list.add(key4);
        Set<Integer> setList = new HashSet<>(list);
        for (Integer groupId:setList) {
            System.out.println(groupId);
        }
    }
    public void distanceSignIn(SignInDTO signInDTO , PlatformJob platformJob){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1078,27 +1078,31 @@
        data.setCurrentOutDoneNum(getSumTotalByList(currentDoneNum,0,1));//今日完成量
        data.setCurrentInNum(beforeInNum.add(data.getCurrentInDoneNum()).add(currentInNum));//当前入库总任务成量
        data.setCurrentOutNum(beforeOutNum.add(data.getCurrentOutDoneNum()).add(currentOutNum));//当前出库总任务成量
        //------------今日出入库效率----------------
        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
        if(outHours.compareTo(new BigDecimal(0))>0){
            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//当前入库总任务成量
        }
        if(inHours.compareTo(new BigDecimal(0))>0){
            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//当前入库总任务成量
        }
        data.setTodayOutRate(getDayTotalRata(data.getCurrentOutDoneNum(),DateUtil.getToday()));//当日出库效率
        data.setTodayInRate(getDayTotalRata(data.getCurrentInDoneNum(),DateUtil.getToday()));//当日入库效率
        data.setMonthOutRate(getMonthRata(monthNum,Constants.ZERO));//本月出库效率
        data.setMonthInRate(getMonthRata(monthNum,Constants.ONE));//本月出库效率
        //------------今日出入库效率----------------
//        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
//        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
//
//        if(outHours.compareTo(new BigDecimal(0))>0){
//            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//当前入库总任务成量
//        }
//        if(inHours.compareTo(new BigDecimal(0))>0){
//            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//当前入库总任务成量
//        }
        //------------本月出入库效率----------------
//        BigDecimal outMonthNum = getSumTotalByList(monthNum,0,null).add(data.getCurrentOutDoneNum());
        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
        if(outMonthHours.compareTo(new BigDecimal(0))>0){
            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
        }
        if(inMonthHours.compareTo(new BigDecimal(0))>0){
            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
        }
//        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
//        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
//        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
//        if(outMonthHours.compareTo(new BigDecimal(0))>0){
//            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月出库效率
//        }
//        if(inMonthHours.compareTo(new BigDecimal(0))>0){
//            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
//        }
        return data;
    }
@@ -1110,10 +1114,9 @@
        if(platformLogList!=null && platformLogList.size()>0){
            return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)60);
        }
        return new BigDecimal(0);
    }
    private BigDecimal getTotalDoneTimes(List<PlatformJob> list, Integer type) {
        BigDecimal r = new BigDecimal(0);
        if(list==null || list.size() == 0){
@@ -1149,6 +1152,94 @@
        return r;
    }
    private BigDecimal getMonthRata(List<PlatformJob> list, Integer type) {
        BigDecimal r = new BigDecimal(0);
        if(list==null || list.size() == 0){
            return r;
        }
        List<PlatformJob> jobList= new ArrayList<>();
        for(PlatformJob job : list) {
            if (!(Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.DONE.getKey())
                    || Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.LEAVED.getKey())
                    || Constants.equalsInteger(job.getStatus(), Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()))) {
                //只查询完成数据
                continue;
            }
            if (type != null && type == 0 && (Constants.equalsInteger(job.getType(), Constants.ONE) || Constants.equalsInteger(job.getType(), Constants.THREE))) {
                //出库
                jobList.add(job);
            }
            if (type != null && type == 1 && (Constants.equalsInteger(job.getType(), Constants.ZERO) || Constants.equalsInteger(job.getType(), Constants.TWO) || Constants.equalsInteger(job.getType(), Constants.FOUR))) {
                //入库
                jobList.add(job);
            }
        }
        if(CollectionUtils.isNotEmpty(jobList)){
            //获取任务数据
            List<String> jobDataList = list.stream().filter(i->Objects.nonNull(i.getDoneDate())).map(i->DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd")).collect(Collectors.toList());
            for (String jobDate:jobDataList) {
                //过滤当天的数据
                List<PlatformJob> platformJobList = list.stream().
                        filter(i->jobDate.equals(DateUtil.formatDate(i.getDoneDate(),"yyyy-MM-dd"))).collect(Collectors.toList());
                if(CollectionUtils.isNotEmpty(platformJobList)){
                    //获取今天的
                    r = r.add(this.getDayTotalRata(getSumTotalByList(platformJobList,type,null),jobDate));
                }
            }
        }
        return r;
    }
    private BigDecimal getDayTotalRata(BigDecimal totalAmount,String today) {
        BigDecimal r = new BigDecimal(0);
        //查询今日最早/最晚的作业数据
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>()
                .lambda()
                .apply(" ( to_days(param1) =  '"+today+"' or to_days(param2) =  '"+today+"' ) ")
        );
        if(totalAmount.compareTo(BigDecimal.ZERO)==0||CollectionUtils.isEmpty(platformLogList)){
            return BigDecimal.ZERO;
        }
        if(platformLogList!=null && platformLogList.size()>0){
            return this.getWorkTime(totalAmount,platformLogList);
        }
        return r;
    }
    /**
     * 查询作业时长(小时)
     * @param totalAmount
     * @param platformLogList
     * @return
     */
    public BigDecimal getWorkTime(BigDecimal totalAmount,List<PlatformLog> platformLogList){
        if(CollectionUtils.isEmpty(platformLogList)){
            return BigDecimal.ZERO;
        }
        //获取开始时间
        List<Long> startTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam1())).map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam1()).getTime()).collect(Collectors.toList());
        Long startTime  = Collections.min(startTimeList);
        //获取结束时间
        List<Long> endTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam2())).map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam2()).getTime()).collect(Collectors.toList());
        Long endTime = Collections.max(endTimeList);
        if(Objects.isNull(startTime)
            || Objects.isNull(endTime) || (startTime>=endTime)){
            return BigDecimal.ZERO;
        }
        return   totalAmount.divide(new BigDecimal(( endTime - startTime )+"").divide(new BigDecimal("3600000"),2,BigDecimal.ROUND_HALF_UP),2,BigDecimal.ROUND_HALF_UP) ;
    }
    private BigDecimal  getSumTotalByList(List<PlatformJob> list,Integer type,Integer status) {
        BigDecimal r = new BigDecimal(0);
        if(list==null || list.size() == 0){