Browse Source

作息接口调整

luojun 2 years ago
parent
commit
0e95ce4b34

+ 4 - 2
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java

@@ -70,13 +70,15 @@ public class SysWorkTimeController extends BaseController {
     @RequiresPermissions("system:set:monthedit")
     @PostMapping("/month/edit")
     public AjaxResult monthedit(@RequestBody WorkTimeMonthEditNewDto sysWorkTimeSet) {
-//        Date today = DateUtil.beginOfDay(new Date());
+        Date today = DateUtil.beginOfDay(new Date());
         List<Long> orgIds = sysWorkTimeSet.getOrgIdList();
-//        List<SysWorkTime> exists = sysWorkTimeService.findByYmd(orgIds, today);
+        List<SysWorkTime> exists = sysWorkTimeService.findByYmd(orgIds, today);
         List<SysWorkTime> workTimeLists = new ArrayList<>();
         for (Long orgId : orgIds) {
             List<SysWorkTime> batchnew = sysWorkTimeService.batchnew(orgId, sysWorkTimeSet.getWorkTimeList());
         }
+
+        sysWorkTimeService.handleTodayChanged(orgIds, sysWorkTimeSet.getWorkTimeList(), exists, today);
         //生成任务
         // TODO: 2023/6/19
 //        if(CollectionUtil.isNotEmpty(orgIds)){

+ 46 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/WorkTimeMonthOnAppController.java

@@ -0,0 +1,46 @@
+package com.xunmei.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import com.xunmei.common.core.web.controller.BaseController;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.domain.SysWorkTime;
+import com.xunmei.system.dto.WorkTimeMonthEditNewDto;
+import com.xunmei.system.service.ISysWorkTimeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.List;
+
+@Api(description = "APP端作息月统计")
+@RestController
+@RequestMapping("/api/work/time/month/app")
+public class WorkTimeMonthOnAppController extends BaseController {
+    @Autowired
+    private ISysWorkTimeService sysWorkTimeService;
+    @ApiOperation(value = "按月")
+    @PostMapping(value = "/find/month")
+    AjaxResult findMonth(@RequestBody @Valid SysWorkTime request) {
+        List<SysWorkTime> workTimeOnAppVos = sysWorkTimeService.findByOrgAndMonth(request);
+        return success(workTimeOnAppVos);
+    }
+    @ApiOperation(value = "编辑")
+    @PostMapping(value = "/edit")
+    AjaxResult edit(@RequestBody @Valid final WorkTimeMonthEditNewDto sysWorkTimeSet) {
+        Date today = DateUtil.beginOfDay(new Date());
+        List<Long> orgIds = sysWorkTimeSet.getOrgIdList();
+        List<SysWorkTime> exists = sysWorkTimeService.findByYmd(sysWorkTimeSet.getOrgIdList(), today);
+        for (Long orgId : orgIds) {
+            List<SysWorkTime> batchnew = sysWorkTimeService.batchnew(orgId, sysWorkTimeSet.getWorkTimeList());
+        }
+        sysWorkTimeService.handleTodayChanged(sysWorkTimeSet.getOrgIdList(),sysWorkTimeSet.getWorkTimeList(), exists, today);
+//        this.workTimeMonthService.toLogNote("批量操作作息月[ %s ]", request.getOrgIdList());
+        return success();
+    }
+}

+ 7 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/domain/SysWorkTime.java

@@ -16,6 +16,8 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import com.xunmei.common.core.web.domain.BaseEntity;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * 【请填写功能名称】对象 sys_work_time
  *
@@ -55,7 +57,11 @@ public class SysWorkTime extends BaseEntity {
      */
     @ApiModelProperty(value = "营业终了")
     private String closeTime;
-
+    @ApiModelProperty(value = "月份")
+    @TableField(exist = false)
+    private Date month;
+    @TableField(exist = false)
+    private String monthStr;
     /**
      * 是否营业
      */

+ 2 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysWorkTimeMapper.java

@@ -29,7 +29,8 @@ public interface SysWorkTimeMapper extends BaseMapper<SysWorkTime> {
      * @return 【请填写功能名称】
      */
     public SysWorkTime selectSysWorkTimeById(String id);
-
+    List<SysWorkTime> findByOrgAndMonth(SysWorkTime request);
+    List<SysWorkTime> findByYmd( List<Long> orgId, String date);
     /**
      * 查询【请填写功能名称】列表
      *

+ 4 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java

@@ -1,5 +1,6 @@
 package com.xunmei.system.service;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -25,6 +26,9 @@ public interface ISysWorkTimeService extends IService<SysWorkTime> {
      */
     public SysWorkTime selectSysWorkTimeById(String id);
 
+    public void handleTodayChanged(List<Long> orgIdList, List<SysWorkTime> workTimeList, List<SysWorkTime> exists, Date today);
+    public List<SysWorkTime> findByYmd(List<Long> orgIds, Date ymd);
+    public List<SysWorkTime> findByOrgAndMonth(SysWorkTime sysWorkTime);
     public List<SysWorkTime> batchnew(Long orgId, List<SysWorkTime> workTimeDtoList);
     /**
      * 查询【请填写功能名称】列表

+ 67 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

@@ -4,8 +4,11 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.domain.AjaxResult;
@@ -181,6 +184,70 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
     public SysWorkTime selectSysWorkTimeById(String id) {
         return sysWorkTimeMapper.selectById(id);
     }
+    private boolean timesetIsEqual(SysWorkTime workTime, SysWorkTime dto) {
+        return workTime.getIsEnable().equals(dto.getIsEnable())
+                && StringUtils.equals(workTime.getOpenTime(), dto.getOpenTime()) && StringUtils.equals(workTime.getWorkTime(), dto.getWorkTime())
+                && StringUtils.equals(workTime.getNoonbreakStart(), dto.getNoonbreakStart()) && StringUtils.equals(workTime.getNoonbreakEnd(), dto.getNoonbreakEnd())
+                && StringUtils.equals(workTime.getWorkOffTime(), dto.getWorkOffTime()) && StringUtils.equals(workTime.getCloseTime(), dto.getCloseTime());
+    }
+    @Override
+    public void handleTodayChanged(List<Long> orgIdList, List<SysWorkTime> workTimeList, List<SysWorkTime> exists, Date today) {
+//        Optional<SysWorkTimeSet> todaySet = workTimeList.stream().filter(t -> DateUtil.beginOfDay(t.getDate()).equals(today)).findFirst();
+//        if (todaySet.isPresent()) {
+//            List<Long> todayChanged = exists.stream().filter(e -> !timesetIsEqual(e, todaySet.get())).map(WorkTime::getOrgId).collect(Collectors.toList());
+//            List<Long> existOrgIds = exists.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+//            List<Long> addOrgIds = orgIdList.stream().filter(o -> existOrgIds.indexOf(o) < 0).collect(Collectors.toList());
+//            todayChanged.addAll(addOrgIds);
+//            if (CollectionUtil.isNotEmpty(todayChanged)) {
+//                WORKTIMELOG.info("以下机构今日作息变更,重新生成履职:" + JSON.toJSONString(todayChanged));
+//                context.publishEvent(WorkChangeEvent.builder().orgIds(todayChanged).dateTime(DateTime.of(today)).build());
+//            } else {
+//                WORKTIMELOG.info("今日作息变更,今日作息未变化");
+//                WORKTIMELOG.info("今日变化todayChanged:" + JSON.toJSONString(todayChanged));
+//                WORKTIMELOG.info("今日变化existOrgIds:" + JSON.toJSONString(existOrgIds));
+//                WORKTIMELOG.info("今日变化orgIdList:" + JSON.toJSONString(orgIdList));
+//            }
+//        } else {
+//            WORKTIMELOG.info("今日作息变更,未找到今日作息配置数据" + DateUtil.format(today, "yyyy-MM-dd"));
+//            WORKTIMELOG.info("配置数据:" + JSON.toJSONString(workTimeList));
+//        }
+    }
+
+    @Override
+    public List<SysWorkTime> findByYmd(List<Long> orgIds, Date ymd) {
+        return sysWorkTimeMapper.findByYmd(orgIds, DateUtil.format(ymd, "yyyy-MM-dd"));
+    }
+
+    @Override
+    public List<SysWorkTime> findByOrgAndMonth(SysWorkTime sysWorkTime) {
+        //查询当月的作息时间
+        //从requestmonth中获取 年月
+        Date month = sysWorkTime.getMonth();
+        String monthStr = DateUtil.format(month, "yyyy-MM");
+        sysWorkTime.setMonthStr(monthStr);
+        List<SysWorkTime> workTimeOnAppVos = sysWorkTimeMapper.findByOrgAndMonth(sysWorkTime);
+        //通过月份获取当月第一天和最后一天
+        Date fistDate = DateUtil.beginOfMonth(month);
+        Date lastDate = DateUtil.endOfMonth(month);
+        final List<DateTime> dateTimeList = DateUtil.rangeToList(fistDate, lastDate, DateField.DAY_OF_MONTH);
+        //遍历dateTimeList
+        List<SysWorkTime> workTimeOnAppVoList = new ArrayList<>();
+        for (DateTime dateTime : dateTimeList) {
+            SysWorkTime workTimeOnAppVo = new SysWorkTime();
+            workTimeOnAppVoList.add(workTimeOnAppVo);
+        }
+        for (SysWorkTime vo : workTimeOnAppVos) {
+            for (DateTime dateTime : dateTimeList) {
+                if (DateUtil.isSameDay(dateTime, vo.getYmdDate())) {
+                    //获取dateTime的下标
+                    int index = dateTimeList.indexOf(dateTime);
+                    //将workTimeOnAppVoList中index位置的对象替换成vo
+                    workTimeOnAppVoList.set(index, vo);
+                }
+            }
+        }
+        return workTimeOnAppVoList;
+    }
 
     @Override
     public List<SysWorkTime> batchnew(Long orgId, List<SysWorkTime> workTimeDtoList) {

+ 15 - 0
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysWorkTimeMapper.xml

@@ -133,6 +133,21 @@
             ${ew.customSqlSegment}
 
     </select>
+    <select id="findByOrgAndMonth" resultType="com.xunmei.system.domain.SysWorkTime">
+
+        select *
+        from sys_work_time
+        where org_id = #{orgId}
+          and ymd_date like concat(#{monthStr}, '%')
+    </select>
+    <select id="findByYmd" resultType="com.xunmei.system.domain.SysWorkTime">
+        select * from sys_work_time where org_id in
+        <foreach item="orgId" collection="list" open="(" separator="," close=")">
+            #{orgId}
+        </foreach>
+
+         and  ymd_date=#{date}
+    </select>
 
     <insert id="insertSysWorkTime" parameterType="com.xunmei.system.domain.SysWorkTime">
         insert into sys_work_time