server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -59,6 +59,7 @@ public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) { try { ServerHttpRequest request = serverWebExchange.getRequest(); dto.setCheckCode(true); LoginUserInfo user = systemLoginService.loginByPasswordNew(dto,request); String token = jwtTokenUtil.generateToken(user); return ApiResponse.success(token); @@ -90,6 +91,24 @@ } } @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("司机登录") @PostMapping("/loginDriver") @LoginNoRequired public ApiResponse<String> loginDriver (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) { try { ServerHttpRequest request = serverWebExchange.getRequest(); dto.setCheckCode(false); LoginUserInfo user = systemLoginService.driverLogin(dto,request); String token = jwtTokenUtil.generateToken(user); return ApiResponse.success(token); }catch (BusinessException e){ return ApiResponse.failed(e.getCode(),e.getMessage()); }catch (Exception e){ e.printStackTrace(); return ApiResponse.failed(ResponseStatus.SERVER_ERROR); } } /** * 刷新JWT令牌,用旧的令牌换新的令牌 server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -4,6 +4,7 @@ import com.doumee.dao.system.model.SystemPermission; import com.doumee.dao.system.model.SystemRole; import com.doumee.dao.system.model.SystemUser; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.BeanUtils; @@ -59,15 +60,19 @@ loginUserInfo.setCompany(company); // 设置角色信息 List<String> rs = new ArrayList<>(); for (SystemRole role : roles) { rs.add(role.getCode()); if(CollectionUtils.isNotEmpty(roles)){ for (SystemRole role : roles) { rs.add(role.getCode()); } } loginUserInfo.setSessionId(sessionId); loginUserInfo.setRoles(rs); // 设置权限信息 List<String> pms = new ArrayList<>(); for (SystemPermission permission : permissions) { pms.add(permission.getCode()); if(CollectionUtils.isNotEmpty(permissions)){ for (SystemPermission permission : permissions) { pms.add(permission.getCode()); } } loginUserInfo.setPermissions(pms); return loginUserInfo; server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1,14 +1,16 @@ package com.doumee.core.utils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.doumee.core.model.LoginUserInfo; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import io.swagger.models.auth.In; import org.apache.batik.util.Platform; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import java.io.IOException; import java.math.BigDecimal; @@ -152,6 +154,11 @@ // 超时预警配置 public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING"; // FTP文件服务器资源访问地址 //月台预约指南 public static final String PLATFORM_BOOKING_TIPS = "PLATFORM_BOOKING_TIPS"; //月台导览图 public static final String PLATFORM_GUIDEMAP = "PLATFORM_GUIDEMAP"; public static String getRandom6Num( ) { Random random = new Random(); @@ -453,6 +460,7 @@ int cityUseCar = 3;//市内用车 int unCityUseCar = 4;//市外用车 int logisticsCarUse = 5;//物流车预约 int reason = 6;//入园原因 } @@ -466,6 +474,10 @@ }else if(Constants.equalsInteger(approveType,Constants.approveObjectType.cityUseCar) ||Constants.equalsInteger(approveType,Constants.approveObjectType.unCityUseCar)){ return Constants.noticesObjectType.useCar; }else if(Constants.equalsInteger(approveType,Constants.approveObjectType.logisticsCarUse)){ return Constants.noticesObjectType.logisticsCarUse; }else if(Constants.equalsInteger(approveType, approveObjectType.reason)){ return noticesObjectType.reason; }else { return Constants.noticesObjectType.system; } @@ -481,6 +493,7 @@ int dangerDeal = 3;//隐患处理 int logisticsCarUse = 4;//物流车审批 int system = 5;//系统消息 int reason = 6;//入园原因 } server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -1823,14 +1823,6 @@ // StringUtil.getNotNullStr(request.getParameter(strParamName)); // return getDateByString(strStr); // } /** * 得到当前日期,格式yyyy-MM-dd。 * * @return String 格式化的日期字符串 */ public static String getCurrDate() { return getFormattedDate(getDateByString("")); } /** * 得到当前日期,格式yyyy-MM-dd。 @@ -1897,6 +1889,17 @@ } /** * 得到当前日期时间,格式为yyyy-MM-dd. * * @return String */ public static String getCurrDate() { Timestamp date = new Timestamp(System.currentTimeMillis()); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); return formatter.format(date); } /** * 得到指定的日期,如一年三个月零九天后(以yyyy/MM/dd格式显示)参数为("yyyy/MM/dd",1,3,9) * * @param strFormat server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -23,6 +23,7 @@ LoginUserInfo loginByPasswordNew (LoginDTO dto, ServerHttpRequest request); LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request); /** * 根据 openId登录 * @param userId server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -125,7 +125,7 @@ loginLog.setOsInfo(Utils.User_Client.getOS(request)); } loginLog.setServerIp(Utils.Server.getIP()); if(isDebug == null || !isDebug){ if(isDebug == null || !isDebug && dto.getCheckCode()){ // 校验验证码 try { captchaService.check(dto.getUuid(), dto.getCode()); @@ -171,6 +171,43 @@ } @Override public LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request) { SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getUsername()); loginLog.setLoginTime(new Date()); loginLog.setSystemVersion(systemVersion); loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp())); if(request!=null&&request.getHeaders()!=null && request.getHeaders().size()>0){ loginLog.setIp(Utils.User_Client.getIP(request)); loginLog.setPlatform(Utils.User_Client.getPlatform(request)); loginLog.setClientInfo(Utils.User_Client.getBrowser(request)); loginLog.setOsInfo(Utils.User_Client.getOS(request)); } loginLog.setServerIp(Utils.Server.getIP()); // 根据用户名查询用户对象 SystemUser queryDto = new SystemUser(); queryDto.setUsername(dto.getUsername()); queryDto.setDeleted(Boolean.FALSE); SystemUser user = systemUserService.findOne(queryDto); if (user == null) { throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); } String pwd = Utils.Secure.encryptPassword(new String(dto.getPassword()), user.getSalt()); // 比较密码 if( !StringUtils.equals(pwd, user.getPassword())){ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); } Company company = new Company(); if(Objects.nonNull(user.getCompanyId())){ company = companyMapper.selectById(user.getCompanyId()); } LoginUserInfo userInfo = LoginUserInfo.from(user, null, null,company,null); return userInfo; } /** * 内部人员 与 司机 根据code查询openId后进行登录接口 * @return server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java
@@ -9,6 +9,7 @@ import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.dao.business.model.Platform; import com.doumee.service.business.PlatformJobService; import com.doumee.service.business.PlatformService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * @author 江蹄蹄 @@ -28,6 +30,9 @@ @Autowired private PlatformService platformService; @Autowired private PlatformJobService platformJobService; @PreventRepeat @ApiOperation("新建") @@ -77,6 +82,14 @@ return ApiResponse.success(platformService.findPage(pageWrap)); } @ApiOperation("根据月台组获取月台列表信息") @GetMapping("/listByGroupId") @CloudRequiredPermission("business:platform:query") public ApiResponse<List<Platform>> listByGroupId (@RequestParam Integer groupId, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){ return ApiResponse.success(platformJobService.getPlatformList(groupId,this.getLoginUser(token))); } @ApiOperation("导出Excel") @PostMapping("/exportExcel") @CloudRequiredPermission("business:platform:exportExcel") server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
@@ -1,17 +1,17 @@ package com.doumee.cloud.web; import cn.hutool.http.useragent.Platform; import com.doumee.api.BaseController; import com.doumee.config.annotation.LoginNoRequired; import com.doumee.config.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.model.PlatformBooks; import com.doumee.dao.business.model.PlatformJob; import com.doumee.dao.business.model.Visits; import com.doumee.dao.business.model.*; import com.doumee.dao.web.reqeust.*; import com.doumee.dao.web.response.DriverHomeVO; import com.doumee.dao.web.response.LineUpVO; @@ -27,6 +27,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * Created by IntelliJ IDEA. @@ -52,13 +53,24 @@ @Autowired private PlatformBooksService platformBooksService; @Autowired private PlatformReasonService platformReasonService; @ApiOperation("入园原因") @GetMapping("/platformReasonList") public ApiResponse<List<PlatformReason>> platformReasonList (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { List<PlatformReason> platformReasons = platformReasonService.findList(null); return ApiResponse.success(platformReasons); } @ApiOperation("司机首页信息") @GetMapping("/driverHome") public ApiResponse<DriverHomeVO> driverHome (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) { DriverHomeVO driverHomeVO = platformJobService.getDriverHome(getLoginUser(token).getMemberId()); DriverHomeVO driverHomeVO = platformJobService.getDriverHome(getLoginUser(token)); return ApiResponse.success(driverHomeVO); } @ApiOperation("查询可预约量") @PostMapping("/checkSurplusNum") @@ -69,14 +81,18 @@ @ApiOperation("物流车预约") @PostMapping("/apply") public ApiResponse<Integer> apply (@RequestBody PlatformBooksApplyDTO platformBooksApplyDTO , @RequestHeader(Constants.HEADER_USER_TOKEN) String token) { platformBooksApplyDTO.setUserId(getLoginUser(token).getMemberId()); LoginUserInfo loginUserInfo = getLoginUser(token); platformBooksApplyDTO.setUserId(loginUserInfo.getMemberId()); platformBooksApplyDTO.setDriverId(loginUserInfo.getMemberId()); return ApiResponse.success(platformBooksService.apply(platformBooksApplyDTO)); } @ApiOperation("物流车预约记录") @PostMapping("/page") public ApiResponse<PageData<PlatformBooks>> findPage (@RequestBody PageWrap<PlatformBooks> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) { LoginUserInfo loginUserInfo = this.getLoginUser(token); pageWrap.getModel().setQueryDate(DateUtil.getBeforDay(new Date(),30)); pageWrap.getModel().setDriverPhone(loginUserInfo.getMobile()); return ApiResponse.success(platformBooksService.findPage(pageWrap)); } server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java
@@ -8,10 +8,7 @@ import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.model.PlatformBooks; import com.doumee.dao.business.model.PlatformGroup; import com.doumee.dao.business.model.PlatformJob; import com.doumee.dao.business.model.PlatformShowParam; import com.doumee.dao.business.model.*; import com.doumee.dao.web.reqeust.*; import com.doumee.dao.web.response.DriverHomeVO; import com.doumee.dao.web.response.LineUpVO; @@ -54,10 +51,8 @@ @Autowired private PlatformShowParamService platformShowParamService; @Autowired private PlatformService platformService; @ApiOperation("获取月台组信息") @ApiImplicitParams({ @@ -69,9 +64,16 @@ } @ApiOperation("更新月台配置信息") @GetMapping("/updUserPlatformConfig") @PostMapping("/updUserPlatformConfig") public ApiResponse updUserPlatformConfig (@RequestBody List<Integer> ids, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){ platformShowParamService.updUserConfig(ids,getLoginUser(token)); return ApiResponse.success("操作成功"); } @ApiOperation("修改禁启用状态") @PostMapping("/updPlatformStatus") public ApiResponse updPlatformStatus (@RequestBody Platform platform, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){ platformService.updateStatusById(platform); return ApiResponse.success("操作成功"); } @@ -131,9 +133,6 @@ platformJobService.platformInPark(jobOperateDTO); return ApiResponse.success("操作成功"); } } server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java
@@ -18,7 +18,7 @@ @ApiModelProperty(value = "关联业务主键") private Integer objId; @ApiModelProperty(value = "关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约") @ApiModelProperty(value = "关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约 6入园预约") private Integer objType; @ApiModelProperty(value = "2审批通过 3审批未通过") server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -117,8 +117,8 @@ @ExcelColumn(name="是否修改目的地 0否 1是") private Integer addrParam; @ApiModelProperty(value = "关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约", example = "1") @ExcelColumn(name="关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约") @ApiModelProperty(value = "关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约 6入园原因", example = "1") @ExcelColumn(name="关联业务类型:0非施工人员访客申请 1非施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约 6入园原因") private Integer objType; @ApiModelProperty(value = "类型 0审批 1抄送", example = "1") server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
@@ -52,8 +52,8 @@ @ExcelColumn(name="备注") private String remark; @ApiModelProperty(value = "名称 0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约", example = "1") @ExcelColumn(name="名称 0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约") @ApiModelProperty(value = "名称 0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约 6入园原因", example = "1") @ExcelColumn(name="名称 0非施工人员访客申请 1施工人员访客申请 2访客报备 3公车市内用车 4公车室外用车 5市公司物流车预约 6入园原因") private Integer type; @ApiModelProperty(value = "名称") server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformBooks.java
@@ -136,6 +136,10 @@ @TableField(exist = false) private String queryDate; @ApiModelProperty(value = "图片前缀") @TableField(exist = false) private String prefixUrl; @ApiModelProperty(value = "审批信息数据") @TableField(exist = false) private ApproveDataVO approveDateVO; server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -264,7 +264,15 @@ @ApiModelProperty(value = "前方排队数量", example = "1") @TableField(exist = false) private Long lineUpNum; private Integer lineUpNum; @ApiModelProperty(value = "预计等待时间", example = "1") @TableField(exist = false) private String waitTime; @ApiModelProperty(value = "预计完成时间", example = "1") @TableField(exist = false) private String finishTimeStr; @ApiModelProperty(value = "关联月台组编码(关联platform_group表)", example = "1") @TableField(exist = false) @@ -278,6 +286,9 @@ @TableField(exist = false) private BigDecimal getDistance; @ApiModelProperty(value = "月台作业效率(万支/小时)", hidden = true) @TableField(exist = false) private BigDecimal workRate; @ApiModelProperty(value = "业务触发时间 时间") @TableField(exist = false) server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/PlatformBooksApplyDTO.java
@@ -19,6 +19,8 @@ @Api(tags = "入园预约申请信息" ) public class PlatformBooksApplyDTO { @ApiModelProperty(value = "主键 - 修改使用") private Integer id; @ApiModelProperty(value = "合同号") private String contractNum; server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DriverHomeVO.java
@@ -19,4 +19,11 @@ @ApiModelProperty(value = "月台任务列表") private List<PlatformJob> platformJobList; @ApiModelProperty(value = "预约指南") private String bookingTips; @ApiModelProperty(value = "园区导览图") private String reservationMap; } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -112,6 +112,8 @@ void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId); void createApproveForPlatfrom(Integer tempId,Integer businessId,Integer createMemberId); ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId); void approved(ApproveDTO approveDTO); server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -1,7 +1,9 @@ package com.doumee.service.business; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Platform; import com.doumee.dao.business.model.PlatformJob; import com.doumee.dao.web.reqeust.JobDetailDTO; import com.doumee.dao.web.reqeust.JobOperateDTO; @@ -102,7 +104,7 @@ */ long count(PlatformJob platformJob); DriverHomeVO getDriverHome(Integer memberId); DriverHomeVO getDriverHome(LoginUserInfo loginUserInfo); /** * 距离签到 @@ -172,4 +174,12 @@ */ void finishWork(JobOperateDTO jobOperateDTO); /** * 获取月台下的任务信息 * @param groupId * @param loginUserInfo * @return */ List<Platform> getPlatformList(Integer groupId, LoginUserInfo loginUserInfo); } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -31,6 +31,7 @@ import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.swagger.models.auth.In; import javafx.application.Platform; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.xpath.operations.Bool; @@ -388,6 +389,52 @@ } @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public void createApproveForPlatfrom(Integer tempId,Integer businessId,Integer createMemberId){ //查询处理模板 ApproveTempl approveTempl = approveTemplMapper.selectById(tempId); if(Objects.isNull(approveTempl)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到审批流配置模板"); } //查询配置流程 List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>() .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO) .eq(ApproveParam::getTemplId,approveTempl.getId()) .orderByAsc(ApproveParam::getType) .orderByAsc(ApproveParam::getLevel) ); if(Objects.isNull(approveParamAllList)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未配置审批流程"); } //审批配置 List<ApproveParam> approveParamList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList()); if(Objects.isNull(approveParamList)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未配置审批流程"); } List<ApproveParam> approveCopyList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList()); Member createMember = memberMapper.selectById(createMemberId); if(Objects.isNull(createMember)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"申请人组织信息异常"); } List<Approve> approveList = new ArrayList<>(); this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList); if(CollectionUtils.isEmpty(approveList)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流配置错误"); } //处理抄送数据 if(CollectionUtils.isNotEmpty(approveCopyList)){ this.organizeApproveCopyData(approveTempl,approveCopyList,businessId,approveList); } approveJoinMapper.insert(approveList); } /** * 组织审批流数据 * @param approveTempl @@ -555,8 +602,17 @@ jsonMap.put("eTime", "结束时间:" + DateUtil.DateToStr(carUseBook.getEndTime() , "yyyy-MM-dd HH:mm")); jsonMap.put("usrNum", StringUtils.isBlank(carUseBook.getMemberIds())?"乘车人数: 0人": "乘车人数: " +carUseBook.getMemberIds().split(",").length +"人"); jsonMap.put("mdd", StringUtils.isBlank(carUseBook.getAddr())?"目的地: - ": "目的地:" +carUseBook.getAddr()); }else { throw new BusinessException(ResponseStatus.NOT_ALLOWED); }else if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.reason)){ //物流车预约 PlatformBooks platformBooks = platformBooksMapper.selectById(businessId); if(Objects.isNull(platformBooks)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到业务数据信息"); } title = "【物流车入园预约】申请人 - " + platformBooks.getDriverName(); jsonMap.put("inType", "入库类型:"+(Constants.equalsInteger(platformBooks.getInType(),Constants.ZERO)?"整托盘":"件烟")); jsonMap.put("totalNum", "总运输量:"+platformBooks.getTotalNum()+"万支"); jsonMap.put("arriveDate", "到场时间:" + DateUtil.DateToStr(platformBooks.getArriveDate() , "yyyy-MM-dd HH:mm")); jsonMap.put("carNum", "车牌照:"+platformBooks.getCarCodeFront()); } return title; } @@ -1345,7 +1401,7 @@ }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals( Constants.approveObjectType.unCityUseCar)){ this.updDriver(approveDTO,approve,true); }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){ }else if(approveDTO.getObjType().equals(Constants.approveObjectType.reason)){ //物流车预约 PlatformBooks platformBooks = platformBooksMapper.selectById(approveDTO.getObjId()); if(Objects.isNull(platformBooks)){ server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2002,6 +2002,7 @@ systemUser.setUsername(registerDriverDTO.getPhone()); systemUser.setRealname(registerDriverDTO.getName()); systemUser.setMemberId(member.getId()); systemUser.setMobile(registerDriverDTO.getPhone()); systemUser.setSalt(salt); systemUser.setPassword(member.getPassward()); systemUser.setStatus(Constants.ZERO); server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -186,7 +186,7 @@ } //查询每日配置的总预约量 PlatformReason platformReason = platformReasonMapper.selectById(platformBooksCheckNumDTO.getReasonId()); if(Objects.isNull(platformReason)|| Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){ if(Objects.isNull(platformReason)|| !Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"入园原因信息异常,请刷新重试"); } List<PlatformBooks> platformBooksList = platformBooksMapper.selectList(new QueryWrapper<PlatformBooks>().lambda() @@ -225,23 +225,15 @@ throw new BusinessException(ResponseStatus.BAD_REQUEST); } PlatformReason platformReason = platformReasonMapper.selectById(platformBooksApplyDTO.getReasonId()); if(Objects.isNull(platformReason)|| Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){ if(Objects.isNull(platformReason)|| !Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"入园原因信息异常,请刷新重试"); } ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda() .eq(ApproveTempl::getIsdeleted,Constants.ZERO) .eq(ApproveTempl::getObjId,platformReason.getId()) .last(" limit 1") ); ApproveTempl approveTempl = approveTemplMapper.selectById(platformReason.getId()); if(Objects.isNull(approveTempl)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未配置审批流,请联系管理员"); } if(Constants.equalsInteger(platformBooksApplyDTO.getUserId(),platformBooksApplyDTO.getDriverId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"人员信息匹配错误"); } if(Objects.nonNull(platformReason.getLimitNum())&&platformReason.getLimitNum().compareTo(platformBooksApplyDTO.getTotalNum())>0){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"超出入园申请线质量"); if(!Constants.equalsInteger(approveTempl.getIsdeleted(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批流已停用,请联系管理员"); } PlatformBooks platformBooks = new PlatformBooks(); BeanUtils.copyProperties(platformBooksApplyDTO,platformBooks); @@ -252,9 +244,45 @@ platformBooksMapper.insert(platformBooks); //创建审批流信息 approveService.createApproveFlow(5,platformBooks.getId(),platformBooks.getDriverId()); approveService.createApproveForPlatfrom(platformReason.getApproveTemplId(),platformBooks.getId(),platformBooks.getDriverId()); return platformBooks.getId(); } // @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer edit(PlatformBooksApplyDTO platformBooksApplyDTO){ if(Objects.isNull(platformBooksApplyDTO) || Objects.isNull(platformBooksApplyDTO.getId()) || StringUtils.isBlank(platformBooksApplyDTO.getContractNum()) || Objects.isNull(platformBooksApplyDTO.getArriveDate()) || Objects.isNull(platformBooksApplyDTO.getInType()) || Objects.isNull(platformBooksApplyDTO.getTotalNum()) || StringUtils.isBlank(platformBooksApplyDTO.getCarCodeFront()) || StringUtils.isBlank(platformBooksApplyDTO.getCarCodeBack()) || Objects.isNull(platformBooksApplyDTO.getDriverId()) || StringUtils.isBlank(platformBooksApplyDTO.getDriverPhone()) || StringUtils.isBlank(platformBooksApplyDTO.getDriverName()) || StringUtils.isBlank(platformBooksApplyDTO.getTransportImg()) || Objects.isNull(platformBooksApplyDTO.getReasonId()) || StringUtils.isBlank(platformBooksApplyDTO.getInReason()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } PlatformBooks platformBooks = platformBooksMapper.selectById(platformBooksApplyDTO.getId()); if(Objects.isNull(platformBooks)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(!Constants.equalsInteger(platformBooks.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转"); } BeanUtils.copyProperties(platformBooksApplyDTO,platformBooks); platformBooks.setEditDate(new Date()); platformBooksMapper.insert(platformBooks); return platformBooks.getId(); } @Override @@ -263,8 +291,12 @@ if(Objects.isNull(model)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到预约记录"); } String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.FTP,Constants.PLATFORM).getCode(); model.setPrefixUrl(prefixUrl); ApproveDataVO approveDataVO = approveService.arrangeApprovedData(id, 5, 6, memberId); model.setApproveDateVO(approveDataVO); List<Approve> approveList = approveDataVO.getApproveList(); server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
@@ -6,19 +6,24 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.PlatformGroupMapper; import com.doumee.dao.business.PlatformShowParamMapper; import com.doumee.dao.business.join.PlatformJobJoinMapper; import com.doumee.dao.business.join.PlatformJoinMapper; import com.doumee.dao.business.model.Platform; import com.doumee.dao.business.model.PlatformGroup; import com.doumee.dao.business.model.PlatformJob; import com.doumee.dao.business.model.PlatformShowParam; import com.doumee.service.business.PlatformGroupService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.service.business.PlatformJobService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.java.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -44,6 +49,9 @@ @Autowired private PlatformShowParamMapper platformShowParamMapper; @Autowired private PlatformJobJoinMapper platformJobJoinMapper; @Override public Integer create(PlatformGroup platformGroup) { @@ -206,7 +214,6 @@ .selectAll(Platform.class) .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ") .eq(Platform::getIsdeleted, Constants.ZERO) .eq(Platform::getStatus, Constants.ZERO) .eq(Objects.nonNull(queryType)&&!Constants.equalsInteger(queryType,Constants.ZERO),Platform::getStatus,Constants.ZERO) ); //处理我的月台信息 是否配置隐藏 @@ -240,4 +247,7 @@ } } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -4,6 +4,7 @@ import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; @@ -12,6 +13,7 @@ import com.doumee.core.utils.Utils; import com.doumee.dao.business.*; import com.doumee.dao.business.join.PlatformJobJoinMapper; import com.doumee.dao.business.join.PlatformJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.web.reqeust.JobDetailDTO; import com.doumee.dao.web.reqeust.JobOperateDTO; @@ -33,6 +35,7 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.List; import java.util.Objects; @@ -58,8 +61,9 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private PlatformMapper platformMapper; private PlatformJoinMapper platformJoinMapper; @Autowired private PlatformLogMapper platformLogMapper; @@ -69,6 +73,12 @@ @Autowired private PlatformWmsDetailMapper platformWmsDetailMapper; @Autowired private PlatformGroupMapper platformGroupMapper; @Autowired private PlatformShowParamMapper platformShowParamMapper; @Override @@ -131,9 +141,13 @@ @Override public PageData<PlatformJob> findPage(PageWrap<PlatformJob> pageWrap) { IPage<PlatformJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper<PlatformJob> queryWrapper = new QueryWrapper<>(); MPJLambdaWrapper<PlatformJob> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.lambda() queryWrapper .selectAll(PlatformJob.class) .selectAs(Platform::getName,PlatformJob::getPlatformName) .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) .eq(pageWrap.getModel().getId() != null, PlatformJob::getId, pageWrap.getModel().getId()) .eq(pageWrap.getModel().getCreator() != null, PlatformJob::getCreator, pageWrap.getModel().getCreator()) .ge(pageWrap.getModel().getCreateDate() != null, PlatformJob::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())) @@ -216,13 +230,18 @@ queryWrapper.orderByAsc(sortData.getProperty()); } } PageData<PlatformJob> pageData = PageData.from(platformJobMapper.selectPage(page, queryWrapper)); pageData.getRecords().forEach(i->{ IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper); platformJobIPage.getRecords().forEach(i->{ i.dealTime(); this.getWmsJobData(i); }); return pageData; return PageData.from(platformJobIPage); // PageData<PlatformJob> pageData = PageData.from(platformJobMapper.selectPage(page, queryWrapper)); // pageData.getRecords().forEach(i->{ // i.dealTime(); // this.getWmsJobData(i); // }); // return pageData; } @@ -250,12 +269,60 @@ platformWmsJob.setPlatformWmsDetailList(platformWmsDetailList); platformJob.setPlatformWmsJob(platformWmsJob); } } } } public void queryWaitNum(PlatformJob platformJob){ if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ //查询前方排队数量 List<PlatformJob> lineUpNum = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey() ,Constants.PlatformJobStatus.IN_WAIT.getKey() ,Constants.PlatformJobStatus.TRANSFERING.getKey()) .gt(PlatformJob::getSignDate,platformJob.getSignDate()) .eq(PlatformJob::getPlatformGroupId,platformJob.getPlatformGroupId()) .like(PlatformJob::getArriveDate,DateUtil.getDate(platformJob.getArriveDate(),"yyyy-MM-dd"))); platformJob.setLineUpNum(lineUpNum.size()); BigDecimal sumWorkRate = platformJob.getTotalNum(); for (PlatformJob linePlatformJob:lineUpNum) { this.getWmsJobData(linePlatformJob); sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum()); } //计算预计等待时间 List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda().eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId())); BigDecimal workRate = platformList.stream().map(m->m.getWorkRate()).reduce(BigDecimal.ZERO,BigDecimal::add); if(sumWorkRate.compareTo(BigDecimal.ZERO) == Constants.ZERO|| workRate.compareTo(BigDecimal.ZERO) == Constants.ZERO ){ BigDecimal sumMinute = sumWorkRate.divide(workRate,1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L)); Integer sumMinuteInteger = sumMinute.intValue(); Integer hours = sumMinuteInteger/60; Integer minus = sumMinuteInteger%60; String waitTime = "预计等待:"; if(!Constants.equalsInteger(hours,Constants.ZERO)){ waitTime = waitTime + hours + "小时"; } if(!Constants.equalsInteger(hours,Constants.ZERO)){ waitTime = waitTime + minus + "分钟"; } platformJob.setWaitTime(waitTime); } }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ //查询最后开始任务的月台记录 日志表 因为存在异常挂起 转移 等问题 PlatformLog platformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() .eq(PlatformLog::getJobId,platformJob.getId()) .eq(PlatformLog::getObjType,Constants.PlatformJobStatus.WORKING.getKey()) .orderByDesc(PlatformLog::getCreateDate) .last(" limit 1") ); if(Objects.nonNull(platformLog)){ BigDecimal sumMinute = platformJob.getTotalNum().divide(platformJob.getWorkRate(),1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L)); platformJob.setFinishTimeStr(DateUtil.DateToStr(DateUtil.afterMinutesDate(platformLog.getCreateDate(),sumMinute.intValue()),"HH:mm")); } } } @Override public long count(PlatformJob platformJob) { QueryWrapper<PlatformJob> wrapper = new QueryWrapper<>(platformJob); @@ -264,17 +331,34 @@ //TODO @Override public DriverHomeVO getDriverHome(Integer memberId){ public DriverHomeVO getDriverHome(LoginUserInfo loginUserInfo){ DriverHomeVO driverHomeVO = new DriverHomeVO(); //TODO 轮播图 List<PlatformJob> platformJobList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>() .lambda() .eq(PlatformJob::getDriverId,memberId) // .like(PlatformJob::get) .orderByDesc(PlatformJob::getId)); List<PlatformJob> platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() .selectAll(PlatformJob.class) .selectAs(Platform::getName,PlatformJob::getPlatformName) .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile()) .like(PlatformJob::getArriveDate,DateUtil.getCurrDate()) .orderByDesc(PlatformJob::getId) ); for (PlatformJob platformJob:platformJobList) { //处理WSM数量 this.getWmsJobData(platformJob); //查询前方排队数量 this.queryWaitNum(platformJob); } driverHomeVO.setPlatformJobList(platformJobList); // 园区导览图 图片 driverHomeVO.setReservationMap(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_GUIDEMAP).getCode()); // 预约指南 文本 driverHomeVO.setBookingTips(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_BOOKING_TIPS).getCode()); return driverHomeVO; } @@ -369,18 +453,12 @@ } }else if( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey()) || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey()) ){//查询排队情况 Long lineUpNum = platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() .eq(PlatformJob::getIsdeleted,Constants.ZERO) .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey() ,Constants.PlatformJobStatus.IN_WAIT.getKey() ,Constants.PlatformJobStatus.TRANSFERING.getKey()) .gt(PlatformJob::getSignDate,platformJob.getSignDate()) .like(PlatformJob::getArriveDate,DateUtil.getDate(platformJob.getArriveDate(),"yyyy-MM-dd"))); platformJob.setLineUpNum(lineUpNum); ){ //查询前方排队数量 this.queryWaitNum(platformJob); }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ //作业月台信息 Platform platform = platformMapper.selectById(platformJob.getPlatformId()); Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId()); if(Objects.nonNull(platform)){ platformJob.setPlatformName(platform.getName()); } @@ -417,7 +495,7 @@ ); //获取所有月台组 List<Integer> platformIdList = platformJobList.stream().map(m->m.getPlatformGroupId()).collect(Collectors.toList()); List<Platform> platformList = platformMapper.selectList(new QueryWrapper<Platform>().lambda() List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda() .eq(Platform::getIsdeleted,Constants.ZERO) .in(Platform::getId,platformIdList)); @@ -841,8 +919,79 @@ } @Override public List<Platform> getPlatformList(Integer groupId, LoginUserInfo loginUserInfo){ //查询月台组下所有月台 List<Platform> allPlatformList = platformJoinMapper.selectJoinList(Platform.class, new MPJLambdaWrapper<Platform>() .selectAll(Platform.class) .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ") .eq(Platform::getIsdeleted, Constants.ZERO) .eq(Platform::getStatus,Constants.ZERO) .eq(Platform::getGroupId,groupId) ); this.getPlatformShow(allPlatformList,loginUserInfo); for (Platform platform:allPlatformList) { this.getJobByPlatform(platform,loginUserInfo); } return allPlatformList; } /** * 查询月台的开启情况 * @param allPlatformList * @param loginUserInfo */ public void getPlatformShow(List<Platform> allPlatformList , LoginUserInfo loginUserInfo){ //处理我的月台信息 是否配置隐藏 List<PlatformShowParam> platformShowParamList = platformShowParamMapper.selectList(new QueryWrapper<PlatformShowParam>() .lambda() .eq(PlatformShowParam::getIsdeleted, Constants.ZERO) .eq(PlatformShowParam::getMemberId,loginUserInfo.getMemberId()) ); //如果未配置该数据 则全部显示 if(CollectionUtils.isEmpty(platformShowParamList)){ for (Platform platform:allPlatformList) { platform.setShowConfig(true); } }else{ //根据配置显示数据 for (PlatformShowParam platformShowParam:platformShowParamList) { for (Platform platform:allPlatformList) { if(Constants.equalsInteger(platform.getId(),platformShowParam.getPlatformId())){ platform.setShowConfig(true); break; } } } } } /** * 获取月台下的任务列表 * @param platform * @param loginUserInfo */ public void getJobByPlatform(Platform platform,LoginUserInfo loginUserInfo){ List<PlatformJob> platformJobList = platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() .selectAll(PlatformJob.class) .selectAs(Platform::getName,PlatformJob::getPlatformName) .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) .eq(PlatformJob::getPlatformId,platform.getId()) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile()) .like(PlatformJob::getArriveDate, DateUtil.getCurrDate()) .orderByDesc(PlatformJob::getId) ); for (PlatformJob platformJob:platformJobList) { //处理WSM数量 this.getWmsJobData(platformJob); //查询前方排队数量 this.queryWaitNum(platformJob); } platform.setWorkJobList(platformJobList); } } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java
@@ -106,6 +106,7 @@ @Override public List<PlatformReason> findList(PlatformReason platformReason) { QueryWrapper<PlatformReason> wrapper = new QueryWrapper<>(platformReason); wrapper.eq("isdeleted",Constants.ZERO); return platformReasonMapper.selectList(wrapper); } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
@@ -139,4 +139,8 @@ QueryWrapper<VisitReason> wrapper = new QueryWrapper<>(visitReason); return visitReasonMapper.selectCount(wrapper); } }