package com.matrix.system.hive.service.imp; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.pojo.VerifyResult; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.WebUtil; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; import com.matrix.core.tools.DateUtil; import com.matrix.system.hive.plugin.util.MoneyUtil; import com.matrix.system.hive.pojo.MyBeauticianCount; import com.matrix.system.hive.service.*; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @date 2016-07-03 20:57 */ @Service("sysProjServicesService") public class SysProjServicesServiceImpl implements SysProjServicesService { @Autowired SysBedStateDao sysBedStateDao; @Autowired private SysProjServicesDao sysProjServicesDao; @Resource private SysOrderItemService sysOrderItemService; @Autowired private SysBedStateDao bedStateDao; @Autowired private SysBeauticianStateDao beauticianStateDao; @Autowired private SysProjUseDao sysProjUseDao; @Autowired private SysOutStoreDao sysOutStoreDao; @Autowired private SysOutStoreItemDao sysOutStoreItemDao; @Autowired private SysBedInfoDao sysBedInfoDao; @Autowired private SysStoreInfoDao storeInfoDao; @Autowired private CodeService codeService; @Autowired ServicesFlowDao servicesFlowDao; @Autowired private LastestWorkBeatuistaffDao LastestWorkBeatuistaffDao; @Autowired SysUsersDao userDao; @Autowired private MyBeauticianCountDao myBeauticianCountDao; @Autowired private ParameterSettingsDao parameterSettingsDao; @Autowired private MyBeaticianDao myBeaticianDao; @Autowired private AchieveNewService achieveNewService; @Autowired private ShoppingGoodsDao shoppingGoodsDao; @Autowired ShoppingGoodsAssembleDao shoppingGoodsAssembleDao; @Resource private SysProjUseService projUseService; @Resource private SysOrderService sysOrderService; @Autowired WarehouseDao warehouseDao; /** * 新增服务单 jyy * * @return */ @Transactional(rollbackFor = Exception.class) @Override public SysProjServices addSysProjServices(SysProjServices sysProjServices) throws GlobleException { //创建服务单 SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); sysProjServices.setCreateStaffId(user.getSuId()); sysProjServices.setShopId(user.getShopId()); sysProjServices.setCompanyId(user.getCompanyId()); sysProjServices.setCreateTime(new Date()); // 设置状态为待预约 sysProjServices.setState(Dictionary.SERVICE_STATU_DYY); sysProjServices.setServiceNo(codeService.getServiceOrderCode()); Double hkPrice = 0.0; int i = sysProjServicesDao.insert(sysProjServices); // 计算项目总时长 int totalTime = 0; //处理订单明细 for (SysBeauticianState sysBeauticianState : sysProjServices.getServiceItems()) { SysProjUse sysProjUse = projUseService.findById(sysBeauticianState.getPuseId()); ShoppingGoods sysProjInfo = shoppingGoodsDao.selectById(sysProjUse.getProjId()); totalTime = totalTime + (sysProjInfo.getTimeLength() == null ? 0 : sysProjInfo.getTimeLength()); //更新余次 SysProjUse upProjUse = new SysProjUse(); // 如果该使用情况不为套餐卡,则修改单个项目余次信息 upProjUse.setId(sysBeauticianState.getPuseId()); //扣减次数 int surplus = sysProjUse.getSurplusCount() - sysBeauticianState.getCount(); upProjUse.setSurplusCount(surplus); // 项目使用完了 if (surplus <= 0) { upProjUse.setIsOver(Dictionary.FLAG_YES_Y); upProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); } //本次消费金额 Double bcxfje = MoneyUtil.mul(sysProjUse.getPrice(), Double.valueOf(sysBeauticianState.getCount())); upProjUse.setBalance(MoneyUtil.sub(sysProjUse.getBalance(), bcxfje)); //更新余次信息 sysProjUseDao.updateSurplusCount(upProjUse); //如果项目是套餐 中项目则判断套餐是否失效 if (sysProjUse.getTaocanId() != null) { SysProjUse taocan = sysProjUseDao.selectById(sysProjUse.getTaocanId()); SysProjUse taocanQuery = new SysProjUse(); taocanQuery.setTaocanId(sysProjUse.getTaocanId()); List taocanProjUses = sysProjUseDao.selectByModel(taocanQuery); List activeProjUse = taocanProjUses.stream().filter(item -> item.getIsOver().equals(Dictionary.FLAG_NO_N)).collect(Collectors.toList()); if (CollectionUtils.isEmpty(activeProjUse)) { //全部使用完成 taocan.setIsOver(Dictionary.FLAG_YES_Y); taocan.setSurplusCount(0); taocan.setStatus(Dictionary.TAOCAN_STATUS_WX); } else if (Dictionary.FLAG_YES_Y.equals(taocan.getIsCourse())) { //任选套餐检查套餐整体剩余次数 int tcSurplusCount = taocan.getSurplusCount() - sysProjUse.getDeductionNum(); if (tcSurplusCount < 0) { throw new GlobleException(taocan.getProjName() + "已经达到最大使用次数"); } else { taocan.setSurplusCount(tcSurplusCount); } } sysProjUseDao.updateSurplusCount(taocan); } // 设置划扣价 hkPrice = MoneyUtil.add(hkPrice, bcxfje); //插入订单明细 sysBeauticianState.setProjId(sysProjInfo.getId()); sysBeauticianState.setServicesId(sysProjServices.getId()); sysBeauticianState.setShopId(user.getShopId()); sysBeauticianState.setState(Dictionary.BEATUI_STATE_DYY); beauticianStateDao.insert(sysBeauticianState); } // 设置项目总时长 sysProjServices.setTotalTime(totalTime); sysProjServices.setMoney(hkPrice); sysProjServicesDao.update(sysProjServices); return sysProjServices; } /** * 校验服务单中的项目是否存在欠款 * * @param sysProjServices * @return */ @Override public VerifyResult checkBalance(SysProjServices sysProjServices) { //检测欠款 for (SysBeauticianState sysBeauticianState : sysProjServices.getServiceItems()) { SysProjUse sysProjUse = projUseService.findById(sysBeauticianState.getPuseId()); int kjcs = 1; if (sysProjUse.getTaocanId() != null) { kjcs = sysBeauticianState.getCount() * sysProjUse.getDeductionNum(); } int surplusCount = sysProjUse.getSurplusCount() - kjcs; if (surplusCount < 0) { if (!Dictionary.SHOPPING_GOODS_TYPE_TCK.equals(sysProjUse.getType())) { return new VerifyResult(true, sysProjUse.getProjName() + "余次不足"); } else { return new VerifyResult(true, sysProjUse.getProjName() + "余次不足"); } } } return new VerifyResult(false); } @Override public int modify(SysProjServices sysProjServices) { return sysProjServicesDao.update(sysProjServices); } @Override public int remove(List list) { return sysProjServicesDao.deleteByIds(list); } @Override public int removeById(Long id) { return sysProjServicesDao.deleteById(id); } @Override public List findByModel(SysProjServices sysProjServices) { return sysProjServicesDao.selectByModel(sysProjServices); } @Override public SysProjServices findById(Long id) { return sysProjServicesDao.selectById(id); } /** * TODO 做成配置项目 校验服务单中的项目是否存在欠款 * * @param sysProjServices * @return */ @Override public VerifyResult checkArrears(SysProjServices sysProjServices) { //检测欠款 /* for (SysBeauticianState sysBeauticianState : sysProjServices.getServiceItems()) { SysProjUse sysProjUse = projUseService.findById(sysBeauticianState.getPuseId()); ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(sysProjUse.getProjId()); SysOrderItem orderItem = sysOrderItemService.findById(sysProjUse.getOrderItemId()); if ("购买".equals(sysProjUse.getSource())) { // 如果用户有欠款,服务单总价不能超过已付金额 if (orderItem!=null && orderItem.getArrears() > 0) { // 本金-余额=已消费金额 double bj = shoppingGoods.getSealPice(); //单价* 单次划扣次数* 本次下单数 TODO 单次划扣数量存到projuse表中 double bcxfje = sysProjUse.getPrice() * sysBeauticianState.getCount(); // 计算消费金额 double yxfje = MoneyUtil.sub(bj, sysProjUse.getBalance()); // 本金-欠款=已付金额 double money = MoneyUtil.sub((bj - orderItem.getArrears()), (yxfje + bcxfje)); // 如果 已付金额 - (已消费金额+本次消费金额)<0 则不能再消费 if (money < 0) { return new VerifyResult(true, shoppingGoods.getName() + "存在欠款" + orderItem.getArrears() + "元 , 订单编号[ " + sysOrderService.findById(orderItem.getOrderId()).getOrderNo() + " ] "); } } } else if ("赠送".equals(sysProjUse.getSource())) { if (orderItem!=null &&orderItem.getArrears() > 0) { return new VerifyResult(true, shoppingGoods.getName() + "存在欠款" + orderItem.getArrears() + "元 , 不能消费赠送项目,订单编号[ " + sysOrderService.findById(orderItem.getOrderId()).getOrderNo() + " ] "); } } }*/ return new VerifyResult(false); } // 排班 jyy @Transactional(rollbackFor = Exception.class) @Override public int paiban(SysProjServices projServices, String dateTime2) throws GlobleException { /** 验证数据是否正确 */ SysProjServices checkProjServices = sysProjServicesDao.selectById(projServices.getId()); // 验证服务单是否存在或者取消 if (!checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DYY) && !checkProjServices.getState().equals(Dictionary.SERVICE_STATU_YYCG)) { throw new GlobleException("该服务单已被取消或者不存在!"); } // 验证是否选择床位 if (sysBedInfoDao.selectById(projServices.getBedId()) == null) { throw new GlobleException("请选择床位!"); } String dateTime = DateUtil.dateToString(projServices.getYyTime(), DateUtil.DATE_FORMAT_DD); // 设置床位排班时间 /***********************************************/ // 验证床位排班时间是否正确 SysBedState sysBedState = projServices.getBedState(); sysBedState.setEndTime(DateUtil.getNextNMinute(sysBedState.getStartTime(), projServices.getTotalTime())); sysBedState.setBedId(projServices.getBedId()); sysBedState.setServiceId((projServices.getId())); sysBedState.setBedState(Dictionary.BED_STATE_SYZ); for (SysBeauticianState beauticianState : projServices.getServiceItems()) { if (DateUtil.isAffterDate(beauticianState.getEndTime(), beauticianState.getBeginTime())) { throw new GlobleException("美疗师的排班结束时间不能晚于美疗师排班的开始时间!"); } } // 判断是否是编辑,还是新增,编辑则需要先释放资源 if (checkProjServices.getState().equals(Dictionary.SERVICE_STATU_YYCG)) { // 释放床位资源 bedStateDao.deleteByServiceId(checkProjServices.getId()); } // 检测床位与美疗师占用情况 if (bedStateDao.checkBedClash(sysBedState) > 0) { throw new GlobleException("该床位已被占用,请重新分配!"); } bedStateDao.insert(sysBedState); // 排美疗师并且分配项目 int projCount = 0; for (SysBeauticianState beauticianState : projServices.getServiceItems()) { if (beauticianStateDao.checkBeauticianClash(beauticianState) > 0) { throw new GlobleException("该美疗师已被占用,请重新分配!"); } beauticianState.setState(Dictionary.BEATUI_STATE_YYY); beauticianStateDao.update(beauticianState); if (beauticianState.getStaffId() == null || beauticianState.getStaffId().equals("")) { throw new GlobleException("美疗师至少分配一个项目!"); } } // 设置成功状态 projServices.setState(Dictionary.SERVICE_STATU_YYCG); // 判断当前门店是否有历史美疗师 LastestWorkBeatuistaff lastWorkStaff = new LastestWorkBeatuistaff(); lastWorkStaff.setShopId(checkProjServices.getShopId()); List lastWorkList = LastestWorkBeatuistaffDao.selectByModel(lastWorkStaff); // 如果有数据,则先清空 if (lastWorkList.size() > 0) { // 清空排班员工 LastestWorkBeatuistaffDao.deleteByModel(lastWorkStaff); } // 排班后记录当前最新的排班员工 List lastList = new ArrayList<>(); for (SysBeauticianState beauticianState : projServices.getServiceItems()) { LastestWorkBeatuistaff lastWork = new LastestWorkBeatuistaff(); lastWork.setChangeDate(new Date()); lastWork.setStaffId(beauticianState.getStaffId()); lastWork.setShopId(checkProjServices.getShopId()); lastList.add(lastWork); } LastestWorkBeatuistaffDao.batchInsert(lastList); return sysProjServicesDao.update(projServices); } @Override public int add(SysProjServices sysProjServices) { return sysProjServicesDao.insert(sysProjServices); } // 取消服务单 jyy @Transactional(rollbackFor = Exception.class) @Override public int modifyCancelProjServices(SysProjServices projServices) throws GlobleException { SysProjServices checkProjServices = sysProjServicesDao.selectById(projServices.getId()); if (checkProjServices.getState().equals(Dictionary.SERVICE_STATU_YYQX)) { throw new GlobleException("不能重复取消同一个订单"); } else if (checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DYY)) { // 回退项目余次 backProjCount(checkProjServices); } else { // 释放床位资源 SysBedState checkBedState = sysBedStateDao.selectBySerIdAndBedId(checkProjServices.getBedId(), checkProjServices.getId()); if (checkBedState != null) { checkBedState.setBedState(Dictionary.BED_STATE_YYQX); bedStateDao.update(checkBedState); } List beauticianStateList = beauticianStateDao.selectBySerIds(checkProjServices.getId()); for (SysBeauticianState checkbeauticianState : beauticianStateList) { // 释放美疗师 checkbeauticianState.setState(Dictionary.BEATUI_STATE_YYQX); beauticianStateDao.update(checkbeauticianState); } // 回退项目余次 backProjCount(checkProjServices); } checkProjServices.setState(Dictionary.SERVICE_STATU_YYQX); // 删除订单业绩 AchieveNew achieveNew = new AchieveNew(); achieveNew.setServiceOrderId(projServices.getId()); achieveNewService.removeByModel(achieveNew); //删除出库单 SysOutStore sysOutStore = sysOutStoreDao.selectByServiceId(projServices.getId()); if (sysOutStore != null) { List outStoreItemList = sysOutStoreItemDao.selectByOrderId(sysOutStore.getId()); for (SysOutStoreItem item : outStoreItemList) { SysStoreInfo sysStoreInfo = storeInfoDao.selectById(item.getStoreId()); ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(sysStoreInfo.getSkuId()); sysStoreInfo.setStoreTotal(sysStoreInfo.getStoreTotal() + item.getAmount()); //更新库存 storeInfoDao.update(sysStoreInfo); } sysOutStoreDao.deleteById(sysOutStore.getId()); sysOutStoreItemDao.deleteByOrderId(sysOutStore.getId()); } //更新服务单状态 return sysProjServicesDao.update(checkProjServices); } /** * @Title: backProjCount 回退项目余次 @author:jyy @param projServices * void 返回类型 @date 2016年8月4日 上午11:30:42 @throws */ private void backProjCount(SysProjServices projServices) { List beauticianStateList = beauticianStateDao.selectBySerIds(projServices.getId()); // 回退项目余额 for (SysBeauticianState beauticianState : beauticianStateList) { SysProjUse sysProjUse = sysProjUseDao.selectById(beauticianState.getPuseId()); if (sysProjUse != null && sysProjUse.getId() != null) { sysProjUse = sysProjUseDao.selectById(sysProjUse.getId()); SysProjUse upProjUse = new SysProjUse(); upProjUse.setId(sysProjUse.getId()); // 项目如果已使用完,将使用完成状态改为未使用完 if (sysProjUse.getSurplusCount() == 0) { upProjUse.setIsOver(Dictionary.DELETED_N); upProjUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); if (sysProjUse.getTaocanId() != null) { //TODO 更新套餐状态为有效 } } int surplus = sysProjUse.getSurplusCount() + beauticianState.getCount(); upProjUse.setSurplusCount(surplus); upProjUse.setBalance(MoneyUtil.add(sysProjUse.getBalance(), sysProjUse.getPrice())); sysProjUseDao.updateSurplusCount(upProjUse); } } } // 划扣 jyy @Transactional(rollbackFor = Exception.class) @Override public int modifyHKProjServices(SysProjServices projServices) throws GlobleException { projServices = sysProjServicesDao.selectById(projServices.getId()); if (!projServices.getState().equals(Dictionary.SERVICE_STATU_FWWC)) { throw new GlobleException("该服务单状态为" + projServices.getState() + ",不可以进行当前操作!"); } else { projServices.setState(Dictionary.SERVICE_STATU_FFJS); projServices.setConsumeTime(new Date()); return sysProjServicesDao.update(projServices); } } // 派单 jyy @Transactional(rollbackFor = Exception.class) @Override public int modifyPDProjServices(SysProjServices projServices) throws GlobleException { SysProjServices services = sysProjServicesDao.selectById(projServices.getId()); if (!services.getState().equals(Dictionary.SERVICE_STATU_YYCG)) { throw new GlobleException("该服务单状态为" + projServices.getState() + ",不可以进行当前操作!"); } else { // TODO 更新服务单状态 可配置 services.setState(Dictionary.SERVICE_STATU_XPL); // 派单就设置业绩 achieveNewService.addAchieveByServiceOrder(projServices); return sysProjServicesDao.update(services); } } /** * 配料 * * @author 姜友瑶 * @time 2018-08-03 */ @Transactional(rollbackFor = Exception.class) @Override public int modifyPLProjServices(SysProjServices projServicesVo) throws GlobleException { SysProjServices projServices = sysProjServicesDao.selectById(projServicesVo.getId()); if (!projServices.getState().equals(Dictionary.SERVICE_STATU_XPL)) { throw new GlobleException("该服务单状态为" + projServices.getState() + ",不可以进行当前操作!"); } if (isNeedOutStore(projServicesVo)) { // 生成出库单 Long warehouseId = warehouseDao.findShopWarehouse(projServices.getShopId()).get(0).getId(); SysOutStore outStore = new SysOutStore(); outStore.setOutStoreNo(codeService.getOutStoreCode()); outStore.setShopId(projServices.getShopId()); if(projServices.getDevisionId()!=null){ outStore.setStaffId(projServices.getDevisionId()); }else{ SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); outStore.setStaffId(sysUsers.getSuId()); } outStore.setServiceId(projServices.getId()); outStore.setType(Dictionary.OUT_STORE_XHCPCK); outStore.setTime(new Date()); outStore.setCompanyId(projServices.getCompanyId()); sysOutStoreDao.insert(outStore); //出库明细,根据批次维度定义 List realOutStoreItemList = new ArrayList<>(); // 生成出库单明细 for (SysOutStoreItem item : projServicesVo.getOutStoreItem()) { if (item.getAmount() != null && item.getAmount() > 0) { SysOutStoreItem sysOutStoreItem = new SysOutStoreItem(); ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getSkuId()); List stores = storeInfoDao.selectStoInfoBySku(item.getSkuId(), warehouseId); double sum = stores.stream().mapToDouble(item2 -> item2.getStoreTotal()).sum(); Double needAmount = MoneyUtil.div(item.getAmount(), Double.valueOf(shoppingGoods.getVolume())); if (sum < needAmount) { throw new GlobleException("出库失败:【" + shoppingGoods.getName() + "库存不足】"); } //循环获取所有批次产品,并扣减库存 for (SysStoreInfo storeInfo : stores) { Double oldStoreTotal = storeInfo.getStoreTotal(); Double surplus = storeInfo.getStoreTotal() - needAmount; //更新库存 storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus); item.setId(null); //每次扣减库存都创建一个出库记录 BeanUtils.copyProperties(item, sysOutStoreItem); sysOutStoreItem.setOutStoreId(outStore.getId()); sysOutStoreItem.setStoreId(storeInfo.getId()); sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal()); realOutStoreItemList.add(sysOutStoreItem); storeInfoDao.update(storeInfo); //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量 if (surplus > 0) { break; } else { needAmount = Math.abs(surplus); } } } else { LogUtil.debug("未选择配料跳过sku={},amount={}", item.getSkuId(), item.getAmount()); } } sysOutStoreItemDao.batchInsert(realOutStoreItemList); } // 设置服务单状态 projServices.setState(Dictionary.SERVICE_STATU_PLWC); // 设置服务单操作流水 // TODO 本功能待完善记录最新的排班员工 /* List lastList = LastestWorkBeatuistaffDao.selectByModel(null); LastestWorkBeatuistaff lastWork = new LastestWorkBeatuistaff(); if (lastList.size() > 0) { lastWork.setChangeDate(new Date()); lastWork.setStaffId(projServices.getBeauticianId()); LastestWorkBeatuistaffDao.insert(lastWork); } else { //TODO 有bug集合为零了 LastestWorkBeatuistaff modifyObj = lastList.get(0); modifyObj.setChangeDate(new Date()); modifyObj.setStaffId(projServices.getBeauticianId()); LastestWorkBeatuistaffDao.update(modifyObj); }*/ return sysProjServicesDao.update(projServices); } /** * 服务单收费需要生成出库记录 * @param projServicesVo * @return */ private boolean isNeedOutStore(SysProjServices projServicesVo) { if(CollectionUtils.isNotEmpty(projServicesVo.getOutStoreItem())){ for (SysOutStoreItem item : projServicesVo.getOutStoreItem()) { if (item.getAmount() != null && item.getAmount() > 0) { return true; } } } return false; } // 服务开始 jyy @Transactional(rollbackFor = Exception.class) @Override public int modifyFWKSProjServices(SysProjServices projServices) throws GlobleException { // 验证操作人 projServices = sysProjServicesDao.selectById(projServices.getId()); SysUsers users = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); SysBeauticianState checkBeauticianState = null; List beauticianStateList = beauticianStateDao.selectBySerIds(projServices.getId()); for (SysBeauticianState beauticianState : beauticianStateList) { if (users.getSuId().equals(beauticianState.getStaffId())) { checkBeauticianState = beauticianState; break; } } if (checkBeauticianState == null) { throw new GlobleException("无权限开始服务!"); } if ((!projServices.getState().equals(Dictionary.SERVICE_STATU_PLWC) && !(projServices.getState().equals(Dictionary.SERVICE_STATU_FWZ)))) { throw new GlobleException("该服务单状态为" + projServices.getState() + ",不可以进行当前操作!"); } else if (projServices.getState().equals(Dictionary.SERVICE_STATU_PLWC)) { projServices.setStartTime(new Date()); projServices.setState(Dictionary.SERVICE_STATU_FWZ); sysProjServicesDao.update(projServices); } // 设置美疗师实际开始时间 checkBeauticianState.setState(Dictionary.BEATUI_STATE_SYZ); projServices.getVipId(); return beauticianStateDao.update(checkBeauticianState); } // 服务结束 jyy @Transactional(rollbackFor = Exception.class) @Override public int modifyFWJSrojServices(SysProjServices projServices) throws GlobleException { SysUsers users = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); SysProjServices checkprojServices = sysProjServicesDao.selectById(projServices.getId()); if (!checkprojServices.getState().equals(Dictionary.SERVICE_STATU_FWZ)) { throw new GlobleException("该服务单状态为" + checkprojServices.getState() + ",不可以进行当前操作!"); } SysBeauticianState checkBeauticianState = new SysBeauticianState(); checkBeauticianState.setServicesId(projServices.getId()); checkBeauticianState.setState(Dictionary.BEATUI_STATE_FWJS); checkBeauticianState.setStaffId(users.getSuId()); int rerunlt = beauticianStateDao.chengItemState(checkBeauticianState); // 验证是否是最后一个美疗师结束服务 boolean isOver = true; List beauticianStateList = beauticianStateDao.selectBySerIds(checkprojServices.getId()); for (SysBeauticianState beauticianState : beauticianStateList) { if (!beauticianState.getState().equals(Dictionary.BEATUI_STATE_FWJS)) { isOver = false; break; } } if (isOver) { // 释放床位资源 SysBedState checkBedState = sysBedStateDao.selectBySerIdAndBedId(checkprojServices.getBedId(), checkprojServices.getId()); if (checkBedState != null) { checkBedState.setBedState(Dictionary.BED_STATE_SYJS); bedStateDao.update(checkBedState); } checkprojServices.setEndTime(new Date()); // 计算时差 long minspace = DateUtil.getDifTimeMin(checkprojServices.getStartTime(), checkprojServices.getEndTime()) - checkprojServices.getTotalTime(); // 判断是服务超时还是服务提前结束,如果minspace大于0则是超时服务,小于0则是提前结束服务 checkprojServices.setIsOverTime(minspace + ""); checkprojServices.setState(Dictionary.SERVICE_STATU_FWWC); sysProjServicesDao.update(checkprojServices); } return rerunlt; } @Override public List findInPage(SysProjServices sysProjServices, PaginationVO pageVo) { return sysProjServicesDao.selectInPage(sysProjServices, pageVo); } @Override public int findTotal(SysProjServices sysProjServices) { return sysProjServicesDao.selectTotalRecord(sysProjServices); } }