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(); } }