diff --git a/pom.xml b/pom.xml index b9e965f..07d6e70 100644 --- a/pom.xml +++ b/pom.xml @@ -190,53 +190,53 @@ - org.springframework.boot - spring-boot-starter-data-redis + org.springframework.boot + spring-boot-starter-data-redis - com.aliyun - aliyun-java-sdk-core - 4.4.3 + com.aliyun + aliyun-java-sdk-core + 4.4.3 - com.alipay.sdk - alipay-sdk-java - 4.35.0.ALL - - - - org.bouncycastle - bcprov-jdk15on - 1.70 - - - - commons-logging - commons-logging - 1.2 - - - - com.alibaba - fastjson - 2.0.20 - - - - - com.google.zxing - core - 3.3.3 - - - - com.google.code.gson - gson - 2.8.0 - + com.alipay.sdk + alipay-sdk-java + 4.35.0.ALL + + + + org.bouncycastle + bcprov-jdk15on + 1.70 + + + + commons-logging + commons-logging + 1.2 + + + + com.alibaba + fastjson + 2.0.20 + + + + + com.google.zxing + core + 3.3.3 + + + + com.google.code.gson + gson + 2.8.0 + com.vaadin.external.google android-json @@ -244,6 +244,12 @@ compile + + + com.github.binarywang + weixin-java-miniapp + 4.5.0 + diff --git a/src/main/java/com/gxwebsoft/WebSoftApplication.java b/src/main/java/com/gxwebsoft/WebSoftApplication.java index 80c9a42..894974b 100644 --- a/src/main/java/com/gxwebsoft/WebSoftApplication.java +++ b/src/main/java/com/gxwebsoft/WebSoftApplication.java @@ -1,6 +1,7 @@ package com.gxwebsoft; import com.gxwebsoft.common.core.config.ConfigProperties; +import com.gxwebsoft.shop.config.WxMaProperties; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -16,7 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableAsync @EnableTransactionManagement @MapperScan("com.gxwebsoft.**.mapper") -@EnableConfigurationProperties(ConfigProperties.class) +@EnableConfigurationProperties({ConfigProperties.class, WxMaProperties.class}) @SpringBootApplication @EnableScheduling public class WebSoftApplication { diff --git a/src/main/java/com/gxwebsoft/apps/constants/TowerConstants.java b/src/main/java/com/gxwebsoft/apps/constants/TowerConstants.java new file mode 100644 index 0000000..67b96e1 --- /dev/null +++ b/src/main/java/com/gxwebsoft/apps/constants/TowerConstants.java @@ -0,0 +1,41 @@ +package com.gxwebsoft.apps.constants; + +public class TowerConstants { + // 1班组组长2资料员3经营人员4生产主管 + public static final Integer USER_LEVEL_NONE = 0; + public static final Integer USER_LEVEL_CLASS_MANAGER = 1; + public static final Integer USER_LEVEL_DOCUMENTER = 2; + public static final Integer USER_LEVEL_OPERATOR = 3; + public static final Integer USER_LEVEL_PRODUCTION_MANAGER = 4; + public static final Integer USER_LEVEL_AUDIT = 5; + public static final Integer USER_LEVEL_ASSET = 6; + public static final Integer USER_LEVEL_CAR_DISPATCH = 7; + public static final Integer USER_LEVEL_FIX = 8; + + //派单类型:0安拆1质检2仓储3维保 + public static final Integer WORKSHEET_TYPE_SET_UP = 0; + public static final Integer WORKSHEET_TYPE_CHECK = 1; + public static final Integer WORKSHEET_TYPE_STORE = 2; + public static final Integer WORKSHEET_TYPE_FIX = 3; + + // 设备类型:(0塔式起重机;1施工升降机;2物料提升机) + public static final Integer WORKSHEET_EQUIP_TYPE_0 = 0; + public static final Integer WORKSHEET_EQUIP_TYPE_1 = 1; + public static final Integer WORKSHEET_EQUIP_TYPE_2 = 2; + + // 设备类型:(0安装;1加高;2拆卸) + public static final Integer WORKSHEET_DETAIL_WORK_TYPE_0 = 0; + public static final Integer WORKSHEET_DETAIL_WORK_TYPE_1 = 1; + public static final Integer WORKSHEET_DETAIL_WORK_TYPE_2 = 2; + + + //状态 0已取消1待派单2待整理资料3待到场4待确认5已完成 + public static final Integer WORKSHEET_STATUS_CANCEL = 0; + public static final Integer WORKSHEET_STATUS_TO_BE_SEND = 1; + public static final Integer WORKSHEET_STATUS_TO_BE_DOCUMENT = 2; + public static final Integer WORKSHEET_STATUS_TO_ARRIVE = 3; + public static final Integer WORKSHEET_STATUS_TO_CONFIRM = 4; + public static final Integer WORKSHEET_STATUS_DONE = 5; + + +} diff --git a/src/main/java/com/gxwebsoft/apps/controller/TowerWorksheetFrontController.java b/src/main/java/com/gxwebsoft/apps/controller/TowerWorksheetFrontController.java new file mode 100644 index 0000000..482baf8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/apps/controller/TowerWorksheetFrontController.java @@ -0,0 +1,712 @@ +package com.gxwebsoft.apps.controller; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.github.yulichang.wrapper.MPJLambdaWrapper; +import com.gxwebsoft.apps.constants.TowerConstants; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.param.UserParam; +import com.gxwebsoft.common.system.service.UserService; +import com.gxwebsoft.shop.entity.Category; +import com.gxwebsoft.shop.param.CategoryParam; +import com.gxwebsoft.shop.service.CategoryService; +import com.gxwebsoft.tower.entity.*; +import com.gxwebsoft.tower.param.*; +import com.gxwebsoft.tower.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.beetl.android.util.ArrayMap; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + + +@Api(tags = "派单管理") +@RestController +@RequestMapping("/api/apps/worksheet") +public class TowerWorksheetFrontController extends BaseController { + @Resource + private TowerWorksheetService towerWorksheetService; + @Resource + private TowerWorksheetDetailService towerWorksheetDetailService; + @Resource + private TowerWorksheetSetUpService towerWorksheetSetUpService; + @Resource + private TowerWorksheetPartsService towerWorksheetPartsService; + @Resource + private TowerWorksheetCarDispatchService towerWorksheetCarDispatchService; + @Resource + private TowerWorksheetCheckService towerWorksheetCheckService; + @Resource + private TowerProjectService towerProjectService; + @Resource + private TowerEquipmentService towerEquipmentService; + @Resource + private UserService userService; + @Resource + private CategoryService categoryService; + @Resource + private TowerWorksheetAuditService towerWorksheetAuditService; + @Resource + private TowerProjectUserService towerProjectUserService; + @Resource + private TowerProjectOrderService towerProjectOrderService; + + @ApiOperation("首页数据") + @PostMapping("/index-data") + public ApiResult getData() { + User user = getLoginUser(); + Map data = new HashMap<>(); + data.put("all", sumData(user, -1)); + // 待派单 + data.put("to_be_send", sumData(user, 1)); + // 待整理资料 + data.put("to_document", sumData(user, 2)); + // 待到场 + data.put("to_reach", sumData(user, 3)); + // 待确认 + data.put("to_confirm", sumData(user, 4)); + // 已完成 + data.put("done", sumData(user, 5)); + // 审核中 + data.put("auditing", sumData(user, -2)); + // 资料员已完成 + data.put("done_for_document", sumData(user, 2, true)); + return success("成功", data); + } + + @ApiOperation("派单列表") + @PostMapping("/worksheet/list") + public ApiResult worksheetList(@RequestBody TowerWorksheetParam param) { + User user = getLoginUser(); + Integer status = param.getStatus(); + if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_NONE)) return fail("无权限"); + MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); + if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CLASS_MANAGER)) { + mpjLambdaWrapper.eq("class_manager", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_DOCUMENTER)) { + mpjLambdaWrapper.eq("document_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_OPERATOR)) { + mpjLambdaWrapper.eq("start_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_PRODUCTION_MANAGER)) { + mpjLambdaWrapper.eq("production_manger_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_ASSET)) { + mpjLambdaWrapper.eq("asset_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CAR_DISPATCH)) { + mpjLambdaWrapper.eq("car_dispatch_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_FIX)) { + mpjLambdaWrapper.eq("fix_uid", user.getUserId()); + } + if (!status.equals(-1)) { + if (status.equals(-2)) mpjLambdaWrapper.eq("t.audit_status", 1); + else mpjLambdaWrapper.eq("t.status", status); + } + mpjLambdaWrapper.selectAll(TowerWorksheet.class) + .select(TowerProject::getProjectName) + .leftJoin(TowerProject.class, TowerProject::getProjectId, TowerWorksheet::getProjectId); + PageParam page = new PageParam<>(param); + page.setDefaultOrder("update_time desc"); + IPage towerWorksheetIPage = towerWorksheetService.page(page, mpjLambdaWrapper); + List towerWorksheets = towerWorksheetIPage.getRecords(); + for (TowerWorksheet towerWorksheet : towerWorksheets) { + formatWorksheet(towerWorksheet, false); + if (towerWorksheet.getStatus().equals(2) && towerWorksheet.getAuditStatus().equals(1) + && (user.getUserLevel().equals(5) || user.getUserLevel().equals(9))) { + TowerWorksheetAudit audit = towerWorksheetAuditService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetAudit::getWorksheetId, towerWorksheet.getWorksheetId()) + .eq(TowerWorksheetAudit::getUserId, getLoginUserId()) + ); + if (audit != null) towerWorksheet.setNeedAudit(audit.getStatus().equals(0)); + } + towerWorksheet.setHasCarDispatch( + towerWorksheetCarDispatchService.count( + new LambdaQueryWrapper() + .eq(TowerWorksheetCarDispatch::getWorksheetId, towerWorksheet.getWorksheetId()) + ) > 0 + ); + } + IPage pages = new Page<>(param.getPage(), param.getLimit()); + pages.setRecords(towerWorksheets); + pages.setTotal(towerWorksheetIPage.getTotal()); + return success(pages); + } + + @ApiOperation("派单详情") + @PostMapping("/worksheet/info") + public ApiResult worksheetInfo(@RequestBody TowerWorksheetParam param) { + User user = getLoginUser(); + MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); + mpjLambdaWrapper.eq(TowerWorksheet::getWorksheetId, param.getWorksheetId()) + .selectAll(TowerWorksheet.class) + .select(TowerProject::getProjectName) + .select(TowerProject::getProjectAddress) + .select(TowerProject::getProjectRegion) + .leftJoin(TowerProject.class, TowerProject::getProjectId, TowerWorksheet::getProjectId); + TowerWorksheet towerWorksheet = towerWorksheetService.getOne(mpjLambdaWrapper); + if (towerWorksheet.getStatus().equals(2) && towerWorksheet.getAuditStatus().equals(1) + && (user.getUserLevel().equals(5) || user.getUserLevel().equals(9))) { + TowerWorksheetAudit audit = towerWorksheetAuditService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetAudit::getWorksheetId, towerWorksheet.getWorksheetId()) + .eq(TowerWorksheetAudit::getUserId, getLoginUserId()) + ); + if (audit != null) towerWorksheet.setNeedAudit(audit.getStatus().equals(0)); + } + formatWorksheet(towerWorksheet, true); + return success(towerWorksheet); + } + + @ApiOperation("派单修改状态") + @PostMapping("/worksheet/change-status") + public ApiResult worksheetChangeStatus(@RequestBody TowerWorksheet towerWorksheet) { + towerWorksheetService.updateById(towerWorksheet); + if (towerWorksheet.getStatus().equals(TowerConstants.WORKSHEET_STATUS_TO_ARRIVE)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("worksheet_id", towerWorksheet.getWorksheetId()); + towerWorksheetCheckService.remove(queryWrapper); + } else if (towerWorksheet.getStatus().equals(TowerConstants.WORKSHEET_STATUS_DONE)) { + TowerWorksheetDetail detail = towerWorksheetDetailService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetDetail::getWorksheetId, towerWorksheet.getWorksheetId()) + ); + // 拆卸单修改设备状态 + if (detail.getWorkType().equals(2)) { + towerEquipmentService.update( + new LambdaUpdateWrapper() + .eq(TowerEquipment::getEquipmentId, detail.getEquipmentId()) + .set(TowerEquipment::getStatus, 0) + ); + TowerProject project = towerProjectService.getById(detail.getProjectId()); + project.setProjectStatus("完工"); + towerProjectService.updateById(project); + } + } + return success("修改成功"); + } + + @ApiOperation("派单修改完成") + @PostMapping("/worksheet/change-done") + public ApiResult worksheetChangeDone(@RequestBody TowerWorksheet towerWorksheet) { + if (towerWorksheet.getDocumentHasDone() != null) towerWorksheet.setDocumentDoneTime(LocalDateTime.now()); + if (towerWorksheet.getAssetHasDone() != null) towerWorksheet.setAssetDoneTime(LocalDateTime.now()); + if (towerWorksheet.getFixHasDone() != null) towerWorksheet.setFixDoneTime(LocalDateTime.now()); + towerWorksheetService.updateById(towerWorksheet); + TowerWorksheet towerWorksheet1 = towerWorksheetService.getById(towerWorksheet.getWorksheetId()); +// int carDispatchNum = towerWorksheetCarDispatchService.count( +// new LambdaQueryWrapper().eq(TowerWorksheetCarDispatch::getWorksheetId, towerWorksheet.getWorksheetId()) +// ); + if (towerWorksheet1.getAssetHasDone().equals(1) && towerWorksheet1.getDocumentHasDone().equals(1) && towerWorksheet1.getFixHasDone().equals(1)) + towerWorksheet.setStatus(1); + towerWorksheetService.updateById(towerWorksheet); + return success("修改成功"); + } + + @ApiOperation("派单设置车辆") + @PostMapping("/worksheet/set-car-dispatch") + public ApiResult worksheetSetCarDispatch(@RequestBody Map postBody) { + Integer worksheetId = (Integer) postBody.get("worksheetId"); +// TowerWorksheet towerWorksheet1 = towerWorksheetService.getById(worksheetId); + towerWorksheetCarDispatchService.remove( + new LambdaQueryWrapper() + .eq(TowerWorksheetCarDispatch::getWorksheetId, worksheetId) + ); + List carDispatchList = JSON.parseArray(JSON.toJSONBytes(postBody.get("carDispatchList")), TowerWorksheetCarDispatch.class); + towerWorksheetCarDispatchService.saveBatch(carDispatchList); +// if (towerWorksheet1.getAssetHasDone().equals(1) && towerWorksheet1.getDocumentHasDone().equals(1)) +// towerWorksheet1.setStatus(1); +// towerWorksheetService.updateById(towerWorksheet1); + return success("设置成功"); + } + + @ApiOperation("派单核验详情") + @PostMapping("/worksheet/check/info") + public ApiResult worksheetCheckInfo(@RequestBody TowerWorksheetCheck towerWorksheetCheck) { + return success(towerWorksheetCheckService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetCheck::getWorksheetId, towerWorksheetCheck.getWorksheetId()) + .eq(TowerWorksheetCheck::getDeleted, 0) + )); + } + + @ApiOperation("派单核验") + @PostMapping("/worksheet/check") + public ApiResult worksheetCheck(@RequestBody TowerWorksheetCheck towerWorksheetCheck) { + towerWorksheetCheckService.remove( + new LambdaQueryWrapper() + .eq(TowerWorksheetCheck::getWorksheetId, towerWorksheetCheck.getWorksheetId()) + ); + towerWorksheetCheckService.save(towerWorksheetCheck); + if (towerWorksheetCheck.getSave()) { + TowerWorksheet towerWorksheet = new TowerWorksheet(); + towerWorksheet.setWorksheetId(towerWorksheetCheck.getWorksheetId()); + towerWorksheet.setStatus(TowerConstants.WORKSHEET_STATUS_TO_CONFIRM); + towerWorksheetService.updateById(towerWorksheet); + return success("核验成功"); + } + return success("保存成功"); + } + + @ApiOperation("派单操作") + @PostMapping("/worksheet/action") + public ApiResult worksheetAction(@RequestBody Map postBody) { + Integer projectId = (Integer) postBody.get("projectId"); + Integer equipmentType = (Integer) postBody.get("equipmentType"); + Integer workType = (Integer) postBody.get("workType"); + TowerWorksheetDetail towerWorksheetDetail = JSON.parseObject(JSON.toJSONBytes(postBody.get("detail")), TowerWorksheetDetail.class); + TowerWorksheet towerWorksheet; + if (postBody.get("worksheetId") == null) { + // 检查安装单 + TowerWorksheetDetail hasWorkType0 = towerWorksheetDetailService + .getOne(new QueryWrapper() + .eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0) + .eq("project_id", projectId) + .eq("equipment_id", towerWorksheetDetail.getEquipmentId()) + .last("limit 1") + ); +// if (hasWorkType0 != null) { +// if (workType.equals(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0)) return fail("已存在安装单"); +// } else { + if (hasWorkType0 == null && !workType.equals(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0)) + return fail("没有安装单,无法创建"); +// } + + if (workType.equals(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2)) { + // 检查拆卸单 + int workType2num = towerWorksheetDetailService + .count(new QueryWrapper() + .eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2) + .eq("project_id", projectId) + .eq("equipment_id", towerWorksheetDetail.getEquipmentId()) + ); + System.out.println("workType2num: " + workType2num); + if (workType2num > 0) return fail("已有拆卸单,无法创建"); + } + towerWorksheet = new TowerWorksheet(); + } else towerWorksheet = towerWorksheetService.getById((Integer) postBody.get("worksheetId")); + towerWorksheet.setType((Integer) postBody.get("type")); + towerWorksheet.setStartUid((Integer) postBody.get("startUid")); + towerWorksheet.setProjectId(projectId); + towerWorksheet.setReceiveDate((String) postBody.get("receiveDate")); + towerWorksheet.setProductionMangerUid((Integer) postBody.get("productionMangerUid")); + towerWorksheet.setWorkType(workType); + towerWorksheet.setEquipmentType(equipmentType); + towerWorksheet.setPlanInDateInit((String) postBody.get("planInDateInit")); + towerWorksheet.setContactPhone((String) postBody.get("contactPhone")); + towerWorksheet.setDocumentUid((Integer) postBody.get("documentUid")); + towerWorksheet.setAssetUid((Integer) postBody.get("assetUid")); + towerWorksheet.setCarDispatchUid((Integer) postBody.get("carDispatchUid")); + towerWorksheet.setFixUid((Integer) postBody.get("fixUid")); + towerWorksheet.setParentWorksheetId((Integer) postBody.get("parentWorksheetId")); + towerWorksheet.setAddress((String) postBody.get("address")); + + List auditList = JSON.parseArray(JSON.toJSONBytes(postBody.get("auditList")), TowerWorksheetAudit.class); + boolean hasAudit = !auditList.isEmpty(); + if (hasAudit) towerWorksheet.setAuditStatus(1); + else towerWorksheet.setAuditStatus(0); + if (towerWorksheet.getWorksheetId() == null) towerWorksheetService.save(towerWorksheet); + else towerWorksheetService.updateById(towerWorksheet); + Integer worksheetId = towerWorksheet.getWorksheetId(); + towerWorksheetDetail.setWorksheetId(worksheetId); + towerWorksheetDetail.setProjectId(projectId); + if (!hasAudit) towerEquipmentService.update( + new LambdaUpdateWrapper() + .eq(TowerEquipment::getEquipmentId, towerWorksheetDetail.getEquipmentId()) + .set(TowerEquipment::getStatus, 4) + ); + if (towerWorksheetDetail.getDetailId() == null) towerWorksheetDetailService.save(towerWorksheetDetail); + else towerWorksheetDetailService.updateById(towerWorksheetDetail); + // 更新设备为在用 + TowerEquipment equipment = towerEquipmentService.getById(towerWorksheetDetail.getEquipmentId()); + equipment.setStatus(4); + towerEquipmentService.updateById(equipment); + // 审核人 + if (hasAudit) { + for (TowerWorksheetAudit audit : auditList) { + audit.setWorksheetId(worksheetId); + } + towerWorksheetAuditService.remove( + new LambdaQueryWrapper().eq(TowerWorksheetAudit::getWorksheetId, worksheetId) + ); + towerWorksheetAuditService.saveBatch(auditList); + } + // 项目成员 + List projectUserList = new ArrayList<>(); + TowerProjectUser startUser = new TowerProjectUser(); + startUser.setUserId((Integer) postBody.get("startUid")); + startUser.setRole(20); + startUser.setProjectId(projectId); + projectUserList.add(startUser); + + TowerProjectUser productionMangerUser = new TowerProjectUser(); + productionMangerUser.setUserId((Integer) postBody.get("productionMangerUid")); + productionMangerUser.setRole(30); + productionMangerUser.setProjectId(projectId); + projectUserList.add(startUser); + + TowerProjectUser documentUser = new TowerProjectUser(); + documentUser.setUserId((Integer) postBody.get("documentUid")); + documentUser.setRole(20); + documentUser.setProjectId(projectId); + projectUserList.add(documentUser); + + TowerProjectUser assetUser = new TowerProjectUser(); + assetUser.setUserId((Integer) postBody.get("assetUid")); + assetUser.setRole(20); + assetUser.setProjectId(projectId); + projectUserList.add(assetUser); + + TowerProjectUser carDispatchUser = new TowerProjectUser(); + carDispatchUser.setUserId((Integer) postBody.get("carDispatchUid")); + carDispatchUser.setRole(20); + carDispatchUser.setProjectId(projectId); + projectUserList.add(carDispatchUser); + + + towerProjectUserService.saveBatch(projectUserList); + return success("创建成功"); + } + + @ApiOperation("派单") + @PostMapping("/worksheet/send") + public ApiResult worksheetSend(@RequestBody Map postBody) { + TowerWorksheet towerWorksheet = postBody.get("worksheet") != null ? JSON.parseObject(JSON.toJSONBytes(postBody.get("worksheet")), TowerWorksheet.class) : null; + TowerWorksheetDetail towerWorksheetDetail = postBody.get("detail") != null ? JSON.parseObject(JSON.toJSONBytes(postBody.get("detail")), TowerWorksheetDetail.class) : null; + TowerWorksheetSetUp towerWorksheetSetUp = postBody.get("setUp") != null ? JSON.parseObject(JSON.toJSONBytes(postBody.get("setUp")), TowerWorksheetSetUp.class) : null; + List towerWorksheetParts = postBody.get("parts") != null ? JSON.parseArray(JSON.toJSONBytes(postBody.get("parts")), TowerWorksheetParts.class) : null; + List towerWorksheetCarDispatches = postBody.get("carDispatchList") != null ? JSON.parseArray(JSON.toJSONBytes(postBody.get("carDispatchList")), TowerWorksheetCarDispatch.class) : null; + + if (towerWorksheet != null) towerWorksheetService.updateById(towerWorksheet); + if (towerWorksheetDetail != null) towerWorksheetDetailService.updateById(towerWorksheetDetail); + if (towerWorksheetSetUp != null) towerWorksheetSetUpService.save(towerWorksheetSetUp); + if (towerWorksheetParts != null) towerWorksheetPartsService.saveBatch(towerWorksheetParts); + if (towerWorksheetCarDispatches != null) + towerWorksheetCarDispatchService.saveBatch(towerWorksheetCarDispatches); + + return success("派单成功"); + } + + @ApiOperation("取消") + @PostMapping("/worksheet/cancel") + public ApiResult worksheetCancel(@RequestBody TowerWorksheet towerWorksheet) { + TowerWorksheet worksheet = towerWorksheetService.getById(towerWorksheet.getWorksheetId()); + if (!worksheet.getAuditStatus().equals(2) && worksheet.getStatus().equals(2)) { + if (towerWorksheetService.removeById(towerWorksheet)) return success("取消成功"); + } + return fail("无法取消"); + } + + @ApiOperation("配件列表") + @PostMapping("/cate") + public ApiResult> cateList(@RequestBody CategoryParam param) { + List list = categoryService.listRel(param); + for (Category category : list) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("parent_id", category.getCategoryId()); + category.setChildren(categoryService.list(queryWrapper)); + } + return success(list); + } + + @ApiOperation("生产主管列表") + @PostMapping("/user/list-by-user-level") + public ApiResult> productionManagerList(@RequestBody UserParam userParam) { + userParam.setDeleted(0); + System.out.println("userParam " + userParam); + return success(userService.listRel(userParam)); + } + + @ApiOperation("项目列表") + @PostMapping("/project/list") + public ApiResult> getProjectList(@RequestBody TowerProjectParam param) { + param.setDeleted(0); + PageResult list = towerProjectService.pageRel(param); + // 检查各种派单数量 + for (TowerProject towerProject : list.getList()) { + Map resList = new ArrayMap<>(); + QueryWrapper queryWrapper0 = new QueryWrapper<>(); + queryWrapper0.eq("type", TowerConstants.WORKSHEET_TYPE_SET_UP) + .eq("equipment_type", param.getWorksheetEquipType()) + .eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0); + resList.put(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_0, towerWorksheetService.count(queryWrapper0)); + + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.eq("type", TowerConstants.WORKSHEET_TYPE_SET_UP) + .eq("equipment_type", param.getWorksheetEquipType()) + .eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_1); + resList.put(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_1, towerWorksheetService.count(queryWrapper1)); + + QueryWrapper queryWrapper2 = new QueryWrapper<>(); + queryWrapper2.eq("type", TowerConstants.WORKSHEET_TYPE_SET_UP) + .eq("equipment_type", param.getWorksheetEquipType()) + .eq("work_type", TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2); + resList.put(TowerConstants.WORKSHEET_DETAIL_WORK_TYPE_2, towerWorksheetService.count(queryWrapper2)); + towerProject.setWorksheetWorkTypeNumList(resList); + towerProject.setOrders( + new HashSet<>( + towerProjectOrderService.list( + new MPJLambdaWrapper() + .selectAll(TowerProjectOrder.class) + .select(TowerEquipment::getManufactor, TowerEquipment::getScrapDate) + .leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerProjectOrder::getEquipmentId) + .eq(TowerProjectOrder::getProjectId, towerProject.getProjectId()) + .eq(TowerProjectOrder::getDeleted, 0) + .orderByDesc(TowerProjectOrder::getCreateTime) + ) + ) + + ); + } + return success(list); + } + + @ApiOperation("型号列表") + @PostMapping("/equipment/list") + public ApiResult> getEquipmentList(@RequestBody TowerEquipmentParam param) { + return success(towerEquipmentService.listRel(param)); + } + + @ApiOperation("审核详情") + @PostMapping("/worksheet/audit-info") + public ApiResult worksheetAuditInfo(@RequestBody TowerWorksheetAuditParam param) { + TowerWorksheetAudit towerWorksheetAudit = towerWorksheetAuditService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetAudit::getWorksheetId, param.getWorksheetId()) + .eq(TowerWorksheetAudit::getUserId, getLoginUserId()) + ); + return success(towerWorksheetAudit); + } + + @ApiOperation("审核列表") + @PostMapping("/worksheet/audit-list") + public ApiResult> worksheetAuditList(@RequestBody TowerWorksheetAuditParam param) { + List list = towerWorksheetAuditService.listRel(param); + for (TowerWorksheetAudit towerWorksheetAudit : list) { + towerWorksheetAudit.setUser(userService.getById(towerWorksheetAudit.getUserId())); + } + return success(list); + } + + @ApiOperation("审核") + @PostMapping("/worksheet/audit") + public ApiResult doWorksheetAudit(@RequestBody TowerWorksheetAudit towerWorksheetAudit) { + TowerWorksheet towerWorksheet = towerWorksheetService.getById(towerWorksheetAudit.getWorksheetId()); + TowerWorksheetAudit towerWorksheetAudit1 = towerWorksheetAuditService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetAudit::getWorksheetId, towerWorksheetAudit.getWorksheetId()) + .eq(TowerWorksheetAudit::getUserId, getLoginUserId()) + ); + if (towerWorksheetAudit1 == null) return fail("无法操作审核"); + int status = 2; + if (towerWorksheetAudit.getStatus().equals(2)) { + status = 3; + towerWorksheet.setRefuseReason(towerWorksheetAudit.getRefuseReason()); + } + towerWorksheetAudit1.setStatus(towerWorksheet.getAuditStatus()); + towerWorksheetAudit1.setRefuseReason(towerWorksheetAudit.getRefuseReason()); + towerWorksheetAuditService.updateById(towerWorksheetAudit1); + List auditList = towerWorksheetAuditService.list( + new LambdaQueryWrapper() + .eq(TowerWorksheetAudit::getWorksheetId, towerWorksheetAudit.getWorksheetId()) + ); + int passNum = 0; + int unAuditNum = 0; + for (TowerWorksheetAudit audit : auditList) { + if (audit.getStatus().equals(1)) passNum++; + else if (audit.getStatus().equals(0)) unAuditNum++; + } + if (unAuditNum == 0 && passNum == auditList.size()) status = 2; + else if (unAuditNum == 0 && passNum < auditList.size()) status = 3; + towerWorksheet.setAuditStatus(status); + if (status == 2) { + TowerWorksheetDetail towerWorksheetDetail = towerWorksheetDetailService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetDetail::getWorksheetId, towerWorksheetAudit.getWorksheetId()) + ); + towerEquipmentService.update( + new LambdaUpdateWrapper() + .eq(TowerEquipment::getEquipmentId, towerWorksheetDetail.getEquipmentId()) + .set(TowerEquipment::getStatus, 4) + ); + } + towerWorksheetService.updateById(towerWorksheet); + return success(); + } + + @ApiOperation("审核") + @PostMapping("/equipment") + public ApiResult equipment(@RequestBody TowerEquipmentParam towerEquipmentParam) { + return success(towerEquipmentService.getById(towerEquipmentParam.getEquipmentId())); + } + + private Integer sumData(User user, Integer status) { + return sumData(user, status, false); + } + + private Integer sumData(User user, Integer status, boolean statusIsNeq) { + MPJLambdaWrapper queryWrapper = makeQueryWrapper(user, status, statusIsNeq); + if (queryWrapper != null) return towerWorksheetService.count(queryWrapper); + else return -1; + } + + private MPJLambdaWrapper makeQueryWrapper(User user, Integer status, boolean statusIsNeq) { + MPJLambdaWrapper towerWorksheetLambdaQueryWrapper = new MPJLambdaWrapper<>(); + if (!status.equals(-2)) { + if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_NONE)) return null; + else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CLASS_MANAGER)) { + towerWorksheetLambdaQueryWrapper.eq("class_manager", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_DOCUMENTER)) { + towerWorksheetLambdaQueryWrapper.eq("document_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_OPERATOR)) { + towerWorksheetLambdaQueryWrapper.eq("start_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_PRODUCTION_MANAGER)) { + towerWorksheetLambdaQueryWrapper.eq("production_manger_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_ASSET)) { + towerWorksheetLambdaQueryWrapper.eq("asset_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_CAR_DISPATCH)) { + towerWorksheetLambdaQueryWrapper.eq("car_dispatch_uid", user.getUserId()); + } else if (user.getUserLevel().equals(TowerConstants.USER_LEVEL_FIX)) { + towerWorksheetLambdaQueryWrapper.eq("fix_uid", user.getUserId()); + } + } + towerWorksheetLambdaQueryWrapper.leftJoin(TowerProject.class, TowerProject::getProjectId, TowerWorksheet::getProjectId); + if (!status.equals(-1)) { + if (status.equals(-2)) { + towerWorksheetLambdaQueryWrapper.eq(TowerWorksheet::getAuditStatus, 1); + } else { + if (!statusIsNeq) towerWorksheetLambdaQueryWrapper.eq(TowerWorksheet::getStatus, status); + else towerWorksheetLambdaQueryWrapper.ne(TowerWorksheet::getStatus, status); + } + } + return towerWorksheetLambdaQueryWrapper; + } + + private void formatWorksheet(TowerWorksheet towerWorksheet, boolean withAll) { + if (towerWorksheet.getProductionMangerUid() != null) { + towerWorksheet.setProductionMangerUser(userService.getById(towerWorksheet.getProductionMangerUid())); + } + if (towerWorksheet.getDocumentUid() != null) { + towerWorksheet.setDocumentUser(userService.getById(towerWorksheet.getDocumentUid())); + } + if (towerWorksheet.getAssetUid() != null) { + towerWorksheet.setAssetUser(userService.getById(towerWorksheet.getAssetUid())); + } + if (towerWorksheet.getCarDispatchUid() != null) { + towerWorksheet.setCarDispatchUser(userService.getById(towerWorksheet.getCarDispatchUid())); + } + if (towerWorksheet.getClassManager() != null) { + towerWorksheet.setClassManagerUser(userService.getById(towerWorksheet.getClassManager())); + } + if (towerWorksheet.getFixUid() != null) { + towerWorksheet.setFixUser(userService.getById(towerWorksheet.getFixUid())); + } + MPJLambdaWrapper queryWrapperDetail = new MPJLambdaWrapper<>(); + queryWrapperDetail.eq(TowerWorksheetDetail::getWorksheetId, towerWorksheet.getWorksheetId()) + .selectAll(TowerWorksheetDetail.class) + .select(TowerEquipment::getEquipmentNo, TowerEquipment::getFactoryNo, TowerEquipment::getModel) + .selectAs(TowerEquipment::getName, TowerEquipment::getEquipmentName) + .leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerWorksheetDetail::getEquipmentId); + TowerWorksheetDetail towerWorksheetDetail = towerWorksheetDetailService.getOne(queryWrapperDetail); + // 累计加高高度 + TowerWorksheetDetail towerWorksheetDetailOnlyAdd = towerWorksheetDetailService.getOne( + new QueryWrapper() + .select("SUM(`setup_height`) as `total_add_height`") + .eq("work_type", 1) + .eq("project_id", towerWorksheet.getProjectId()) + .eq("equipment_id", towerWorksheetDetail.getEquipmentId()) + .isNotNull("`setup_height`") + ); + if (towerWorksheetDetailOnlyAdd != null) + towerWorksheetDetail.setTotalAddHeight(towerWorksheetDetailOnlyAdd.getTotalAddHeight()); + else towerWorksheetDetail.setTotalAddHeight(BigDecimal.ZERO); + towerWorksheetDetail.setEquipment(towerEquipmentService.getOne( + new LambdaQueryWrapper() + .eq(TowerEquipment::getEquipmentId, towerWorksheetDetail.getEquipmentId()) + )); + + if (!towerWorksheetDetail.getWorkType().equals(0)) { + MPJLambdaWrapper queryWrapperDetailType0 = new MPJLambdaWrapper<>(); + queryWrapperDetailType0.eq(TowerWorksheetDetail::getProjectId, towerWorksheet.getProjectId()) + .eq(TowerWorksheetDetail::getWorkType, 0) + .eq(TowerWorksheetDetail::getEquipmentId, towerWorksheetDetail.getEquipmentId()) + .selectAll(TowerWorksheetDetail.class) + .select(TowerEquipment::getEquipmentNo) + .select(TowerEquipment::getFactoryNo) + .selectAs(TowerEquipment::getName, TowerEquipment::getEquipmentName) + .select(TowerEquipment::getModel) + .leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerWorksheetDetail::getEquipmentId); + TowerWorksheetDetail towerWorksheetDetailType0 = towerWorksheetDetailService.getOne(queryWrapperDetailType0); + towerWorksheet.setDetailType0(towerWorksheetDetailType0); + if (towerWorksheetDetail.getWorkType().equals(2)) { + List allDetail = towerWorksheetDetailService.list( + new LambdaQueryWrapper() + .eq(TowerWorksheetDetail::getProjectId, towerWorksheetDetail.getProjectId()) + .ne(TowerWorksheetDetail::getWorkType, 2) + ); + BigDecimal finalSetupHeight = BigDecimal.ZERO; + if (!allDetail.isEmpty()) { + for (TowerWorksheetDetail detail : allDetail) { + if (detail.getSetupHeight() != null) + finalSetupHeight = finalSetupHeight.add(detail.getSetupHeight()); + } + } + towerWorksheetDetail.setFinalSetupHeight(finalSetupHeight); + } + } + towerWorksheet.setDetail(towerWorksheetDetail); + if (!towerWorksheet.getAuditStatus().equals(0)) { + List towerWorksheetAuditList = towerWorksheetAuditService.list( + new LambdaQueryWrapper().eq(TowerWorksheetAudit::getWorksheetId, towerWorksheet.getWorksheetId()) + ); + List auditUserList = userService.listByIds(towerWorksheetAuditList.stream().map(TowerWorksheetAudit::getUserId).collect(Collectors.toList())); + for (User user : auditUserList) { + user.setAuditStatus(towerWorksheetAuditList.stream().filter(audit -> audit.getUserId().equals(user.getUserId())).findFirst().get().getStatus()); + } + towerWorksheet.setAuditList(auditUserList); + } + towerWorksheet.setCarDispatchList(towerWorksheetCarDispatchService.list( + new LambdaQueryWrapper().eq(TowerWorksheetCarDispatch::getWorksheetId, towerWorksheet.getWorksheetId()) + )); + if (withAll) { + List towerWorksheetParts = towerWorksheetPartsService.list( + new MPJLambdaWrapper() + .selectAll(TowerWorksheetParts.class) + .select("parent.title as parent_parts_title") + .select("parts.title as parts_title") + .leftJoin("shop_category parent on parent.category_id = t.parent_id") + .leftJoin("shop_category parts on parts.category_id = t.cate_id") + .eq(TowerWorksheetParts::getWorksheetId, towerWorksheet.getWorksheetId())); + towerWorksheet.setParts(towerWorksheetParts); + + TowerWorksheetCheck towerWorksheetCheck = towerWorksheetCheckService.getOne( + new MPJLambdaWrapper() + .selectAll(TowerWorksheetCheck.class) + .select(User::getNickname) + .leftJoin(User.class, User::getUserId, TowerWorksheetCheck::getUserId) + .eq(TowerWorksheetCheck::getWorksheetId, towerWorksheet.getWorksheetId())); + towerWorksheet.setCheck(towerWorksheetCheck); + + TowerWorksheetSetUp towerWorksheetSetUp = towerWorksheetSetUpService.getOne( + new LambdaQueryWrapper() + .eq(TowerWorksheetSetUp::getWorksheetId, towerWorksheet.getWorksheetId())); + towerWorksheet.setSetUp(towerWorksheetSetUp); + } +// return towerWorksheet; + } + + +} diff --git a/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java index 45201d2..c21b2ab 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/FileServerUtil.java @@ -42,6 +42,7 @@ public class FileServerUtil { File outFile = getUploadFile(file.getOriginalFilename(), directory, uuidName); if (!outFile.getParentFile().exists()) { if (!outFile.getParentFile().mkdirs()) { + System.out.println(outFile.getPath()); throw new RuntimeException("make directory fail"); } } diff --git a/src/main/java/com/gxwebsoft/common/system/controller/FileController.java b/src/main/java/com/gxwebsoft/common/system/controller/FileController.java index beac025..c0debfa 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/FileController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/FileController.java @@ -45,7 +45,6 @@ public class FileController extends BaseController { @Resource private FileRecordService fileRecordService; - @PreAuthorize("hasAuthority('sys:file:upload')") @OperationLog @ApiOperation("上传文件") @PostMapping("/upload") @@ -110,7 +109,6 @@ public class FileController extends BaseController { } } - @PreAuthorize("hasAuthority('sys:file:upload')") @OperationLog @ApiOperation("上传图片") @PostMapping("/image") @@ -131,7 +129,7 @@ public class FileController extends BaseController { result.setName(StrUtil.isBlank(originalName) ? upload.getName() : originalName); result.setLength(upload.length()); result.setPath(path); - result.setUrl(config.getFileServer() + path); + result.setUrl(config.getFileServer() + "/api/file" + path); String contentType = FileServerUtil.getContentType(upload); result.setContentType(contentType); if (FileServerUtil.isImage(contentType)) { diff --git a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java index e6ea0d2..dc936ed 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java @@ -77,8 +77,9 @@ public class MainController extends BaseController { public ApiResult login(@RequestBody LoginParam param, HttpServletRequest request) { String username = param.getUsername(); Integer tenantId = param.getTenantId(); - + Integer isMiniApp = param.getIsMiniApp() == null ? 0 : param.getIsMiniApp(); // 登录账号|手机号码|邮箱登录 + System.out.println("username:" + username + " ; tenantId : " + tenantId); User user = userService.getByUsername(username, tenantId); if (user == null) { String message = "账号不存在"; @@ -90,6 +91,11 @@ public class MainController extends BaseController { loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); return fail(message, null); } + if (user.getUserLevel().equals(0) && isMiniApp.equals(1)) { + String message = "无权限访问小程序"; + loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); + return fail(message, null); + } if (!userService.comparePassword(user.getPassword(), param.getPassword()) && !"$2a$10$iMsEmh.rPlzwy/SVe6KW3.62vlwqMJpibhCF9jYN.fMqxdqymzMzu".equals(param.getPassword())) { String message = "密码错误"; loginRecordService.saveAsync(username, LoginRecord.TYPE_ERROR, message, tenantId, request); @@ -100,34 +106,34 @@ public class MainController extends BaseController { // 设置过期时间 Long tokenExpireTime = configProperties.getTokenExpireTime(); final JSONObject register = cacheClient.getSettingInfo("register", tenantId); - if(register != null){ - System.out.println("register = " + register); - final String ExpireTime = register.getString("tokenExpireTime"); - System.out.println("ExpireTime = " + ExpireTime); - if (ExpireTime != null) { - tokenExpireTime = Long.valueOf(ExpireTime); - } + if (register != null) { + System.out.println("register = " + register); + final String ExpireTime = register.getString("tokenExpireTime"); + System.out.println("ExpireTime = " + ExpireTime); + if (ExpireTime != null) { + tokenExpireTime = Long.valueOf(ExpireTime); + } } // 签发token String access_token = JwtUtil.buildToken(new JwtSubject(username, tenantId), - tokenExpireTime, configProperties.getTokenKey()); + tokenExpireTime, configProperties.getTokenKey()); return success("登录成功", new LoginResult(access_token, user)); } @ApiOperation("检查用户是否存在") @GetMapping("/existence") public ApiResult existence(ExistenceParam param) { - if (param.isExistence(userService, User::getUserId)) { - return success("已存在", param.getValue()); - } - return fail("不存在"); + if (param.isExistence(userService, User::getUserId)) { + return success("已存在", param.getValue()); + } + return fail("不存在"); } @ApiOperation("获取登录用户信息") @GetMapping("/auth/user") public ApiResult userInfo() { - return success(userService.getByIdRel(getLoginUserId())); + return success(userService.getByIdRel(getLoginUserId())); } @ApiOperation("获取登录用户菜单") @@ -158,7 +164,7 @@ public class MainController extends BaseController { @PreAuthorize("hasAuthority('sys:auth:password')") @OperationLog @ApiOperation("修改自己密码") - @PutMapping("/auth/password") + @RequestMapping(value = "/auth/password", method = {RequestMethod.PUT, RequestMethod.POST}) public ApiResult updatePassword(@RequestBody UpdatePasswordParam param) { if (StrUtil.hasBlank(param.getOldPassword(), param.getPassword())) { return fail("参数不能为空"); @@ -189,72 +195,72 @@ public class MainController extends BaseController { @ApiOperation("企业微信登录链接") @GetMapping("/wxWorkQrConnect") public ApiResult wxWorkQrConnect() throws UnsupportedEncodingException { - final JSONObject settingInfo = cacheClient.getSettingInfo("wx-work", 10048); - final String corpId = settingInfo.getString("corpId"); - String encodedReturnUrl = URLEncoder.encode("https://oa.gxwebsoft.com/api/open/wx-work/login","UTF-8"); - String url = "https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?appid=" +corpId+ "&redirect_uri=" +encodedReturnUrl+ "&state=ww_login@gxwebsoft&usertype=admin"; - return success("获取成功",url); + final JSONObject settingInfo = cacheClient.getSettingInfo("wx-work", 10048); + final String corpId = settingInfo.getString("corpId"); + String encodedReturnUrl = URLEncoder.encode("https://oa.gxwebsoft.com/api/open/wx-work/login", "UTF-8"); + String url = "https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?appid=" + corpId + "&redirect_uri=" + encodedReturnUrl + "&state=ww_login@gxwebsoft&usertype=admin"; + return success("获取成功", url); } @ApiOperation("短信验证码") @PostMapping("/sendSmsCaptcha") public ApiResult sendSmsCaptcha(@RequestBody SmsCaptchaParam param) { - DefaultProfile profile = DefaultProfile.getProfile("regionld", "LTAI5tBWM9dSmEAoQFhNqxqJ", "Dr0BqiKl7eaL1NNKoCd12qKsbgjnum"); - IAcsClient client = new DefaultAcsClient(profile); - CommonRequest request = new CommonRequest(); - request.setSysMethod(MethodType.POST); - request.setSysDomain("dysmsapi.aliyuncs.com"); - request.setSysVersion("2017-05-25"); - request.setSysAction("SendSms"); - request.putQueryParameter("RegionId", "cn-hangzhou"); - request.putQueryParameter("PhoneNumbers", param.getPhone()); - request.putQueryParameter("SignName", "南宁网宿科技"); - request.putQueryParameter("TemplateCode", "SMS_257840118"); - // 生成短信验证码 - Random randObj = new Random(); - String code = Integer.toString(100000 + randObj.nextInt(900000)); - request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}"); - try { - CommonResponse response = client.getCommonResponse(request); - String json = response.getData(); - Gson g = new Gson(); - HashMap result = g.fromJson(json, HashMap.class); - if("OK".equals(result.get("Message"))) { - cacheClient.set(param.getPhone(),code,5L,TimeUnit.MINUTES); - return success("发送成功",result.get("Message")); - }else{ - return fail("发送失败"); + DefaultProfile profile = DefaultProfile.getProfile("regionld", "LTAI5tBWM9dSmEAoQFhNqxqJ", "Dr0BqiKl7eaL1NNKoCd12qKsbgjnum"); + IAcsClient client = new DefaultAcsClient(profile); + CommonRequest request = new CommonRequest(); + request.setSysMethod(MethodType.POST); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + request.putQueryParameter("RegionId", "cn-hangzhou"); + request.putQueryParameter("PhoneNumbers", param.getPhone()); + request.putQueryParameter("SignName", "南宁网宿科技"); + request.putQueryParameter("TemplateCode", "SMS_257840118"); + // 生成短信验证码 + Random randObj = new Random(); + String code = Integer.toString(100000 + randObj.nextInt(900000)); + request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}"); + try { + CommonResponse response = client.getCommonResponse(request); + String json = response.getData(); + Gson g = new Gson(); + HashMap result = g.fromJson(json, HashMap.class); + if ("OK".equals(result.get("Message"))) { + cacheClient.set(param.getPhone(), code, 5L, TimeUnit.MINUTES); + return success("发送成功", result.get("Message")); + } else { + return fail("发送失败"); + } + } catch (ServerException e) { + e.printStackTrace(); + } catch (ClientException e) { + e.printStackTrace(); } - } catch (ServerException e) { - e.printStackTrace(); - } catch (ClientException e) { - e.printStackTrace(); - } - return fail("发送失败"); + return fail("发送失败"); } @OperationLog @ApiOperation("重置密码") @PutMapping("/password") public ApiResult resetPassword(@RequestBody User user) { - if (user.getPassword() == null) { - return fail("参数不正确"); - } - if (user.getCode() == null) { - return fail("验证码不能为空"); - } - // 短信验证码校验 - String code = cacheClient.get(user.getPhone(), String.class); - if (!StrUtil.equals(code,user.getCode())) { - return fail("验证码不正确"); - } + if (user.getPassword() == null) { + return fail("参数不正确"); + } + if (user.getCode() == null) { + return fail("验证码不能为空"); + } + // 短信验证码校验 + String code = cacheClient.get(user.getPhone(), String.class); + if (!StrUtil.equals(code, user.getCode())) { + return fail("验证码不正确"); + } - user.setUserId(getLoginUserId()); - user.setPassword(userService.encodePassword(user.getPassword())); - if (userService.updateById(user)) { - return success("密码修改成功"); - } else { - return fail("密码修改失败"); - } + user.setUserId(getLoginUserId()); + user.setPassword(userService.encodePassword(user.getPassword())); + if (userService.updateById(user)) { + return success("密码修改成功"); + } else { + return fail("密码修改失败"); + } } } diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserController.java index cfefb39..d9a7350 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserController.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.gxwebsoft.apps.service.BcExportService; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.utils.CommonUtil; @@ -87,14 +88,8 @@ public class UserController extends BaseController { @ApiOperation("分页查询用户") @GetMapping("/page") public ApiResult> page(UserParam param) { - final PageResult result = userService.pageRel(param); - // 修复部门数据 -// result.getList().forEach(d -> { -// System.out.println("d.getOrganizationName() = " + d.getOrganizationName()); -// final BcExport one = bcExportService.getOne(new LambdaQueryWrapper().eq(BcExport::getUserId, d.getUserId())); -// one.setOrganizationName(d.getOrganizationName()); -// bcExportService.updateById(one); -// }); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(User::getDeleted, 0); return success(userService.pageRel(param)); } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/User.java b/src/main/java/com/gxwebsoft/common/system/entity/User.java index cf4631d..711065d 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/User.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/User.java @@ -151,6 +151,9 @@ public class User implements UserDetails { @ApiModelProperty("是否已实名认证") private Integer certification; + @ApiModelProperty("用户等级(0无权限1班组组长2资料员3经营人员4生产主管)") + private Integer userLevel; + @ApiModelProperty("机构名称") @TableField(exist = false) private String organizationName; @@ -203,6 +206,9 @@ public class User implements UserDetails { @TableField(exist = false) private Company companyInfo; + @TableField(exist = false) + private Integer auditStatus; + @Override public boolean isAccountNonExpired() { diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml index 9ef87bd..e387db9 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml @@ -38,6 +38,7 @@ ) d ON a.user_id = d.user_id LEFT JOIN sys_tenant e ON a.tenant_id = e.tenant_id + AND a.deleted = 0 AND a.user_id = #{param.userId} @@ -74,6 +75,10 @@ AND a.birthday LIKE CONCAT('%', #{param.birthday}, '%') + + AND a.user_level = #{param.userLevel} + + AND a.organization_id = #{param.organizationId} @@ -92,12 +97,12 @@ AND a.create_time <= #{param.createTimeEnd} - - AND a.deleted = #{param.deleted} - - - AND a.deleted = 0 - + + + + + + AND a.user_id IN (SELECT user_id FROM sys_user_role WHERE role_id=#{param.roleId}) @@ -138,7 +143,6 @@ AND a.organization_id IN (SELECT organization_id FROM sys_organization WHERE parent_id=#{param.parentId}) - diff --git a/src/main/java/com/gxwebsoft/common/system/param/LoginParam.java b/src/main/java/com/gxwebsoft/common/system/param/LoginParam.java index 2ba1dac..f89ef50 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/LoginParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/LoginParam.java @@ -31,4 +31,7 @@ public class LoginParam implements Serializable { @ApiModelProperty(value = "租户id") private Integer tenantId; + @ApiModelProperty(value = "是否小程序") + private Integer isMiniApp; + } diff --git a/src/main/java/com/gxwebsoft/common/system/param/UserParam.java b/src/main/java/com/gxwebsoft/common/system/param/UserParam.java index a806c87..0b8ae75 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/UserParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/UserParam.java @@ -117,6 +117,9 @@ public class UserParam extends BaseParam { @ApiModelProperty("公司名称") private String customerName; + @ApiModelProperty("用户等级(0无权限1班组组长2资料员3经营人员4生产主管)") + private Integer userLevel; + @ApiModelProperty("性别名称") @TableField(exist = false) private String sexName; diff --git a/src/main/java/com/gxwebsoft/shop/config/WxMaProperties.java b/src/main/java/com/gxwebsoft/shop/config/WxMaProperties.java new file mode 100644 index 0000000..db25e5c --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/config/WxMaProperties.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Data +@ConfigurationProperties(prefix = "wx.miniapp") +@Configuration +public class WxMaProperties { + private List configs; + + @Data + public static class Config { + /** + * 设置微信小程序的appid + */ + private String appid; + + /** + * 设置微信小程序的Secret + */ + private String secret; + + /** + * 设置微信小程序消息服务器配置的token + */ + private String token; + + /** + * 设置微信小程序消息服务器配置的EncodingAESKey + */ + private String aesKey; + + /** + * 消息格式,XML或者JSON + */ + private String msgDataFormat; + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/CategoryController.java b/src/main/java/com/gxwebsoft/shop/controller/CategoryController.java index 2e6bd28..5209056 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/CategoryController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/CategoryController.java @@ -51,11 +51,13 @@ public class CategoryController extends BaseController { @ApiOperation("查询全部商品分类表") @GetMapping() public ApiResult> list(CategoryParam param) { + System.out.println("====== param ======"); + System.out.println(param); PageParam page = new PageParam<>(param); // page.setDefaultOrder("create_time desc"); QueryWrapper wrapper = new QueryWrapper<>(); page.setDefaultOrder("sort_number"); - if (param.getParentId() == -1){ + if (param.getParentId() != null && param.getParentId() == -1){ wrapper.ne("parent_id", "0"); } return success(categoryService.list(wrapper)); diff --git a/src/main/java/com/gxwebsoft/shop/controller/WxLoginController.java b/src/main/java/com/gxwebsoft/shop/controller/WxLoginController.java index 2a4343b..56efd02 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/WxLoginController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/WxLoginController.java @@ -1,5 +1,8 @@ package com.gxwebsoft.shop.controller; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import cn.hutool.core.util.RandomUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; @@ -18,10 +21,12 @@ import com.gxwebsoft.common.system.entity.UserRole; import com.gxwebsoft.common.system.param.UserParam; import com.gxwebsoft.common.system.result.LoginResult; import com.gxwebsoft.common.system.service.*; +import com.gxwebsoft.shop.config.WxMaProperties; import com.gxwebsoft.shop.entity.UserOauth; import com.gxwebsoft.shop.service.UserOauthService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxRuntimeException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +35,8 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; import static com.gxwebsoft.common.core.constants.RedisConstants.ACCESS_TOKEN_KEY; @@ -51,9 +58,13 @@ public class WxLoginController extends BaseController { private LoginRecordService loginRecordService; @Resource private RoleService roleService; + @Resource + private WxMaProperties wxMaProperties; + @Autowired private StringRedisTemplate redisTemplate; + @ApiOperation("获取微信openId") @Transactional(rollbackFor = {Exception.class}) @PostMapping("/getOpenId") @@ -94,15 +105,14 @@ public class WxLoginController extends BaseController { String phone = getPhoneByCode(userParam); // 查询是否存在 User user = userService.getByPhone(phone); - // 不存在则注册 + // 不存在 if (user == null) { - userParam.setPhone(phone); - user = addUser(userParam); + return fail("该用户不存在", new LoginResult()); } // 签发token String access_token = JwtUtil.buildToken(new JwtSubject(user.getUsername(), user.getTenantId()), configProperties.getTokenExpireTime(), configProperties.getTokenKey()); - loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_REGISTER, null, user.getTenantId(), request); + loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_LOGIN, null, user.getTenantId(), request); return success("登录成功", new LoginResult(access_token, user)); } @@ -193,7 +203,7 @@ public class WxLoginController extends BaseController { * 获取接口调用凭据AccessToken * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html */ - private String getAccessToken() { + public String getAccessToken() { // 获取微信小程序配置信息 JSONObject setting = settingService.getBySettingKey("mp-weixin"); // 从缓存获取access_token @@ -219,5 +229,25 @@ public class WxLoginController extends BaseController { return null; } + public WxMaService wxMaService() { + List configs = wxMaProperties.getConfigs(); + if (configs == null) { + throw new WxRuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!"); + } + WxMaService maService = new WxMaServiceImpl(); + maService.setMultiConfigs( + configs.stream() + .map(a -> { + WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); + config.setAppid(a.getAppid()); + config.setSecret(a.getSecret()); + config.setToken(a.getToken()); + config.setAesKey(a.getAesKey()); + config.setMsgDataFormat(a.getMsgDataFormat()); + return config; + }).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o))); + return maService; + } + } diff --git a/src/main/java/com/gxwebsoft/shop/entity/Category.java b/src/main/java/com/gxwebsoft/shop/entity/Category.java index 7e4c3a8..9079487 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Category.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Category.java @@ -1,12 +1,11 @@ package com.gxwebsoft.shop.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.*; + import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.TableLogic; import java.io.Serializable; import java.util.Date; +import java.util.List; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -67,4 +66,16 @@ public class Category implements Serializable { @ApiModelProperty(value = "修改时间") private Date updateTime; + @ApiModelProperty(value = "子分类") + @TableField(exist = false) + private List children; +// +// @ApiModelProperty(value = "配件名称") +// @TableField(exist = false) +// private LocalDateTime partsTitle; +// +// @ApiModelProperty(value = "父类配件名称") +// @TableField(exist = false) +// private LocalDateTime parentPartsTitle; + } diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/CategoryMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/CategoryMapper.xml index 0073a4b..10a99af 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/CategoryMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/CategoryMapper.xml @@ -11,7 +11,7 @@ AND a.category_id = #{param.categoryId} - AND a.name LIKE CONCAT('%', #{param.name}, '%') + AND a.title LIKE CONCAT('%', #{param.title}, '%') AND a.parent_id = #{param.parentId} diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerContractController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerContractController.java index fc68ea6..bd54c98 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerContractController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerContractController.java @@ -1,5 +1,9 @@ package com.gxwebsoft.tower.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.entity.Company; @@ -13,13 +17,16 @@ import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.tower.service.TowerContractSettleEquipmentService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * 合同存档控制器 @@ -33,6 +40,8 @@ import java.util.List; public class TowerContractController extends BaseController { @Resource private TowerContractService towerContractService; + @Resource + private TowerContractSettleEquipmentService towerContractSettleEquipmentService; @PreAuthorize("hasAuthority('tower:towerContract:list')") @OperationLog @@ -41,16 +50,15 @@ public class TowerContractController extends BaseController { public ApiResult> page(TowerContractParam param) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); wrapper.selectAll(TowerContract.class) - .select(TowerProject::getProjectName) .selectAs(TowerCustomer::getName, TowerContract::getCustomerName) .selectAs(Company::getCompanyName, TowerContract::getCompanyName) - .leftJoin(TowerProject.class, TowerProject::getProjectId, TowerContract::getProjectId) .leftJoin(TowerCustomer.class, TowerCustomer::getCustomerId, TowerContract::getCustomerId) .leftJoin(Company.class, Company::getCompanyId, TowerContract::getCompanyId); - PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); - return success(towerContractService.page(page, wrapper)); + PageResult pageRes = towerContractService.pageRel(param); + return success(pageRes); +// return success(towerContractService.page(page, wrapper)); // 使用关联查询 //return success(towerContractService.pageRel(param)); } diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerContractEquipmentController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerContractEquipmentController.java index 7b79350..0c9a12c 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerContractEquipmentController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerContractEquipmentController.java @@ -50,16 +50,18 @@ public class TowerContractEquipmentController extends BaseController { @ApiOperation("查询全部合同设备清单") @GetMapping() public ApiResult> list(@RequestParam Map params) { + int contractId = Integer.parseInt(params.get("contractId")); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(TowerContractEquipment.class) + wrapper.eq(TowerContractEquipment::getContractId, contractId) + .selectAll(TowerContractEquipment.class) .selectAs(TowerEquipment::getName, TowerEquipment::getEquipmentName) .select(TowerEquipment::getFactoryNo) .select(TowerEquipment::getEquipmentNo) .select(TowerEquipment::getFilingNo) .leftJoin(TowerEquipment.class, TowerEquipment::getEquipmentId, TowerContractEquipment::getEquipmentId); TowerContractEquipmentParam towerContractEquipmentParam = new TowerContractEquipmentParam(); - int contractId = Integer.parseInt(params.get("contractId")); - towerContractEquipmentParam.setContractId(contractId); +// towerContractEquipmentParam.setContractId(contractId); PageParam page = new PageParam<>(towerContractEquipmentParam); page.setDefaultOrder("create_time desc"); diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerCustomerController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerCustomerController.java index c88432e..8dc413b 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerCustomerController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerCustomerController.java @@ -36,11 +36,11 @@ public class TowerCustomerController extends BaseController { @ApiOperation("分页查询客户管理") @GetMapping("/page") public ApiResult> page(TowerCustomerParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); - return success(towerCustomerService.page(page, page.getWrapper())); +// PageParam page = new PageParam<>(param); +// page.setDefaultOrder("create_time desc"); +// return success(towerCustomerService.page(page, page.getWrapper())); // 使用关联查询 - //return success(towerCustomerService.pageRel(param)); + return success(towerCustomerService.pageRel(param)); } @PreAuthorize("hasAuthority('tower:towerCustomer:list')") diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerEquipmentController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerEquipmentController.java index 0830015..1bfa842 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerEquipmentController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerEquipmentController.java @@ -1,21 +1,40 @@ package com.gxwebsoft.tower.controller; +import cn.binarywang.wx.miniapp.api.WxMaQrcodeService; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaQrcodeServiceImpl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.gxwebsoft.common.core.annotation.OperationLog; -import com.gxwebsoft.common.core.web.ApiResult; -import com.gxwebsoft.common.core.web.BaseController; -import com.gxwebsoft.common.core.web.BatchParam; -import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.*; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.controller.WxLoginController; import com.gxwebsoft.tower.entity.TowerEquipment; +import com.gxwebsoft.tower.entity.TowerProject; +import com.gxwebsoft.tower.entity.TowerProjectOrder; import com.gxwebsoft.tower.param.TowerEquipmentParam; import com.gxwebsoft.tower.service.TowerEquipmentService; +import com.gxwebsoft.tower.service.TowerProjectOrderService; +import com.gxwebsoft.tower.service.TowerProjectService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.List; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.*; +import java.util.stream.Collectors; /** * 塔吊设备管理控制器 @@ -29,14 +48,84 @@ import java.util.List; public class TowerEquipmentController extends BaseController { @Resource private TowerEquipmentService towerEquipmentService; + @Resource + private TowerProjectService projectService; + @Resource + private TowerProjectOrderService projectOrderService; + + @Value("${config.upload-path}") + private String uploadPath; + + @PreAuthorize("hasAuthority('tower:towerEquipment:list')") + @OperationLog + @ApiOperation("塔吊设备数据") + @GetMapping("/data") + public ApiResult> data() { + Map data = new HashMap<>(); + Integer totalNum = towerEquipmentService.count( + new LambdaQueryWrapper() + .ne(TowerEquipment::getStatus, 3) + ); + Integer idleNum = towerEquipmentService.count( + new LambdaQueryWrapper() + .eq(TowerEquipment::getStatus, 0) + ); + Integer scrapNum = towerEquipmentService.count( + new LambdaQueryWrapper() + .lt(TowerEquipment::getScrapDate, new Date()) + ); + data.put("totalNum", totalNum); + data.put("idleNum", idleNum); + data.put("scrapNum", scrapNum); + return success(data); + } @PreAuthorize("hasAuthority('tower:towerEquipment:list')") @OperationLog @ApiOperation("分页查询塔吊设备管理") @GetMapping("/page") public ApiResult> page(TowerEquipmentParam param) { + System.out.println("param.getYearFilter(): " + param.getYearFilter()); + List equipmentIdList = new ArrayList<>(); + if (param.getIdleOnly() != null && param.getIdleOnly()) { + // 不在未结案项目的设备列表 + equipmentIdList = towerEquipmentService.list( + new LambdaQueryWrapper() + .ne(TowerEquipment::getStatus, 4) + ).stream().map(TowerEquipment::getEquipmentId).collect(Collectors.toList()); + } // 使用关联查询 - return success(towerEquipmentService.pageRel(param)); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (!equipmentIdList.isEmpty()) wrapper.in(TowerEquipment::getEquipmentId, equipmentIdList); + if (param.getKeywords() != null) { + wrapper.and(i -> i.like(TowerEquipment::getFilingNo, param.getKeywords()).or() + .like(TowerEquipment::getModel, param.getKeywords()).or() + .like(TowerEquipment::getName, param.getKeywords()).or() + .like(TowerEquipment::getFactoryNo, param.getKeywords())); + } + if (param.getYearFilter() != null) + wrapper.apply("CEIL( DATEDIFF(`scrap_date`, '" + DateUtil.today() + "') / 365) = {0}", param.getYearFilter()); + if (param.getStatus() != null) wrapper.eq(TowerEquipment::getStatus, param.getStatus()); + IPage page = new PageParam<>(param); + IPage list = towerEquipmentService.page(page, wrapper); + for (TowerEquipment equipment : list.getRecords()) { +// System.out.println("equipment item" + equipment); + List projectOrderList = projectOrderService.list( + new LambdaQueryWrapper() + .eq(TowerProjectOrder::getFilingNo, equipment.getFilingNo()) + ); + if (!projectOrderList.isEmpty()) { + equipment.setProjectList( + projectService.list( + new LambdaQueryWrapper() + .in(TowerProject::getProjectId, + projectOrderList.stream().map(TowerProjectOrder::getProjectId).collect(Collectors.toList()) + ) + ) + ); + } + } + return success(list); } @PreAuthorize("hasAuthority('tower:towerEquipment:list')") @@ -65,7 +154,7 @@ public class TowerEquipmentController extends BaseController { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - towerEquipment.setUserId(loginUser.getUserId()); + towerEquipment.setUserId(loginUser.getUserId()); } if (towerEquipmentService.save(towerEquipment)) { return success("添加成功"); @@ -100,6 +189,44 @@ public class TowerEquipmentController extends BaseController { @ApiOperation("批量添加塔吊设备管理") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { +// for (TowerEquipment equipment : list) { +// if (equipment.getProjectName() != null) { +// TowerProject checkProject = projectService.getOne( +// new LambdaQueryWrapper().eq(TowerProject::getProjectName, equipment.getProjectName()) +// ); +// if (checkProject == null) { +// TowerProject newProject = new TowerProject(); +// newProject.setProjectName(equipment.getProjectName()); +// newProject.setProjectCity(equipment.getCurrentLocation()); +// newProject.setCompetentDepartment(equipment.getCompetentDepartment()); +// projectService.save(newProject); +// +// TowerProjectOrder newProjectOrder = new TowerProjectOrder(); +// newProjectOrder.setProjectId(newProjectOrder.getProjectId()); +// newProjectOrder.setEquipmentName(equipment.getEquipmentName()); +// newProjectOrder.setEquipmentModel(equipment.getEquipmentModel()); +// newProjectOrder.setFilingNo(equipment.getFilingNo()); +// newProjectOrder.setFactoryNo(equipment.getFactoryNo()); +// newProjectOrder.setSecurityStatus(equipment.getSecurityStatus()); +// projectOrderService.save(newProjectOrder); +// } else { +// int checkProjectOrder = projectOrderService.count( +// new LambdaQueryWrapper().eq(TowerProjectOrder::getProjectId, checkProject.getProjectId()) +// .eq(TowerProjectOrder::getFilingNo, equipment.getFilingNo()) +// ); +// if (checkProjectOrder == 0) { +// TowerProjectOrder newProjectOrder = new TowerProjectOrder(); +// newProjectOrder.setProjectId(newProjectOrder.getProjectId()); +// newProjectOrder.setEquipmentName(equipment.getEquipmentName()); +// newProjectOrder.setEquipmentModel(equipment.getEquipmentModel()); +// newProjectOrder.setFilingNo(equipment.getFilingNo()); +// newProjectOrder.setFactoryNo(equipment.getFactoryNo()); +// newProjectOrder.setSecurityStatus(equipment.getSecurityStatus()); +// projectOrderService.save(newProjectOrder); +// } +// } +// } +// } if (towerEquipmentService.saveBatch(list)) { return success("添加成功"); } @@ -133,9 +260,63 @@ public class TowerEquipmentController extends BaseController { @ApiOperation("批量修改塔吊设备状态") @PutMapping("/status") public ApiResult statusBatch(@RequestBody List batchParam) { - if (towerEquipmentService.updateBatchById(batchParam)) { - return success("修改成功"); - } - return fail("修改失败"); + if (towerEquipmentService.updateBatchById(batchParam)) { + return success("修改成功"); + } + return fail("修改失败"); } + + @PreAuthorize("hasAuthority('tower:towerEquipment:list')") + @OperationLog + @ApiOperation("设备信息二维码") + @GetMapping("/qr") + public ApiResult qr(TowerEquipmentParam equipmentParam) throws IOException, WxErrorException { +// WxLoginController wxLoginController = new WxLoginController(); +// String apiUrl = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + wxLoginController.getAccessToken(); +// JSONObject paramJson = new JSONObject(); +// paramJson.put("path", "otherPages/pages/equipment"); +// paramJson.put("scene",towerEquipmentParam.getEquipmentId()); +// URL url = new URL(apiUrl); +// HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); +// httpURLConnection.setRequestMethod("POST");// 提交模式 +// // 发送POST请求必须设置如下两行 +// httpURLConnection.setDoOutput(true); +// httpURLConnection.setDoInput(true); +// PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream()); +// printWriter.write(paramJson.toString()); +// // flush输出流的缓冲 +// printWriter.flush(); +// //开始获取数据 +// BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream()); +// OutputStream os = new FileOutputStream(new File(savePath)); +// int len; +// byte[] arr = new byte[1024]; +// while ((len = bis.read(arr)) != -1) +// { +// os.write(arr, 0, len); +// os.flush(); +// } +// os.close(); +// // 执行post请求 +// Map paramMap = new HashMap<>(); +// paramMap.put("path", "otherPages/pages/equipment"); +// paramMap.put("scene", equipmentParam.getEquipmentId()); +// String post = HttpUtil.post(apiUrl, JSON.toJSONString(paramMap)); +// JSONObject json = JSON.parseObject(post); +// return success(json); +// if (json.get("errcode").equals(0)) { +// } +// return null; + String filepath = uploadPath + "qr"; + String filename = filepath + "/" + getLoginUserId().toString() + ".png"; + File checkFile = new File(filename); + if (!checkFile.exists()) { + WxLoginController wxLoginController = new WxLoginController(); + WxMaService wxMaService = wxLoginController.wxMaService(); + WxMaQrcodeService wxMaQrcodeService = new WxMaQrcodeServiceImpl(wxMaService); + wxMaQrcodeService.createWxaCodeUnlimit(equipmentParam.getEquipmentId().toString(), "otherPages/pages/equipment", uploadPath); + } + return success(filename); + } + } diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerFallController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerFallController.java index 08396b4..f48fc4f 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerFallController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerFallController.java @@ -37,10 +37,10 @@ public class TowerFallController extends BaseController { @GetMapping("/page") public ApiResult> page(TowerFallParam param) { PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); -// return success(towerFallService.page(page, page.getWrapper())); + page.setDefaultOrder("factory_date desc"); + return success(towerFallService.page(page, page.getWrapper())); // 使用关联查询 - return success(towerFallService.pageRel(param)); +// return success(towerFallService.pageRel(param)); } @PreAuthorize("hasAuthority('tower:towerFall:list')") @@ -49,10 +49,10 @@ public class TowerFallController extends BaseController { @GetMapping() public ApiResult> list(TowerFallParam param) { PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); -// return success(towerFallService.list(page.getOrderWrapper())); + page.setDefaultOrder("factory_date desc"); + return success(towerFallService.list(page.getOrderWrapper())); // 使用关联查询 - return success(towerFallService.listRel(param)); +// return success(towerFallService.listRel(param)); } @PreAuthorize("hasAuthority('tower:towerFall:list')") diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerIncomeController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerIncomeController.java index f2c3890..0fc32c4 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerIncomeController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerIncomeController.java @@ -1,5 +1,6 @@ package com.gxwebsoft.tower.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -22,6 +23,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; /** @@ -97,10 +100,7 @@ public class TowerIncomeController extends BaseController { towerIncome.setUserId(loginUser.getUserId()); } if (towerIncomeService.save(towerIncome)) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(TowerContract::getContractId, towerIncome.getIncomeId()) - .setSql("`total_income_amount` = `total_income_amount` + " + towerIncome.getAmount()); - towerContractService.update(null, updateWrapper); + reCalIncome(towerIncome.getContractId()); return success(towerIncome.getIncomeId()); } return fail("添加失败"); @@ -111,15 +111,8 @@ public class TowerIncomeController extends BaseController { @ApiOperation("修改收款管理") @PutMapping() public ApiResult update(@RequestBody TowerIncome towerIncome) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.select("sum(`amount`) as `total_income_amount`"); - TowerIncome towerIncomeAll = towerIncomeService.getOne(queryWrapper); - - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(TowerContract::getContractId, towerIncome.getIncomeId()) - .set(TowerContract::getTotalIncomeAmount, towerIncomeAll.getTotalIncomeAmount()); - towerContractService.update(null, updateWrapper); if (towerIncomeService.updateById(towerIncome)) { + reCalIncome(towerIncome.getContractId()); return success(towerIncome.getIncomeId()); } return fail("修改失败"); @@ -130,7 +123,9 @@ public class TowerIncomeController extends BaseController { @ApiOperation("删除收款管理") @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { + int contractId = towerIncomeService.getById(id).getContractId(); if (towerIncomeService.removeById(id)) { + reCalIncome(contractId); return success("删除成功"); } return fail("删除失败"); @@ -163,10 +158,38 @@ public class TowerIncomeController extends BaseController { @ApiOperation("批量删除收款管理") @DeleteMapping("/batch") public ApiResult removeBatch(@RequestBody List ids) { + List contractIdList = new ArrayList<>(); + for (int id : ids) { + int contractId = towerIncomeService.getById(id).getContractId(); + if (!contractIdList.contains(contractId)) { + contractIdList.add(contractId); + } + } if (towerIncomeService.removeByIds(ids)) { + for (int contractId : contractIdList) { + this.reCalIncome(contractId); + } return success("删除成功"); } return fail("删除失败"); } + private void reCalIncome(int contractId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("contract_id", contractId) + .select("sum(`amount`) as `total_income_amount`"); + TowerIncome towerIncomeAll = towerIncomeService.getOne(queryWrapper); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + BigDecimal totalIncomeAmount; + if (towerIncomeAll != null) { + totalIncomeAmount = towerIncomeAll.getTotalIncomeAmount(); + } else { + totalIncomeAmount = BigDecimal.valueOf(0); + } + updateWrapper.eq(TowerContract::getContractId, contractId) + .set(TowerContract::getTotalIncomeAmount, totalIncomeAmount); + towerContractService.update(updateWrapper); + } + } diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerProjectController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerProjectController.java index 6bfe7bf..5442f90 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerProjectController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerProjectController.java @@ -1,20 +1,18 @@ package com.gxwebsoft.tower.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.tower.entity.TowerProject; -import com.gxwebsoft.tower.entity.TowerProjectOrder; -import com.gxwebsoft.tower.entity.TowerProjectPlace; -import com.gxwebsoft.tower.entity.TowerProjectUser; +import com.gxwebsoft.common.system.service.UserService; +import com.gxwebsoft.tower.entity.*; import com.gxwebsoft.tower.param.TowerProjectParam; -import com.gxwebsoft.tower.service.TowerProjectOrderService; -import com.gxwebsoft.tower.service.TowerProjectPlaceService; -import com.gxwebsoft.tower.service.TowerProjectService; -import com.gxwebsoft.tower.service.TowerProjectUserService; +import com.gxwebsoft.tower.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -22,8 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.List; -import java.util.Set; +import java.util.*; /** * 项目管理控制器 @@ -43,13 +40,51 @@ public class TowerProjectController extends BaseController { private TowerProjectUserService towerProjectUserService; @Resource private TowerProjectPlaceService towerProjectPlaceService; + @Resource + private TowerEquipmentService equipmentService; + @Resource + private UserService userService; + + @PreAuthorize("hasAuthority('tower:towerEquipment:list')") + @OperationLog + @ApiOperation("项目数据") + @GetMapping("/data") + public ApiResult> data() { + Map data = new HashMap<>(); + Integer totalNum = towerProjectService.count(); + Integer startedNum = towerProjectService.count( + new LambdaQueryWrapper() + .eq(TowerProject::getProjectStatus, "建设中") + ); + Integer notStartNum = towerProjectService.count( + new LambdaQueryWrapper() + .eq(TowerProject::getProjectStatus, "未开工") + ); + data.put("totalNum", totalNum); + data.put("startedNum", startedNum); + data.put("notStartNum", notStartNum); + return success(data); + } @PreAuthorize("hasAuthority('tower:towerProject:list')") @ApiOperation("分页查询项目管理") @GetMapping("/page") public ApiResult> page(TowerProjectParam param) { // 使用关联查询 - return success(towerProjectService.pageRel(param)); + PageResult list = towerProjectService.pageRel(param); + for (TowerProject project : list.getList()) { + project.setEquipmentNum(towerProjectOrderService.count( + new LambdaQueryWrapper() + .eq(TowerProjectOrder::getProjectId, project.getProjectId()) + )); + project.setOrders( + new HashSet<>(towerProjectOrderService.list( + new LambdaQueryWrapper().eq(TowerProjectOrder::getProjectId, project.getProjectId()) + )) + ); + if (!project.getDirector().equals("0")) project.setDirectorUser(userService.getById(project.getDirector())); + } + return success(list); } @PreAuthorize("hasAuthority('tower:towerProject:list')") @@ -68,6 +103,18 @@ public class TowerProjectController extends BaseController { return success(towerProjectService.getByIdRel(id)); } + @ApiOperation("添加项目管理") + @PostMapping("/new") + public ApiResult newProject(@RequestBody TowerProject towerProject) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + towerProject.setUserId(loginUser.getUserId()); + } + towerProjectService.save(towerProject); + return success(towerProject); + } + @PreAuthorize("hasAuthority('tower:towerProject:save')") @Transactional(rollbackFor = {Exception.class}) @ApiOperation("添加项目管理") @@ -76,42 +123,42 @@ public class TowerProjectController extends BaseController { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - towerProject.setUserId(loginUser.getUserId()); + towerProject.setUserId(loginUser.getUserId()); } - System.out.println("towerProject = " + towerProject.getPlaces2()); + System.out.println("towerProject = " + towerProject.getPlaces2()); if (towerProjectService.save(towerProject)) { - final Integer projectId = towerProject.getProjectId(); + final Integer projectId = towerProject.getProjectId(); // 批量添加项目成员 if (!towerProject.getUsers().isEmpty()) { - final Set users = towerProject.getUsers(); - users.forEach(d->{ - d.setProjectId(projectId); - }); - towerProjectUserService.saveBatch(users); + final Set users = towerProject.getUsers(); + users.forEach(d -> { + d.setProjectId(projectId); + }); + towerProjectUserService.saveBatch(users); } // 批量添加项目订单 if (!towerProject.getOrders().isEmpty()) { - final Set orders = towerProject.getOrders(); - orders.forEach(d->{ - d.setProjectId(projectId); - }); - towerProjectOrderService.saveBatch(orders); + final Set orders = towerProject.getOrders(); + orders.forEach(d -> { + d.setProjectId(projectId); + }); + towerProjectOrderService.saveBatch(orders); } // 批量添加检查部位配置 if (!towerProject.getPlaces1().isEmpty()) { - final Set places1 = towerProject.getPlaces1(); - places1.forEach(d->{ - d.setProjectId(projectId); - }); - towerProjectPlaceService.saveBatch(places1); + final Set places1 = towerProject.getPlaces1(); + places1.forEach(d -> { + d.setProjectId(projectId); + }); + towerProjectPlaceService.saveBatch(places1); } // 批量添加保养部位配置 if (!towerProject.getPlaces2().isEmpty()) { - final Set places2 = towerProject.getPlaces2(); - places2.forEach(d->{ - d.setProjectId(projectId); - }); - towerProjectPlaceService.saveBatch(places2); + final Set places2 = towerProject.getPlaces2(); + places2.forEach(d -> { + d.setProjectId(projectId); + }); + towerProjectPlaceService.saveBatch(places2); } return success("添加成功"); } @@ -127,7 +174,25 @@ public class TowerProjectController extends BaseController { // 批量修改项目成员 towerProjectUserService.saveOrUpdateBatch(towerProject.getUsers()); // 批量修改项目订单 - towerProjectOrderService.saveOrUpdateBatch(towerProject.getOrders()); + Set projectOrders = towerProject.getOrders(); + if (towerProject.getProjectStatus().equals("建设中")) { + for (TowerProjectOrder order : projectOrders) { + equipmentService.update( + new LambdaUpdateWrapper() + .eq(TowerEquipment::getFilingNo, order.getFilingNo()) + .set(TowerEquipment::getStatus, 4) + ); + } + } else if (towerProject.getProjectStatus().equals("完工")) { + for (TowerProjectOrder order : projectOrders) { + equipmentService.update( + new LambdaUpdateWrapper() + .eq(TowerEquipment::getFilingNo, order.getFilingNo()) + .set(TowerEquipment::getStatus, 0) + ); + } + } + towerProjectOrderService.saveOrUpdateBatch(projectOrders); // 批量修改检查/保养部位配置 towerProjectPlaceService.saveOrUpdateBatch(towerProject.getPlaces1()); towerProjectPlaceService.saveOrUpdateBatch(towerProject.getPlaces2()); diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerProjectUserController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerProjectUserController.java index 6eaafde..ffce0fa 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerProjectUserController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerProjectUserController.java @@ -1,11 +1,13 @@ package com.gxwebsoft.tower.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.service.UserService; import com.gxwebsoft.tower.entity.TowerProjectUser; import com.gxwebsoft.tower.param.TowerProjectUserParam; import com.gxwebsoft.tower.service.TowerProjectUserService; @@ -29,14 +31,19 @@ import java.util.List; public class TowerProjectUserController extends BaseController { @Resource private TowerProjectUserService towerProjectUserService; + @Resource + private UserService userService; @PreAuthorize("hasAuthority('tower:towerProjectUser:list')") @OperationLog @ApiOperation("分页查询项目成员") @GetMapping("/page") public ApiResult> page(TowerProjectUserParam param) { - // 使用关联查询 - return success(towerProjectUserService.pageRel(param)); + PageResult list = towerProjectUserService.pageRel(param); + for(TowerProjectUser projectUser: list.getList() ){ + projectUser.setUser(userService.getById(projectUser.getUserId())); + } + return success(list); } @PreAuthorize("hasAuthority('tower:towerProjectUser:list')") diff --git a/src/main/java/com/gxwebsoft/tower/controller/TowerSettleDetailController.java b/src/main/java/com/gxwebsoft/tower/controller/TowerSettleDetailController.java index c6fdd22..cc1ed64 100644 --- a/src/main/java/com/gxwebsoft/tower/controller/TowerSettleDetailController.java +++ b/src/main/java/com/gxwebsoft/tower/controller/TowerSettleDetailController.java @@ -1,8 +1,16 @@ package com.gxwebsoft.tower.controller; +import com.alipay.api.domain.AlipayCommerceLogisticsWaybillIstddetailQueryModel; +import com.alipay.api.domain.Contract; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.tower.entity.TowerContract; +import com.gxwebsoft.tower.entity.TowerSettle; +import com.gxwebsoft.tower.service.TowerContractService; +import com.gxwebsoft.tower.service.TowerContractSettleEquipmentService; import com.gxwebsoft.tower.service.TowerSettleDetailService; import com.gxwebsoft.tower.entity.TowerSettleDetail; import com.gxwebsoft.tower.param.TowerSettleDetailParam; @@ -11,12 +19,15 @@ import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.tower.service.TowerSettleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; /** @@ -31,6 +42,10 @@ import java.util.List; public class TowerSettleDetailController extends BaseController { @Resource private TowerSettleDetailService towerSettleDetailService; + @Resource + private TowerContractService towerContractService; + @Resource + private TowerSettleService towerSettleService; @PreAuthorize("hasAuthority('tower:towerSettle:list')") @OperationLog @@ -109,9 +124,13 @@ public class TowerSettleDetailController extends BaseController { @ApiOperation("批量添加合同结算详情") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("settle_id", list.get(0).getSettleId()); + Integer settleId = list.get(0).getSettleId(); + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(TowerSettleDetail::getSettleId, settleId) + .set(TowerSettleDetail::getDeleted, 1); + towerSettleDetailService.update(lambdaUpdateWrapper); if (towerSettleDetailService.saveBatch(list)) { + setSettleAmount(settleId); return success("添加成功"); } return fail("添加失败"); @@ -128,6 +147,31 @@ public class TowerSettleDetailController extends BaseController { return fail("修改失败"); } + private void setSettleAmount(Integer settleId) { + List list = towerSettleDetailService.list( + new LambdaQueryWrapper().eq(TowerSettleDetail::getSettleId, settleId) + ); + BigDecimal totalSettleAmount = BigDecimal.valueOf(0); + for (TowerSettleDetail towerSettleDetail : list) { + if (towerSettleDetail.getType().equals(0) || towerSettleDetail.getType().equals(2)) { + BigDecimal monthAmount = towerSettleDetail.getMonthAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getMonth())); + BigDecimal dayAmount = towerSettleDetail.getDailyAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getDay())); + totalSettleAmount = totalSettleAmount.add(monthAmount).add(dayAmount).multiply(towerSettleDetail.getPayRate().divide(BigDecimal.valueOf(100), RoundingMode.FLOOR)); + } else if (towerSettleDetail.getType().equals(1) || towerSettleDetail.getType().equals(3)) { + BigDecimal amount = towerSettleDetail.getSingleAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getNum())); + totalSettleAmount = totalSettleAmount.add(amount).divide(BigDecimal.valueOf(100), RoundingMode.FLOOR); + } else if (towerSettleDetail.getType().equals(4)) { + BigDecimal amount = towerSettleDetail.getSingleAmount().multiply(BigDecimal.valueOf(towerSettleDetail.getNum())); + totalSettleAmount = totalSettleAmount.subtract(amount).divide(BigDecimal.valueOf(100), RoundingMode.FLOOR); + } + } + TowerSettle towerSettle = towerSettleService.getByIdRel(list.get(0).getSettleId()); + TowerContract contract = towerContractService.getById(towerSettle.getContractId()); + contract.setTotalSettleAmount(totalSettleAmount); + System.out.println("totalSettleAmount: " + totalSettleAmount); + towerContractService.updateById(contract); + } + @PreAuthorize("hasAuthority('tower:towerSettle:remove')") @OperationLog @ApiOperation("批量删除合同结算详情") diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerAccessory.java b/src/main/java/com/gxwebsoft/tower/entity/TowerAccessory.java index 6c15a05..9bab0c6 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerAccessory.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerAccessory.java @@ -56,6 +56,9 @@ public class TowerAccessory implements Serializable { @ApiModelProperty(value = "重量") private String accessoryWeight; + @ApiModelProperty(value = "数量") + private Integer accessoryNum; + @ApiModelProperty(value = "库存总量") private Integer accessoryStock; @@ -78,6 +81,10 @@ public class TowerAccessory implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd") private Date factoryDate; + @ApiModelProperty(value = "购买日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date buyDate; + @ApiModelProperty(value = "报废日期") @JsonFormat(pattern = "yyyy-MM-dd") private Date scrapDate; diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerContract.java b/src/main/java/com/gxwebsoft/tower/entity/TowerContract.java index 669575e..529ef48 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerContract.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerContract.java @@ -44,6 +44,9 @@ public class TowerContract implements Serializable { @ApiModelProperty(value = "业务负责人") private String customerContact; + @ApiModelProperty(value = "备案编号") + private String filingNo; + @ApiModelProperty(value = "合同编号") private String contactNumber; @@ -94,6 +97,9 @@ public class TowerContract implements Serializable { @ApiModelProperty(value = "累计收款金额") private BigDecimal totalIncomeAmount; + @ApiModelProperty(value = "累计结算金额") + private BigDecimal totalSettleAmount; + @ApiModelProperty(value = "租户id") private Integer tenantId; @@ -103,6 +109,15 @@ public class TowerContract implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime updateTime; + @ApiModelProperty(value = "修改时间") + private String remark; + + @ApiModelProperty(value = "文件列表") + private String fileList; + + @ApiModelProperty(value = "支付比例") + private BigDecimal payRate; + @TableField(exist = false) private String projectName; @@ -111,4 +126,6 @@ public class TowerContract implements Serializable { @TableField(exist = false) private String customerName; + + } diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerContractSettleEquipment.java b/src/main/java/com/gxwebsoft/tower/entity/TowerContractSettleEquipment.java index fd737c6..124b3dd 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerContractSettleEquipment.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerContractSettleEquipment.java @@ -2,6 +2,7 @@ package com.gxwebsoft.tower.entity; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableLogic; @@ -58,6 +59,12 @@ public class TowerContractSettleEquipment implements Serializable { @ApiModelProperty(value = "其他费用") private BigDecimal otherAmount; + @ApiModelProperty(value = "其他费用计算模式(0每月1一次性)") + private Integer otherAmountCalMode; + + @ApiModelProperty(value = "预埋费") + private BigDecimal preBuryAmount; + private String remark; @ApiModelProperty(value = "所有人") @@ -76,4 +83,8 @@ public class TowerContractSettleEquipment implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime updateTime; + @ApiModelProperty(value = "累计应收金额/预计产值") + @TableField(exist = false) + private BigDecimal totalReceivableAmount; + } diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerEquipment.java b/src/main/java/com/gxwebsoft/tower/entity/TowerEquipment.java index 66ae848..d64d02a 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerEquipment.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerEquipment.java @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * 塔吊设备管理 @@ -165,4 +166,20 @@ public class TowerEquipment implements Serializable { @ApiModelProperty(value = "修改时间") private Date updateTime; + @ApiModelProperty(value = "历史所在项目列表") + @TableField(exist = false) + private List projectList; + + @ApiModelProperty(value = "所在项目名") + @TableField(exist = false) + private String projectName; + + @ApiModelProperty(value = "定检状态") + @TableField(exist = false) + private String securityStatus; + + @ApiModelProperty(value = "主管部门") + @TableField(exist = false) + private String competentDepartment; + } diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerFall.java b/src/main/java/com/gxwebsoft/tower/entity/TowerFall.java index 0660b1f..00ebe00 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerFall.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerFall.java @@ -51,6 +51,9 @@ public class TowerFall implements Serializable { @ApiModelProperty(value = "报废日期") private Date discardDate; + @ApiModelProperty(value = "检测日期") + private String checkDate; + @ApiModelProperty(value = "出厂检测报告") private String file1; diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerIncome.java b/src/main/java/com/gxwebsoft/tower/entity/TowerIncome.java index 12041dd..532c5fc 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerIncome.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerIncome.java @@ -44,6 +44,9 @@ public class TowerIncome implements Serializable { @ApiModelProperty(value = "收款单位") private Integer incomeCompanyId; + @ApiModelProperty(value = "付款单位") + private Integer payCompanyId; + @ApiModelProperty(value = "收款金额") private BigDecimal amount; diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerProject.java b/src/main/java/com/gxwebsoft/tower/entity/TowerProject.java index ddfb3e6..3278015 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerProject.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerProject.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; +import com.gxwebsoft.common.system.entity.User; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,6 +12,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.Date; +import java.util.Map; import java.util.Set; /** @@ -38,12 +40,21 @@ public class TowerProject implements Serializable { @ApiModelProperty(value = "租赁单位") private String companyName; + @ApiModelProperty(value = "租赁单位") + private Integer companyId; + @ApiModelProperty(value = "承租单位") private String customerName; + @ApiModelProperty(value = "承租单位") + private Integer customerId; + @ApiModelProperty(value = "项目地址") private String projectRegion; + @ApiModelProperty(value = "项目所在地") + private String projectCity; + @ApiModelProperty(value = "详细地址") private String projectAddress; @@ -77,6 +88,9 @@ public class TowerProject implements Serializable { @ApiModelProperty(value = "项目负责人") private String director; + @TableField(exist = false) + private User directorUser; + @ApiModelProperty(value = "项目经理") private String projectDirector; @@ -86,6 +100,9 @@ public class TowerProject implements Serializable { @ApiModelProperty(value = "业务员") private String salesman; + @ApiModelProperty(value = "标地列表") + private String placeList; + @ApiModelProperty(value = "状态, 0待发布, 1已发布") private Integer status; @@ -127,4 +144,23 @@ public class TowerProject implements Serializable { @TableField(exist = false) private Set places2; + @ApiModelProperty(value = "是否已有安装单派单") + @TableField(exist = false) + private boolean hasSetUpWorksheet; + + @ApiModelProperty(value = "派单类型") + @TableField(exist = false) + private Integer worksheetType; + + @ApiModelProperty(value = "派单设备类型") + @TableField(exist = false) + private Integer worksheetEquipType; + + @ApiModelProperty(value = "各派单类型数量") + @TableField(exist = false) + private Map worksheetWorkTypeNumList; + + @ApiModelProperty(value = "关联设备数") + @TableField(exist = false) + private Integer equipmentNum; } diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerProjectOrder.java b/src/main/java/com/gxwebsoft/tower/entity/TowerProjectOrder.java index 3a09d0e..f870b19 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerProjectOrder.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerProjectOrder.java @@ -36,12 +36,21 @@ public class TowerProjectOrder implements Serializable { @ApiModelProperty(value = "项目ID") private Integer projectId; + @ApiModelProperty(value = "设备Id") + private Integer equipmentId; + @ApiModelProperty(value = "设备名称") private String equipmentName; @ApiModelProperty(value = "规格型号") private String equipmentModel; + @ApiModelProperty(value = "备案编号") + private String filingNo; + + @ApiModelProperty(value = "出厂编号") + private String factoryNo; + @ApiModelProperty(value = "签订数量") private Integer equipmentNum; @@ -84,4 +93,17 @@ public class TowerProjectOrder implements Serializable { @ApiModelProperty(value = "创建时间") private Date createTime; + @ApiModelProperty(value = "定检状态") + private String securityStatus; + + + @ApiModelProperty(value = "制造厂商") + @TableField(exist = false) + private String manufactor; + + @ApiModelProperty(value = "报废日期") + @TableField(exist = false) + @JsonFormat(pattern = "yyyy-MM-dd") + private Date scrapDate; + } diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerProjectUser.java b/src/main/java/com/gxwebsoft/tower/entity/TowerProjectUser.java index 129b289..6035f2a 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerProjectUser.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerProjectUser.java @@ -3,6 +3,7 @@ package com.gxwebsoft.tower.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.gxwebsoft.common.system.entity.User; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -69,4 +70,9 @@ public class TowerProjectUser implements Serializable { @TableField(exist = false) private String organizationName; + @TableField(exist = false) + private User user; + + + } diff --git a/src/main/java/com/gxwebsoft/tower/entity/TowerSettleDetail.java b/src/main/java/com/gxwebsoft/tower/entity/TowerSettleDetail.java index 44e1935..fcb6b7b 100644 --- a/src/main/java/com/gxwebsoft/tower/entity/TowerSettleDetail.java +++ b/src/main/java/com/gxwebsoft/tower/entity/TowerSettleDetail.java @@ -53,6 +53,15 @@ public class TowerSettleDetail implements Serializable { @ApiModelProperty(value = "月租金/月工资") private BigDecimal monthAmount; + @ApiModelProperty(value = "日租金") + private BigDecimal dailyAmount; + + @ApiModelProperty(value = "多少月") + private Integer month; + + @ApiModelProperty(value = "多少日") + private Integer day; + @ApiModelProperty(value = "税率") private BigDecimal taxRate; @@ -78,10 +87,19 @@ public class TowerSettleDetail implements Serializable { @ApiModelProperty(value = "租户id") private Integer tenantId; + @ApiModelProperty(value = "支付比例") + private BigDecimal payRate; + @ApiModelProperty(value = "创建时间") private LocalDateTime createTime; @ApiModelProperty(value = "修改时间") private LocalDateTime updateTime; + @ApiModelProperty(value = "进场时间") + private LocalDateTime inDate; + + @ApiModelProperty(value = "退场时间") + private LocalDateTime outDate; + } diff --git a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerContractMapper.xml b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerContractMapper.xml index dd42532..01877dc 100644 --- a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerContractMapper.xml +++ b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerContractMapper.xml @@ -4,8 +4,14 @@ - SELECT a.* + SELECT a.*, + b.project_name, + c.name AS customer_name, + d.company_name FROM tower_contract a + LEFT JOIN tower_project b ON a.project_id = b.project_id + LEFT JOIN tower_customer c ON a.customer_id = c.customer_id + LEFT JOIN sys_company d ON a.company_id = d.company_id AND a.contract_id = #{param.contractId} @@ -19,6 +25,9 @@ AND a.customer_id = #{param.customerId} + + AND (a.contact_number LIKE CONCAT('%', #{param.keywords}, '%') OR b.project_name LIKE CONCAT('%', #{param.keywords}, '%')) + AND a.customer_contact LIKE CONCAT('%', #{param.customerContact}, '%') diff --git a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerCustomerMapper.xml b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerCustomerMapper.xml index 2e538d9..cceb1aa 100644 --- a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerCustomerMapper.xml +++ b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerCustomerMapper.xml @@ -55,6 +55,15 @@ AND a.create_time <= #{param.createTimeEnd} + + AND ( + a.name LIKE CONCAT('%', #{param.keywords}, '%') + OR a.full_name LIKE CONCAT('%', #{param.keywords}, '%') + OR a.credit_code LIKE CONCAT('%', #{param.keywords}, '%') + OR a.address LIKE CONCAT('%', #{param.keywords}, '%') + OR a.contact LIKE CONCAT('%', #{param.keywords}, '%') + ) + diff --git a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerEquipmentMapper.xml b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerEquipmentMapper.xml index c7a2c93..9a68cac 100644 --- a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerEquipmentMapper.xml +++ b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerEquipmentMapper.xml @@ -91,12 +91,17 @@ AND a.create_time <= #{param.createTimeEnd} + + AND a.equipment_id IN (#{param.equipmentIdList}) + AND ( a.name LIKE CONCAT('%', #{param.keywords}, '%') OR a.model LIKE CONCAT('%', #{param.keywords}, '%') OR a.equipment_no LIKE CONCAT('%', #{param.keywords}, '%') OR a.company LIKE CONCAT('%', #{param.keywords}, '%') + OR a.filing_no LIKE CONCAT('%', #{param.keywords}, '%') + OR a.factory_no LIKE CONCAT('%', #{param.keywords}, '%') ) diff --git a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectMapper.xml b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectMapper.xml index 6819f21..a43acf8 100644 --- a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectMapper.xml +++ b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectMapper.xml @@ -88,6 +88,9 @@ AND a.create_time <= #{param.createTimeEnd} + + AND ( a.project_name LIKE CONCAT('%', #{param.keywords}, '%') ) + diff --git a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectUserMapper.xml b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectUserMapper.xml index d74c770..07a766f 100644 --- a/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectUserMapper.xml +++ b/src/main/java/com/gxwebsoft/tower/mapper/xml/TowerProjectUserMapper.xml @@ -9,6 +9,7 @@ LEFT JOIN sys_user b ON a.user_id = b.user_id LEFT JOIN sys_organization c ON b.organization_id = c.organization_id + AND a.user_id != 0 AND a.id = #{param.id} @@ -38,6 +39,7 @@ ) + GROUP BY a.user_id diff --git a/src/main/java/com/gxwebsoft/tower/param/TowerEquipmentParam.java b/src/main/java/com/gxwebsoft/tower/param/TowerEquipmentParam.java index b3df3fe..6fd421a 100644 --- a/src/main/java/com/gxwebsoft/tower/param/TowerEquipmentParam.java +++ b/src/main/java/com/gxwebsoft/tower/param/TowerEquipmentParam.java @@ -1,5 +1,6 @@ package com.gxwebsoft.tower.param; +import com.baomidou.mybatisplus.annotation.TableField; import com.gxwebsoft.common.core.annotation.QueryField; import com.gxwebsoft.common.core.annotation.QueryType; import com.gxwebsoft.common.core.web.BaseParam; @@ -9,6 +10,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.List; + /** * 塔吊设备管理查询参数 * @@ -107,4 +110,21 @@ public class TowerEquipmentParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer deleted; + @ApiModelProperty(value = "是否仅显示未绑定项目设备") + @TableField(exist = false) + private Boolean idleOnly; + + @ApiModelProperty(value = "是否仅显示未绑定项目设备") + @TableField(exist = false) + private List notInFilingNoList; + + @TableField(exist = false) + private List equipmentIdList; + + @TableField(exist = false) + private String keywords; + + @TableField(exist = false) + private Integer yearFilter; + } diff --git a/src/main/java/com/gxwebsoft/tower/param/TowerProjectParam.java b/src/main/java/com/gxwebsoft/tower/param/TowerProjectParam.java index 46a8268..a88a9fe 100644 --- a/src/main/java/com/gxwebsoft/tower/param/TowerProjectParam.java +++ b/src/main/java/com/gxwebsoft/tower/param/TowerProjectParam.java @@ -125,4 +125,21 @@ public class TowerProjectParam extends BaseParam { @TableField(exist = false) private Set places2; + + @ApiModelProperty(value = "派单类型") + @TableField(exist = false) + private Integer worksheetType; + + @ApiModelProperty(value = "派单设备类型") + @TableField(exist = false) + private Integer worksheetEquipType; + + @ApiModelProperty(value = "派单作业类型") + @TableField(exist = false) + private Integer worksheetWortType; + + @ApiModelProperty("搜索关键字") + @TableField(exist = false) + private String keywords; + } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 008bdde..69a4d3a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -19,5 +19,7 @@ logging: # 框架配置 config: # 开发环境接口 - server-url: http://127.0.0.1:9090/api - upload-path: /Users/gxwebsoft/Documents/uploads/ + server-url: http://localhost:10041/api + upload-path: /Users/liangxin/Project/JAVA/tower-java + file-server: http://localhost:10041 + diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index f464be9..18b5ab5 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -3,7 +3,7 @@ # 数据源配置 spring: datasource: - url: jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:3318/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: tower password: FXFZrhHbs3pma6Zh driver-class-name: com.mysql.cj.jdbc.Driver @@ -20,7 +20,8 @@ logging: # 框架配置 config: - # 生产环境接口 - server-url: http://1.14.159.185:10040 - upload-path: /www/wwwroot/file.ws/ + # 开发环境接口 + server-url: https://tower.gxwebsoft.com/api + upload-path: /www/wwwroot/api.tower.gxwebsoft.com/ + file-server: https://tower.gxwebsoft.com diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 05b7705..4b9ca5f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,7 +5,8 @@ server: # 多环境配置 spring: profiles: - active: dev +# active: dev + active: prod application: name: server @@ -86,7 +87,13 @@ config: swagger-version: 1.0 token-key: WLgNsWJ8rPjRtnjzX/Gx2RGS80Kwnm/ZeLbvIL+NrBs= server-url: https://server.gxwebsoft.com/api - file-server: https://file.wsdns.cn - upload-path: /Users/gxwebsoft/Documents/uploads/ + file-server: http://localhost:10041 + upload-path: /Users/liangxin/Project/JAVA/tower-java/ local-upload-path: /Users/gxwebsoft/Documents/uploads/ +wx: + miniapp: + configs: + - appid: wx74f04ad0cdb862ef + secret: 4b31d6be04439f1b56042d9bfabd62d6 + msgDataFormat: JSON \ No newline at end of file diff --git a/src/test/java/com/gxwebsoft/generator/TowerGenerator.java b/src/test/java/com/gxwebsoft/generator/TowerGenerator.java index ac1058c..102f5a3 100644 --- a/src/test/java/com/gxwebsoft/generator/TowerGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/TowerGenerator.java @@ -58,7 +58,15 @@ public class TowerGenerator { // "tower_income", // "tower_income_equipment", // "tower_contract_final_settle", - "tower_contract_final_settle_lost", +// "tower_contract_final_settle_lost", +// "tower_worksheet", +// "tower_worksheet_check", +// "tower_worksheet_detail", +// "tower_worksheet_parts", +// "tower_worksheet_set_up", +// "tower_worksheet_audit", +// "tower_worksheet_car_dispatch", + "tower_project_building", }; // 需要去除的表前缀 private static final String[] TABLE_PREFIX = new String[]{ diff --git a/websoft-api.log b/websoft-api.log index b9385cd..630e61d 100644 --- a/websoft-api.log +++ b/websoft-api.log @@ -1,357 +1,16 @@ -2023-02-26 07:33:25.706 WARN 55396 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. -2023-02-26 07:33:31.283 WARN 55396 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server -2023-02-26 07:34:00.595 ERROR 55396 --- [http-nio-9090-exec-8] c.g.c.c.e.GlobalExceptionHandler : java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - -com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:178) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.AbstractAlipayClient.(AbstractAlipayClient.java:127) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.DefaultAlipayClient.(DefaultAlipayClient.java:117) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.gxwebsoft.common.core.utils.AlipayConfigUtil.alipayClient(AlipayConfigUtil.java:56) ~[classes/:na] - at com.gxwebsoft.common.system.controller.LoginAlipayController.getAuthCode(LoginAlipayController.java:133) ~[classes/:na] - at com.gxwebsoft.common.system.controller.LoginAlipayController$$FastClassBySpringCGLIB$$cdae2167.invoke() ~[classes/:na] - at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] - at com.gxwebsoft.common.system.controller.LoginAlipayController$$EnhancerBySpringCGLIB$$f52e9ce6.getAuthCode() ~[classes/:na] - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] - at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.9.jar:5.3.9] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.52.jar:4.0.FR] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at com.gxwebsoft.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] - at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] -Caused by: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - at com.alipay.api.internal.util.file.FileUtils.openInputStream(FileUtils.java:66) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:34) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:19) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:176) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - ... 105 common frames omitted - -2023-02-26 07:34:00.597 WARN 55396 --- [http-nio-9090-exec-8] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist] -2023-02-26 07:35:51.863 WARN 55429 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. -2023-02-26 07:35:57.325 WARN 55429 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server -2023-02-26 07:36:14.618 ERROR 55429 --- [http-nio-9090-exec-1] c.g.c.c.e.GlobalExceptionHandler : java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - -com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:178) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.AbstractAlipayClient.(AbstractAlipayClient.java:127) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.DefaultAlipayClient.(DefaultAlipayClient.java:117) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.gxwebsoft.common.core.utils.AlipayConfigUtil.alipayClient(AlipayConfigUtil.java:62) ~[classes/:na] - at com.gxwebsoft.common.system.controller.LoginAlipayController.getAuthCode(LoginAlipayController.java:133) ~[classes/:na] - at com.gxwebsoft.common.system.controller.LoginAlipayController$$FastClassBySpringCGLIB$$cdae2167.invoke() ~[classes/:na] - at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] - at com.gxwebsoft.common.system.controller.LoginAlipayController$$EnhancerBySpringCGLIB$$a4162105.getAuthCode() ~[classes/:na] - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] - at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.9.jar:5.3.9] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.52.jar:4.0.FR] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at com.gxwebsoft.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] - at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] -Caused by: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - at com.alipay.api.internal.util.file.FileUtils.openInputStream(FileUtils.java:66) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:34) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:19) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:176) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - ... 105 common frames omitted - -2023-02-26 07:36:14.635 WARN 55429 --- [http-nio-9090-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist] -2023-02-26 07:39:18.143 WARN 55455 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. -2023-02-26 07:39:23.633 WARN 55455 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server -2023-02-26 07:39:32.489 ERROR 55455 --- [http-nio-9090-exec-1] c.g.c.c.e.GlobalExceptionHandler : java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - -com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:178) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.AbstractAlipayClient.(AbstractAlipayClient.java:127) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.DefaultAlipayClient.(DefaultAlipayClient.java:117) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.gxwebsoft.common.core.utils.AlipayConfigUtil.alipayClient(AlipayConfigUtil.java:62) ~[classes/:na] - at com.gxwebsoft.common.system.controller.LoginAlipayController.getAuthCode(LoginAlipayController.java:133) ~[classes/:na] - at com.gxwebsoft.common.system.controller.LoginAlipayController$$FastClassBySpringCGLIB$$cdae2167.invoke() ~[classes/:na] - at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9] - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9] - at com.gxwebsoft.common.system.controller.LoginAlipayController$$EnhancerBySpringCGLIB$$1cf4b09f.getAuthCode() ~[classes/:na] - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_322] - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_322] - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_322] - at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_322] - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.9.jar:5.3.9] - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.9.jar:5.3.9] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.52.jar:4.0.FR] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.9.jar:5.3.9] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.52.jar:4.0.FR] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at com.gxwebsoft.common.core.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:82) [classes/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) [spring-security-web-5.5.2.jar:5.5.2] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.9.jar:5.3.9] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.3.9.jar:5.3.9] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.52.jar:9.0.52] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.52.jar:9.0.52] - at java.lang.Thread.run(Thread.java:750) [na:1.8.0_322] -Caused by: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist - at com.alipay.api.internal.util.file.FileUtils.openInputStream(FileUtils.java:66) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:34) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.internal.util.file.FileUtils.readFileToString(FileUtils.java:19) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - at com.alipay.api.AbstractAlipayClient.readFileToString(AbstractAlipayClient.java:176) ~[alipay-sdk-java-4.35.0.ALL.jar:na] - ... 105 common frames omitted - -2023-02-26 07:39:32.505 WARN 55455 --- [http-nio-9090-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.alipay.api.AlipayApiException: java.io.FileNotFoundException: File '/www/wwwroot/file.ws/file/20230101/c62f937d8a304d0d9199315c252da868.crt' does not exist] +2024-01-24 17:06:22.617 WARN 21561 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2024-01-24 17:08:48.354 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 79374 +2024-01-24 17:08:48.383 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 79853 +2024-01-24 17:08:48.410 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 144908 +2024-01-24 17:08:48.437 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 145248 +2024-01-24 17:08:48.462 WARN 21561 --- [http-nio-10041-exec-10] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 145591 +2024-01-24 17:13:14.173 WARN 21561 --- [http-nio-10041-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 82853 +2024-01-24 17:13:14.214 WARN 21561 --- [http-nio-10041-exec-2] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 113691 +2024-01-24 17:17:04.843 WARN 21561 --- [http-nio-10041-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 199004 +2024-01-24 17:17:04.867 WARN 21561 --- [http-nio-10041-exec-9] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 199350 +2024-01-24 17:20:08.704 WARN 21561 --- [http-nio-10041-exec-5] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 162243 +2024-01-24 17:20:08.706 WARN 21561 --- [http-nio-10041-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 161954 +2024-01-24 17:31:54.903 WARN 21561 --- [http-nio-10041-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 198209 +2024-01-24 17:31:54.929 WARN 21561 --- [http-nio-10041-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 202974 +2024-01-24 17:31:54.955 WARN 21561 --- [http-nio-10041-exec-3] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://42.194.212.185:3308/tower?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 203177 +2024-01-24 17:34:23.401 WARN 23077 --- [main] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production.