package com.dingzhuo.energy.basic.data.workforce.controller; import com.dingzhuo.energy.basic.data.workforce.domain.Rostering; import com.dingzhuo.energy.basic.data.workforce.domain.RosteringCopy; import com.dingzhuo.energy.basic.data.workforce.domain.RosteringScheme; import com.dingzhuo.energy.basic.data.workforce.service.IRosteringService; import com.dingzhuo.energy.common.utils.DateUtils; import com.dingzhuo.energy.common.utils.SecurityUtils; import com.dingzhuo.energy.common.utils.poi.ExcelUtil; import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log; import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType; import com.dingzhuo.energy.framework.web.controller.BaseController; import com.dingzhuo.energy.framework.web.domain.AjaxResult; import com.dingzhuo.energy.framework.web.page.TableDataInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 排班表查询Controller * * @author liuli * @date 2020-05-13 */ @RestController @RequestMapping("/workforce/rosteringManagement") public class RosteringController extends BaseController { @Autowired private IRosteringService rosteringService; /** *查询轮值方案名称集合 */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:schemeNamelist')") @GetMapping("/schemeNamelist") public TableDataInfo schemeNamelist(Rostering rostering) { startPage(); List list = rosteringService.selectSchemeNameList(); return getDataTable(list); } /** * 查询排班表查询列表 */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:list')") @GetMapping("/list") public TableDataInfo list(Rostering rostering) { startPage(); List list = rosteringService.selectRosteringList(rostering); return getDataTable(list); } /** * 导出排班表查询列表 */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:export')") @Log(title = "排班表查询", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(Rostering rostering) { List list = rosteringService.selectRosteringList(rostering); ExcelUtil util = new ExcelUtil(Rostering.class); return util.exportExcel(list, "rosteringManagement"); } /** * 获取排班表查询详细信息 */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return AjaxResult.success(rosteringService.selectRosteringById(id)); } /** * 新增排班表查询(生成) */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:add')") @PostMapping public AjaxResult add(@RequestBody Rostering rostering) throws ParseException { //根据轮值方案id查询班次id、值次id等list List list=rosteringService.selectList(rostering); //设置转换的日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //建一个新的list存放insert的list List dataItems = new ArrayList<>(); //定义一个count来完成code(编码)的自增 int count=1; //定义从前台获取的开始时间 startdate为开始时间 String startdate=sdf.format(rostering.getBeginTimes()); /* Long timenum =(rostering.getEndTimes().getTime()-rostering.getBeginTimes().getTime())/(60*60*24*1000);//时间差*/ for(RosteringCopy b:list){ Date loopstarttime=sdf.parse(startdate); long long3 =loopstarttime.getTime(); long long4= rostering.getEndTimes().getTime(); if(long3 > long4){//循环后的时间>从页面获取的结束时间则停止循环 break; }else { startdate=sdf.format(loopstarttime.getTime()); for (RosteringCopy a:list) { Rostering rosterings =new Rostering(); rosterings.setId(UUID.randomUUID().toString()); String code=String.valueOf(count); rosterings.setCode(code); rosterings.setName("排班"+code); rosterings.setSchemeId(a.getSchemeId()); rosterings.setShiftId(a.getShiftId()); rosterings.setDutyId(a.getDutyId()); rosterings.setDepartMemberId(rostering.getDepartMemberId()); rosterings.setCreateBy(SecurityUtils.getUsername()); rosterings.setCreateTime(DateUtils.getNowDate()); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String bengintime=startdate +" "+a.getStartTime();//bengintime为拼接完的开始时间 Date looptime=sdf.parse(startdate);//循环后的开始时间 Date endtime =rostering.getEndTimes();//从前台获取的结束时间 long long1 =looptime.getTime(); long long2= endtime.getTime(); if(long1 > long2){//若当前时间>从前台获取的结束时间则结束循环 break; }else { if(a.getIsCrossDay().equals("Y")) {//是否跨天 Date starttime = sdf.parse(startdate); Calendar calendar = Calendar.getInstance(); calendar.setTime(starttime); calendar.add(Calendar.DAY_OF_MONTH, 1); Date looptimes=sdf.parse(startdate);//循环后的开始时间 Date endtimes =rostering.getEndTimes();//从前台获取的结束时间 long long5 =looptime.getTime(); long long6= endtime.getTime(); Date beginTimes = df.parse(bengintime); String enddate=startdate+" "+a.getEnddTime(); Date endTimes = df.parse(enddate); rosterings.setBeginTimes(beginTimes); rosterings.setEndTimes(endTimes); startdate=sdf.format(calendar.getTime());//给开始时间赋值跨天后的时间 }else{ Date beginTimes = df.parse(bengintime); String enddate=startdate+" "+a.getEnddTime(); Date endTimes = df.parse(enddate); rosterings.setBeginTimes(beginTimes); rosterings.setEndTimes(endTimes); } } dataItems.add(rosterings); count ++; } } } this.rosteringService.saveRostering(dataItems); return AjaxResult.success("保存成功!"); } /** * 修改排班表查询 */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:edit')") @Log(title = "排班表查询", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody Rostering rostering) { rostering.setUpdateBy(SecurityUtils.getUsername()); rostering.setUpdateTime(DateUtils.getNowDate()); return toAjax(rosteringService.updateRostering(rostering)); } /** * 删除排班表查询 */ @PreAuthorize("@ss.hasPermi('workforce:rosteringManagement:remove')") @Log(title = "排班表查询", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable String[] ids) { return toAjax(rosteringService.deleteRosteringByIds(ids)); } public static List> splitList(List targetList, Integer splitSize) { if (targetList == null) { return new ArrayList<>(); } int size = targetList.size(); List> resultList = new ArrayList<>(); if (size <= splitSize) { resultList.add(targetList); } else { for (int i = 0; i < size; i += splitSize) { //用于限制最后一部分size小于splitSize的list int limit = i + splitSize; if (limit > size) { limit = size; } resultList.add(targetList.subList(i, limit)); } } return resultList; } }