package com.matrix.system.padApi.action; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.*; import com.matrix.system.app.vo.UserInfoVo; import com.matrix.system.common.authority.DefaultAuthorityManager; import com.matrix.system.common.authority.strategy.AccountPasswordLogin; import com.matrix.system.common.authority.strategy.LoginStrategy; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.SysCompanyDao; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.common.init.LocalCache; import com.matrix.system.common.service.SysUsersService; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.action.BaseController; import com.matrix.system.hive.bean.SysBeauticianState; import com.matrix.system.hive.bean.SysBedInfo; import com.matrix.system.hive.bean.SysProjServices; import com.matrix.system.hive.bean.SysShopInfo; import com.matrix.system.hive.dao.SysBedInfoDao; import com.matrix.system.hive.dao.SysShopInfoDao; import com.matrix.system.hive.service.SysBedInfoService; import com.matrix.system.hive.service.SysOrderService; import com.matrix.system.hive.service.SysShopInfoService; import com.matrix.system.hive.service.SysWorktimeService; import com.matrix.system.padApi.dto.Base64UploadDto; import com.matrix.system.padApi.dto.PadOrderListDto; import com.matrix.system.padApi.dto.WebPadLoginDto; import com.matrix.system.padApi.vo.PadOrderDetailVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.FileCopyUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import sun.misc.BASE64Decoder; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @CrossOrigin(origins = "*") @Api(value = "PadApiCommonAction", tags = "pad端公共请求类(含登陆)") @RestController @RequestMapping(value = "/api/common/pad") public class PadApiCommonAction extends BaseController { @Autowired private SysUsersService sysUsersService; @Autowired private DefaultAuthorityManager authorityManager; @Autowired SysShopInfoDao sysShopInfoDao; @Autowired SysCompanyDao sysCompanyDao; @Autowired private SysShopInfoService sysShopInfoService; @Resource private SysOrderService sysOrderService; @Resource private SysBedInfoService bedInfoService; @Resource private SysWorktimeService sysWorkTimeService; @Resource private SysUsersService usersService; @Autowired private SysBedInfoDao sysBedInfoDao; @Value("${login_public_key}") private String publicKey; @Autowired private SysUsersDao sysUsersDao; Logger log = Logger.getLogger(PadApiCommonAction.class); @Value("${file_storage_path}") private String fileStoragePath; @Value("${static_resource_url}") private String nginxUrl; /** * 最大值 */ private Long maxSize = 1024*1024*100L; @ApiOperation(value = "登陆接口", notes = "pad端登陆接口") @ApiResponses({ @ApiResponse(code = 200, message = "OK", response = UserInfoVo.class) }) @PostMapping(value = "/login") public AjaxResult dologin(@RequestBody @Validated WebPadLoginDto loginDto) throws Exception { SysUsers user = new SysUsers(); user.setSuAccount(loginDto.getUsername()); user.setSuPassword(loginDto.getPassword()); LoginStrategy apLogin = new AccountPasswordLogin(user, sysUsersService); user = authorityManager.login(apLogin); UserInfoVo userInfoVo = new UserInfoVo(); if(user.getShopId()!=null){ SysShopInfo shopInfo = sysShopInfoService.findById(user.getShopId()); user.setShopName(shopInfo.getShopName()); userInfoVo.setShopName(shopInfo.getShopShortName()); } user.setSuPassword(null); String token = UUIDUtil.getRandomID(); LocalCache.save(token, user); userInfoVo.setId(user.getSuId()); userInfoVo.setName(user.getSuName()); userInfoVo.setRoleName(user.getRoleName()); userInfoVo.setPhoto(user.getSuPhoto()); String sb = token + "_1" + "_/api/vip/findVipInfoById/972"; AjaxResult result = AjaxResult.buildSuccessInstance("登陆成功"); authorityManager.initUserPower(result); result.putInMap("user", userInfoVo); result.putInMap("token", token); result.putInMap("rasToken", RSAUtils.encryptByPublicKey(sb, publicKey)); return result; } @ApiOperation(value = "首页", notes = "首页") @GetMapping(value = "/frist/{suId}") public AjaxResult frist(@PathVariable Long suId) { SysUsers user = usersService.findById(suId); LogUtil.info("首页 shopId={}", user.getShopId()); // SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); PadOrderListDto orderListDto = new PadOrderListDto(); orderListDto.setPageNum(1); orderListDto.setPageSize(5); int offset = (orderListDto.getPageNum() - 1) * orderListDto.getPageSize(); int limit = orderListDto.getPageSize(); PaginationVO pageVo = new PaginationVO(); pageVo.setOffset(offset); pageVo.setLimit(limit); if(ObjectUtil.isNotEmpty(user.getShopId())){ orderListDto.setShopId(user.getShopId()); } // if (!DataAuthUtil.hasAllShopAuth()) { // orderListDto.setShopId(user.getShopId()); // } if(ObjectUtil.isNotEmpty(user.getCompanyId())){ orderListDto.setCompanyId(user.getCompanyId()); } // QueryUtil.setQueryLimitCom(orderListDto); List padApiOrderListInPage = sysOrderService.findPadApiOrderListInPage(orderListDto, pageVo); AjaxResult result = AjaxResult.buildSuccessInstance(""); result.putInMap("orderList",padApiOrderListInPage); Date date = new Date(); SysUsers shopstaffInfo = new SysUsers(); shopstaffInfo.setCompanyId(user.getCompanyId()); shopstaffInfo.setShopId(user.getShopId()); shopstaffInfo.setRoleName(Dictionary.STAFF_POST_MLS); List mls = sysUsersDao.selectByRoleName(shopstaffInfo); LogUtil.info("美疗师 size={}", mls.size()); // List mls = usersService.findByRoleName(true, Dictionary.STAFF_POST_MLS); if(CollUtil.isNotEmpty(mls)){ SysBeauticianState sysBeauticianState = new SysBeauticianState(); sysBeauticianState.setBeginTime(DateUtil.getStartDate(date)); sysBeauticianState.setEndTime(DateUtil.getStartDate(date)); String panBanCodes = DateUtil.dateToString(sysBeauticianState.getBeginTime(),DateUtil.DATE_FORMAT_NO_SPLITE_DD); List staffs=new ArrayList<>(); // if(sysWorkTimeService.isInWorkTime(user.getShopId(),sysBeauticianState.getBeginTime(),sysBeauticianState.getEndTime())){ staffs= sysUsersService.findByCodeBeaStateShop(user.getShopId(), sysBeauticianState, panBanCodes); if(CollUtil.isNotEmpty(staffs)){ result.putInMap("usedMls", mls.size() - staffs.size()); result.putInMap("freeMls", staffs.size()); }else{ result.putInMap("usedMls", mls.size()); result.putInMap("freeMls", 0); } // } } SysBedInfo bedInfo = new SysBedInfo(); bedInfo.setShopId(user.getShopId()); List totalBed = bedInfoService.findByModel(bedInfo); if(CollUtil.isNotEmpty(totalBed)){ SysProjServices sysProjServices = new SysProjServices(); sysProjServices.setShopId(user.getShopId()); sysProjServices.setStartTime(DateUtil.getStartDate(date)); sysProjServices.setEndTime(DateUtil.getStartDate(date)); List freeBed = sysBedInfoDao.findFreeBed(sysProjServices); // List freeBed = bedInfoService.findFreeBed(sysProjServices); if(CollUtil.isNotEmpty(freeBed)){ result.putInMap("usedBed", totalBed.size() - freeBed.size()); result.putInMap("freeBed", freeBed); }else{ result.putInMap("usedBed", totalBed); result.putInMap("freeBed", 0); } } return result; } @ApiOperation(value = "用户退出系统", notes = "用户退出系统") @ApiResponses({ @ApiResponse(code = 200, message = "ok", response = AjaxResult.class) }) @GetMapping(value = "/loginOut") public AjaxResult loginOut() { authorityManager.getLoginOut(); return AjaxResult.buildSuccessInstance("退出系统成功"); } /** * 文件上传方法 */ @ApiOperation(value = "文件上传方法", notes = "文件上传方法") @PostMapping(value = "/doUpload") public AjaxResult doFileUpload(@RequestBody @Validated Base64UploadDto uploadDto){ // 文件保存目录路径 String savePath = fileStoragePath; // 文件保存目录URL String saveUrl = nginxUrl; // 保存和访问路径检查 if (StringUtils.isBlank(saveUrl) || StringUtils.isBlank(savePath)) { return AjaxResult.buildFailInstance("文件上传失败错误代码:001"); } // 检查目录 File uploadDir = new File(savePath); if (!uploadDir.isDirectory()) { uploadDir.mkdir(); } log.info("uploadDto:" + uploadDto.getBase64Str()); BASE64Decoder decoder = new BASE64Decoder(); byte[] bytes = new byte[0]; try { bytes = decoder.decodeBuffer(uploadDto.getBase64Str()); } catch (IOException e) { return AjaxResult.buildFailInstance("上传文件失败"); } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String ymd = sdf.format(new Date()); savePath += ymd + "/"; saveUrl += ymd + "/"; File dirFile = new File(savePath); if (!dirFile.exists()) { dirFile.mkdirs(); } if (bytes.length > maxSize) { return AjaxResult.buildFailInstance("上传文件大小超过限制"); } String newFileName = UUIDUtil.getRandomID() + UUIDUtil.getRandomID() + ".jpg"; File uploadedFile = new File(savePath, newFileName); try { FileCopyUtils.copy(bytes, uploadedFile); } catch (Exception e) { return AjaxResult.buildFailInstance("上传文件失败"); } log.info("saveUrl:" + saveUrl); String visitPath = saveUrl + newFileName; log.info("上传一个文件:" + newFileName); log.info("访问路径:" + visitPath); AjaxResult result = AjaxResult.buildSuccessInstance("上传成功"); result.putInMap("path", visitPath); result.putInMap("fileName", newFileName); return result; } }