package com.matrix.system.hive.action;
|
|
import com.matrix.core.pojo.AjaxResult;
|
import com.matrix.core.tools.DateUtil;
|
import com.matrix.system.common.bean.SysUsers;
|
import com.matrix.system.common.service.SysUsersService;
|
import com.matrix.system.constance.Dictionary;
|
import com.matrix.system.hive.bean.SysBeauticianState;
|
import com.matrix.system.hive.bean.SysWorkBeatuistaff;
|
import com.matrix.system.hive.dao.SysBeauticianStateDao;
|
import com.matrix.system.hive.plugin.util.CollectionUtils;
|
import com.matrix.core.tools.DateUtil;
|
import com.matrix.system.hive.service.SysWorkBeatuistaffService;
|
import com.matrix.system.hive.service.SysWorktimeService;
|
import io.swagger.annotations.ApiModelProperty;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
|
/**
|
* @author jiangyouyao
|
* @date 2016-12-24
|
* @description 占用Controller
|
*/
|
@RequestMapping(value = "admin/occupancy")
|
@Controller
|
public class OccupancyController extends BaseController {
|
|
@Resource
|
private SysUsersService shopstaffInfoService;
|
|
@Resource
|
private SysWorkBeatuistaffService sysWorkBeatuistaffService;
|
@Resource
|
private SysWorktimeService worktimeService;
|
|
|
@Autowired
|
private SysBeauticianStateDao beauticianStateDao;
|
|
|
/**
|
* 获取员工预约情况
|
*/
|
@RequestMapping(value = "/getKanban")
|
public @ResponseBody
|
AjaxResult showCwzyList(String timeStr) {
|
Long shopId = getMe().getShopId();
|
return getCwzyList(timeStr,shopId);
|
}
|
|
public AjaxResult getCwzyList(String timeStr,Long shopId){
|
|
if (timeStr == null || timeStr.equals("")) {
|
timeStr = DateUtil.dateToString(new Date(), "yyyy-MM-dd");
|
}
|
// 查询上班下班的最大时间段
|
Date currentDate = DateUtil.stringToDate(timeStr, DateUtil.DATE_FORMAT_DD);
|
// 把日期调整为当前查询日期
|
|
|
Date maxTime = worktimeService.findMaxTime(shopId);
|
//如果没有获取到门店的排班时间,无法查询占用情况
|
if (maxTime == null) {
|
return AjaxResult.buildFailInstance("未查询到门店的排班情况");
|
}
|
currentDate.setHours(maxTime.getHours());
|
currentDate.setMinutes(maxTime.getMinutes());
|
// 上班起始时间
|
maxTime = new Date(currentDate.getTime());
|
|
// 把日期调整为当前查询日期
|
Date minTime = worktimeService.findMinTime(shopId);
|
currentDate.setHours(minTime.getHours());
|
currentDate.setMinutes(minTime.getMinutes());
|
// 上班起始时间
|
minTime = new Date(currentDate.getTime());
|
Date startTime = new Date(minTime.getTime());
|
|
Long maxSpan = DateUtil.getTimeSpan(maxTime, startTime, DateUtil.MINUTE);
|
|
List<OccupancyVo> occupancyVoList = new ArrayList<>();
|
// 获取所有的美疗师
|
List<SysUsers> mlsList = shopstaffInfoService.findByRoleName(true, Dictionary.STAFF_POST_MLS);
|
for (SysUsers user : mlsList) {
|
OccupancyVo occupancyVo = new OccupancyVo();
|
occupancyVo.setUserName(user.getSuName());
|
List<SysWorkBeatuistaff> workStaffs = sysWorkBeatuistaffService.findWorkStaff(timeStr.replaceAll("-", ""), user.getSuId());
|
|
if (CollectionUtils.isEmpty(workStaffs)) {
|
//员工休息
|
occupancyVo.getItems().add(new OccupancySPan(OccupancySPan.WORKTYPE_REST, maxSpan));
|
} else {
|
//员工不休息1.查询当前以及排版的服务
|
List<SysBeauticianState> beauticianStates = beauticianStateDao.selectByTimeAndUset(startTime, maxTime, user.getSuId());
|
if (CollectionUtils.isEmpty(beauticianStates)) {
|
//没有排班
|
occupancyVo.getItems().add(new OccupancySPan(OccupancySPan.WORKTYPE_WORK, maxSpan));
|
} else {
|
//有排班
|
for (int i = 0; i < beauticianStates.size(); i++) {
|
SysBeauticianState beauticianState = beauticianStates.get(i);
|
//占用时间段
|
long occupancySpan = DateUtil.getTimeSpan(beauticianState.getBeginTime(), beauticianState.getEndTime(), DateUtil.MINUTE);
|
StringBuilder msg = new StringBuilder();
|
OccupancySPan occupancySPan = new OccupancySPan();
|
occupancySPan.setVipName(beauticianState.getVipName());
|
if(beauticianState.getProjUse()!=null){
|
occupancySPan.setProjName(beauticianState.getProjUse().getProjName());
|
}
|
occupancySPan.setBedName(beauticianState.getBedName());
|
occupancySPan.setSpanLength(occupancySpan);
|
occupancySPan.setWorkType(OccupancySPan.WORKTYPE_OCCUPANCY);
|
occupancySPan.setServiceId(beauticianState.getServicesId());
|
occupancySPan.setServiceState(beauticianState.getState());
|
if (i == 0) {
|
//计算上班时间到第一次盘版直接的空隙
|
long span = DateUtil.getTimeSpan(minTime, beauticianState.getBeginTime(), DateUtil.MINUTE);
|
occupancyVo.getItems().add(new OccupancySPan(OccupancySPan.WORKTYPE_WORK, span));
|
} else {
|
if (occupancyVo.isNew(occupancySPan)) {
|
//非第一次则计算上一次的结束时间到本次开始时间之间的间隙
|
SysBeauticianState beforeBeauticianState = beauticianStates.get(i - 1);
|
long span = DateUtil.getTimeSpan(beforeBeauticianState.getEndTime(), beauticianState.getBeginTime(), DateUtil.MINUTE);
|
occupancyVo.getItems().add(new OccupancySPan(OccupancySPan.WORKTYPE_WORK, span));
|
}
|
}
|
occupancyVo.addItem(occupancySPan);
|
//最后的占用时间
|
if (i == beauticianStates.size() - 1) {
|
if (DateUtil.isBeforeDate(maxTime, beauticianState.getEndTime())) {
|
long span = DateUtil.getTimeSpan(beauticianState.getEndTime(), maxTime, DateUtil.MINUTE);
|
occupancyVo.getItems().add(new OccupancySPan(OccupancySPan.WORKTYPE_WORK, span));
|
}
|
}
|
}
|
|
}
|
|
|
}
|
occupancyVoList.add(occupancyVo);
|
}
|
|
AjaxResult result = AjaxResult.buildSuccessInstance(occupancyVoList);
|
|
//计算表头的时间间隔
|
buildTimeSpan(startTime, maxTime, result);
|
return result;
|
}
|
|
private void buildTimeSpan(Date startTime, Date maxTime, AjaxResult result) {
|
|
//每30分钟算一次
|
List<String> tableHead = new ArrayList<>();
|
int minutes = startTime.getMinutes();
|
if (minutes != 0 && minutes != 30) {
|
if (minutes < 30) {
|
minutes = 0;
|
} else {
|
minutes = 30;
|
}
|
}
|
|
long timeSpan = DateUtil.getTimeSpan(startTime, maxTime, DateUtil.MINUTE);
|
long i = 0;
|
if (timeSpan % 30 == 0) {
|
i = timeSpan / 30;
|
} else {
|
i = timeSpan / 30 + 1;
|
}
|
startTime.setMinutes(minutes);
|
//第一个时间不要
|
startTime = DateUtil.getDateAfterMinute(startTime, 30);
|
|
while (i > 0) {
|
tableHead.add(DateUtil.dateToString(startTime, "HH:mm"));
|
startTime = DateUtil.getDateAfterMinute(startTime, 30);
|
i--;
|
}
|
result.putInMap("tableHead", tableHead);
|
result.putInMap("timeSpan", timeSpan);
|
}
|
|
class OccupancyVo {
|
String userName;
|
List<OccupancySPan> items = new ArrayList<>();
|
|
public String getUserName() {
|
return userName;
|
}
|
|
public void setUserName(String userName) {
|
this.userName = userName;
|
}
|
|
public List<OccupancySPan> getItems() {
|
return items;
|
}
|
|
public void setItems(List<OccupancySPan> items) {
|
this.items = items;
|
}
|
|
public void addItem(OccupancySPan occupancySPan) {
|
//服务单id相同的合并msg,时间跨度取时间最长的
|
boolean isNew = true;
|
for (OccupancySPan oldSpan : items) {
|
if (occupancySPan.getServiceId() != null
|
&& occupancySPan.getServiceId().equals(oldSpan.getServiceId())) {
|
isNew = false;
|
oldSpan.setSpanLength(oldSpan.spanLength > occupancySPan.spanLength ? oldSpan.spanLength : occupancySPan.spanLength);
|
oldSpan.setProjName(oldSpan.getProjName() + "/" + occupancySPan.getProjName());
|
break;
|
}
|
}
|
if (isNew) {
|
items.add(occupancySPan);
|
}
|
}
|
|
public boolean isNew(OccupancySPan occupancySPan) {
|
boolean isNew = true;
|
for (OccupancySPan oldSpan : items) {
|
if (occupancySPan.getServiceId() != null
|
&& occupancySPan.getServiceId().equals(oldSpan.getServiceId())) {
|
isNew = false;
|
break;
|
}
|
}
|
return isNew;
|
}
|
}
|
|
public class OccupancySPan {
|
/**
|
* 休息
|
*/
|
static final int WORKTYPE_REST = 1;
|
/**
|
* 上班
|
*/
|
static final int WORKTYPE_WORK = 2;
|
/**
|
* 占用
|
*/
|
static final int WORKTYPE_OCCUPANCY = 3;
|
|
@ApiModelProperty(value = "色块长度")
|
Long spanLength;
|
@ApiModelProperty(value = "占用状态,1休息,2 上班,3 占用")
|
int workType;
|
@ApiModelProperty(value = "床位名称")
|
String bedName;
|
@ApiModelProperty(value = "项目名称")
|
String projName;
|
@ApiModelProperty(value = "会员名称")
|
String vipName;
|
@ApiModelProperty(value = "服务单id")
|
Long serviceId;
|
@ApiModelProperty(value = "服务单状态")
|
String serviceState;
|
|
|
public OccupancySPan(int workType, Long spanLength) {
|
this.workType = workType;
|
this.spanLength = spanLength;
|
}
|
|
public OccupancySPan() {
|
}
|
|
public Long getSpanLength() {
|
return spanLength;
|
}
|
|
public void setSpanLength(Long spanLength) {
|
this.spanLength = spanLength;
|
}
|
|
public int getWorkType() {
|
return workType;
|
}
|
|
public void setWorkType(int workType) {
|
this.workType = workType;
|
}
|
|
public String getBedName() {
|
return bedName;
|
}
|
|
public void setBedName(String bedName) {
|
this.bedName = bedName;
|
}
|
|
public String getProjName() {
|
return projName;
|
}
|
|
public void setProjName(String projName) {
|
this.projName = projName;
|
}
|
|
public String getVipName() {
|
return vipName;
|
}
|
|
public void setVipName(String vipName) {
|
this.vipName = vipName;
|
}
|
|
public Long getServiceId() {
|
return serviceId;
|
}
|
|
public void setServiceId(Long serviceId) {
|
this.serviceId = serviceId;
|
}
|
|
public String getServiceState() {
|
return serviceState;
|
}
|
|
public void setServiceState(String serviceState) {
|
this.serviceState = serviceState;
|
}
|
}
|
|
|
}
|