package com.jilongda.optometrist.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jilongda.common.Ticket.TAddOptometryVO;
import com.jilongda.common.Ticket.TOptometryDetailVO;
import com.jilongda.common.Ticket.TicketUtil;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.optometrist.authority.service.SecUserService;
import com.jilongda.optometrist.model.*;
import com.jilongda.optometrist.query.TOptometryQuery;
import com.jilongda.optometrist.service.*;
import com.jilongda.optometrist.utils.LoginInfoUtil;
import com.jilongda.optometrist.vo.*;
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.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
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;
@Autowired
private TTicketService tTicketService;
@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);
}
public static void main(String[] args) {
// LocalDateTime now = LocalDateTime.now();
// // 获取凌晨00:00:00和23:59:59
// LocalDateTime startTime = now.withHour(0).withMinute(0).withSecond(0);
// LocalDateTime endTime = now.withHour(23).withMinute(59).withSecond(59);
// System.err.println(startTime);
// System.err.println(endTime);
}
@ApiOperation(value = "首页")
@PostMapping(value = "/index")
public ApiResult index() {
TOptometristVO tOptometristVO = new TOptometristVO();
Integer userId = loginInfoUtil.getUserId();
TOptometrist optometrist = optometristService.getById(userId);
TStore store = storeService.getById(optometrist.getStoreId());
tOptometristVO.setStoreName(store.getName());
tOptometristVO.setName(optometrist.getName());
tOptometristVO.setPhone(optometrist.getPhone());
LocalDateTime nowTime = LocalDateTime.now();
// 获取凌晨00:00:00和23:59:59
LocalDateTime startTime = nowTime.withHour(0).withMinute(0).withSecond(0);
LocalDateTime endTime = nowTime.withHour(23).withMinute(59).withSecond(59);
int size = optometryService.lambdaQuery().eq(TOptometry::getStoreId, store.getId())
.between(TOptometry::getCreateTime, startTime, endTime)
.eq(TOptometry::getStatus, 3).list().size();
tOptometristVO.setOptometryCount(size);
// 查询今日的排号列表
List list = tLineUpService.lambdaQuery().eq(TLineUp::getStoreId, optometrist.getStoreId())
.ne(TLineUp::getStatus, 3)
.ne(TLineUp::getStatus, 5)
.orderByAsc(TLineUp::getCode)
.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)
.ne(TLineUp::getId,id)
.eq(TLineUp::getOptometristId, userId).list();
if (!list.isEmpty()){
return ApiResult.failed("当前还有未结束的验光单");
}
TLineUp lineUp = tLineUpService.getById(id);
// 获取今天凌晨00:00:00和今日23:59:59
Date start = new Date();
start.setHours(0);
start.setMinutes(0);
start.setSeconds(0);
Date end = new Date();
end.setHours(23);
end.setMinutes(59);
end.setSeconds(59);
List lineUps = tLineUpService.lambdaQuery().eq(TLineUp::getStoreId, lineUp.getStoreId())
.eq(TLineUp::getStatus,1)
.between(TLineUp::getCreateTime, start, end).list();
for (TLineUp up : lineUps) {
if (Integer.parseInt(up.getCode()) add(@RequestBody TAddOptometryVO dto) {
TLineUp lineUp = tLineUpService.getById(dto.getId());
TAppUser app = appUserService.getById(lineUp.getUserId());
TOptometry tOptometry = new TOptometry();
tOptometry.setUserId(lineUp.getUserId());
tOptometry.setAge(lineUp.getAge());
tOptometry.setGender(lineUp.getGender());
if (app!=null){
tOptometry.setPhone(app.getPhone());
}
tOptometry.setLineUpId(dto.getId());
Integer userId = loginInfoUtil.getUserId();
TOptometrist optometrist = optometristService.getById(userId);
tOptometry.setRealName(lineUp.getUserName());
tOptometry.setLineUpId(dto.getId());
tOptometry.setOptometristId(userId);
tOptometry.setStoreId(optometrist.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(optometrist.getStoreId());
tOptometryDetail.setStatus(optometryDetailVO.getStatus());
tOptometryDetails.add(tOptometryDetail);
}
optometryDetailService.saveBatch(tOptometryDetails);
// 验光完成
lineUp.setStatus(3);
tLineUpService.updateById(lineUp);
dto.setOptometristName(optometrist.getName());
TStore store = storeService.getById(lineUp.getStoreId());
dto.setShopName(store.getName());
TAppUser appUser = appUserService.getById(lineUp.getUserId());
dto.setPhone(appUser.getPhone());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(new Date());
dto.setTime(format);
TTicket tTicket = tTicketService.lambdaQuery().eq(TTicket::getStoreId, lineUp.getStoreId())
.eq(TTicket::getType,1)
.eq(TTicket::getStatus, 1).list().stream().findFirst().orElse(null);
if (tTicket==null){
return ApiResult.failed("当前门店未绑定小票机");
}
dto.setSn(tTicket.getCloudId()+"");
String print = TicketUtil.print(dto);
JSONObject jsonObject = JSONObject.parseObject(print);
if (!jsonObject.getString("msg").equals("ok")){
return ApiResult.failed(jsonObject.getString("msg"));
}
return ApiResult.success();
}
}