package com.jilongda.optometrist.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.optometrist.authority.model.SecUser;
import com.jilongda.optometrist.authority.service.SecUserService;
import com.jilongda.optometrist.model.*;
import com.jilongda.optometrist.query.TOptometristQuery;
import com.jilongda.optometrist.query.TOptometryQuery;
import com.jilongda.optometrist.query.TicketQuery;
import com.jilongda.optometrist.service.*;
import com.jilongda.optometrist.utils.LoginInfoUtil;
import com.jilongda.optometrist.vo.*;
import com.sun.org.apache.bcel.internal.generic.NEW;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
*
* 验光师表 前端控制器
*
*
* @author 无关风月
* @since 2024-12-09
*/
@Api(tags = "验光师相关接口")
@RestController
@RequestMapping("/t-optometrist")
public class TOptometristController {
@Autowired
private TOptometristService optometristService;
@Autowired
private TLineUpService tLineUpService;
@Autowired
private LoginInfoUtil loginInfoUtil;
@Autowired
private SecUserService secUserService;
@Autowired
private TStoreService storeService;
@Autowired
private TOptometryService optometryService;
@Autowired
private TAppUserService appUserService;
@Autowired
private TOrderService orderService;
@Autowired
private TOptometryDetailService optometryDetailService;
@ApiOperation(value = "获取验光单分页列表",tags = "验光单")
@PostMapping(value = "/pageList")
public ApiResult> pageList(@RequestBody TOptometryQuery query) {
String startTime = null;
String endTime = null;
if (StringUtils.hasLength(query.getTime())){
startTime = query.getTime()+" 00:00:00";
endTime = query.getTime()+" 23:59:59";
}
query.setStartTime(startTime);
query.setEndTime(endTime);
PageInfo tOptometryVOPageInfo = optometristService.pageList(query);
return ApiResult.success(tOptometryVOPageInfo);
}
@ApiOperation(value = "验光记录详情")
@GetMapping(value = "/detail")
public ApiResult detail(Integer id) {
TOptometry one = optometryService.getById(id);
TAppUser byId = appUserService.getById(one.getUserId());
TDetailVO tDetailVO = new TDetailVO();
tDetailVO.setName(byId.getName());
tDetailVO.setPhone(byId.getPhone());
tDetailVO.setAvatar(byId.getAvatar());
tDetailVO.setRealName(one.getRealName());
tDetailVO.setAge(one.getAge());
tDetailVO.setGender(one.getGender());
// 查询消费次数,验光次数
long l = optometryService.count(Wrappers.lambdaQuery()
.eq(TOptometry::getUserId, byId.getId())
.eq(TOptometry::getStatus,3));
tDetailVO.setOptometryCount((int) l);
long count = orderService.count(Wrappers.lambdaQuery()
.eq(TOrder::getUserId, byId.getId()));
tDetailVO.setSaleCount((int) count);
TOptometrist byId1 = optometristService.getById(one.getOptometristId());
tDetailVO.setOptometristName(byId1.getName());
TStore byId2 = storeService.getById(one.getStoreId());
tDetailVO.setStoreName(byId2.getName());
List list = optometryDetailService.lambdaQuery().eq(TOptometryDetail::getOptometryId, one.getId()).list();
tDetailVO.setOptometryDetailVOS(list);
tDetailVO.setCreateTime(one.getCreateTime());
return ApiResult.success(tDetailVO);
}
@ApiOperation(value = "首页")
@PostMapping(value = "/index")
public ApiResult index() {
TOptometristVO tOptometristVO = new TOptometristVO();
Integer userId = loginInfoUtil.getUserId();
TOptometrist byId = optometristService.getById(userId);
TStore byId1 = storeService.getById(byId.getStoreId());
tOptometristVO.setStoreName(byId1.getName());
tOptometristVO.setName(byId.getName());
tOptometristVO.setPhone(byId.getPhone());
int size = optometryService.lambdaQuery().eq(TOptometry::getOptometristId, userId)
.eq(TOptometry::getStatus, 3).list().size();
tOptometristVO.setOptometryCount(size);
// 查询今日的排号列表
List list = tLineUpService.lambdaQuery().eq(TLineUp::getStoreId, byId.getStoreId())
.ne(TLineUp::getStatus, 3)
.ne(TLineUp::getStatus, 5).list();
for (TLineUp tLineUp : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime createTime = tLineUp.getCreateTime();
long minutesDifference = createTime.until(now, java.time.temporal.ChronoUnit.MINUTES);
if (minutesDifference < 0) {
minutesDifference = 0;
}
tLineUp.setWaitTime((int) minutesDifference);
}
tOptometristVO.setList(list);
return ApiResult.success(tOptometristVO);
}
@ApiOperation(value = "预约详情")
@GetMapping(value = "/getLineUpDetail")
public ApiResult getLineUpDetail(Integer id) {
TLineUpDetailVO tLineUpDetailVO = new TLineUpDetailVO();
TLineUp byId = tLineUpService.getById(id);
BeanUtils.copyProperties(byId, tLineUpDetailVO);
LocalDateTime now = LocalDateTime.now();
LocalDateTime createTime = byId.getCreateTime();
long minutesDifference = createTime.until(now, java.time.temporal.ChronoUnit.MINUTES);
if (minutesDifference < 0) {
minutesDifference = 0;
}
tLineUpDetailVO.setWaitTime((int) minutesDifference);
if (byId.getUserId()!=null){
TAppUser byId1 = appUserService.getById(byId.getUserId());
if (byId1!=null){
tLineUpDetailVO.setName(byId1.getName());
tLineUpDetailVO.setPhone(byId1.getPhone());
tLineUpDetailVO.setAvatar(byId1.getAvatar());
}
// 查询消费次数,验光次数
long l = optometryService.count(Wrappers.lambdaQuery()
.eq(TOptometry::getUserId, byId.getUserId())
.eq(TOptometry::getStatus,3));
tLineUpDetailVO.setOptometryCount((int) l);
long count = orderService.count(Wrappers.lambdaQuery()
.eq(TOrder::getUserId, byId.getUserId()));
tLineUpDetailVO.setSaleCount((int) count);
}
return ApiResult.success(tLineUpDetailVO);
}
@ApiOperation(value = "开始验光")
@GetMapping(value = "/startOptometry")
public ApiResult startOptometry(Integer id) {
Integer userId = loginInfoUtil.getUserId();
List list = tLineUpService.lambdaQuery().eq(TLineUp::getStatus, 2)
.eq(TLineUp::getOptometristId, userId).list();
if (!list.isEmpty())return ApiResult.failed("当前还有未结束的验光单");
TLineUp lineUp = tLineUpService.getById(id);
lineUp.setStatus(2);
tLineUpService.updateById(lineUp);
return ApiResult.success();
}
@ApiOperation(value = "取消排号")
@GetMapping(value = "/cancelLineUp")
public ApiResult cancelLineUp(Integer id) {
TLineUp lineUp = tLineUpService.getById(id);
lineUp.setStatus(5);
tLineUpService.updateById(lineUp);
TOptometry one = optometryService.lambdaQuery().eq(TOptometry::getLineUpId, lineUp.getId()).one();
if (one!=null){
one.setStatus(5);
}
optometryService.updateById(one);
return ApiResult.success();
}
@ApiOperation(value = "填写验光信息完成")
@PostMapping(value = "/add")
public ApiResult add(@RequestBody TAddOptometryVO dto) {
TLineUp byId = tLineUpService.getById(dto.getId());
TAppUser byId1 = appUserService.getById(byId.getUserId());
TOptometry tOptometry = new TOptometry();
tOptometry.setUserId(byId.getUserId());
tOptometry.setAge(byId.getAge());
tOptometry.setGender(byId.getGender());
if (byId1!=null){
tOptometry.setPhone(byId1.getPhone());
}
tOptometry.setLineUpId(dto.getId());
Integer userId = loginInfoUtil.getUserId();
TOptometrist byId2 = optometristService.getById(userId);
tOptometry.setRealName(byId.getUserName());
tOptometry.setLineUpId(dto.getId());
tOptometry.setOptometristId(userId);
tOptometry.setStoreId(byId2.getStoreId());
tOptometry.setStatus(3);
optometryService.save(tOptometry);
List tOptometryDetails = new ArrayList<>();
for (TOptometryDetailVO optometryDetailVO : dto.getOptometryDetailVOS()) {
TOptometryDetail tOptometryDetail = new TOptometryDetail();
tOptometryDetail.setType(optometryDetailVO.getType());
tOptometryDetail.setOptometryId(tOptometry.getId());
tOptometryDetail.setBallMirror(optometryDetailVO.getBallMirror());
tOptometryDetail.setColumnMirror(optometryDetailVO.getColumnMirror());
tOptometryDetail.setAxis(optometryDetailVO.getAxis());
tOptometryDetail.setAddS(optometryDetailVO.getAddS());
tOptometryDetail.setPupilHeight(optometryDetailVO.getPupilHeight());
tOptometryDetail.setPupilDistance(optometryDetailVO.getPupilDistance());
tOptometryDetail.setCorrect(optometryDetailVO.getCorrect());
tOptometryDetail.setStoreId(byId2.getStoreId());
tOptometryDetail.setStatus(optometryDetailVO.getStatus());
tOptometryDetails.add(tOptometryDetail);
}
optometryDetailService.saveBatch(tOptometryDetails);
// 验光完成
byId.setStatus(3);
tLineUpService.updateById(byId);
return ApiResult.success();
}
}