feat: 移动端

dev
zhanglei 2026-07-27 14:35:47 +08:00
parent 6ecc871fd5
commit 05147f52d2
14 changed files with 220 additions and 9 deletions

View File

@ -0,0 +1,54 @@
package org.qinan.safetyeval.adapter.web.institution.app;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.qinan.safetyeval.client.api.institution.EvalProjectApi;
import org.qinan.safetyeval.client.co.institution.EvalProjectCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectEnumsCO;
import org.qinan.safetyeval.client.co.institution.EvalProjectStatisticsCO;
import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalProjectPageQuery;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Api(tags = "移动端安评项目")
@RestController
@RequestMapping("/safetyEval/app/institution/eval-project")
public class AppEvalProjectController {
@Resource
private EvalProjectApi evalProjectApi;
@ApiOperation("查询项目详情")
@GetMapping("/get")
public SingleResponse<EvalProjectCO> get(@ApiParam("主键ID") @RequestParam String id) {
return evalProjectApi.get(Long.parseLong(id));
}
@ApiOperation("分页项目列表")
@GetMapping("/page")
public PageResponse<EvalProjectCO> page(@Validated EvalProjectPageQuery query) {
query.setMyProject(true);
return evalProjectApi.page(query);
}
@ApiOperation("我的项目统计")
@GetMapping("/projectStatistics")
public SingleResponse<EvalProjectStatisticsCO> projectStatistics() {
return evalProjectApi.projectStatistics();
}
@ApiOperation("安评项目枚举映射")
@GetMapping("/enums")
public SingleResponse<EvalProjectEnumsCO> enums() {
return evalProjectApi.enums();
}
}

View File

@ -0,0 +1,40 @@
package org.qinan.safetyeval.adapter.web.institution.app;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi;
import org.qinan.safetyeval.client.co.institution.EvalSignTaskCO;
import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EditSignTaskSaveCmd;
import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "移动端签字任务")
@RestController
@RequestMapping("/safetyEval/app/institution/eval-sign-task")
public class AppEvalSignTaskController {
@Resource
private EvalSignTaskApi evalSignTaskApi;
@ApiOperation("签字任务分页")
@GetMapping("/page")
public PageResponse<EvalSignTaskCO> page(@Validated EvalSignTaskPageQuery query) {
if (!StringUtils.hasText(query.getSignerPersonnelId())) {
query.setSignerPersonnelId(String.valueOf(AuthUserContextAdapter.getCurrentUserId()));
}
return evalSignTaskApi.page(query);
}
@ApiOperation("签字上传")
@PostMapping("/signAndUpload")
public SingleResponse<Boolean> signAndUpload(@RequestBody EditSignTaskSaveCmd cmd) {
return evalSignTaskApi.signAndUpload(cmd);
}
}

View File

@ -0,0 +1,33 @@
package org.qinan.safetyeval.adapter.web.institution.app;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.qinan.safetyeval.client.api.institution.EvalSurveyApi;
import org.qinan.safetyeval.client.co.institution.EvalSurveyCO;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.institution.EvalSurveySaveCmd;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "移动现场踏勘")
@RestController
@RequestMapping("/safetyEval/app/institution/eval-survey")
public class AppEvalSurveyController {
@Resource
private EvalSurveyApi evalSurveyApi;
@ApiOperation("保存踏勘人员(id空新增/非空修改)")
@PostMapping("/save")
public SingleResponse<EvalSurveyCO> save(@Validated @RequestBody EvalSurveySaveCmd cmd) {
return evalSurveyApi.save(cmd);
}
@ApiOperation("查询我的踏勘数据")
@GetMapping("/get")
public SingleResponse<EvalSurveyCO> get(@RequestParam("projectId") String projectId) {
return evalSurveyApi.get(projectId);
}
}

View File

@ -0,0 +1,56 @@
package org.qinan.safetyeval.adapter.web.institution.app;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.qinan.safetyeval.client.api.SafetyMessageApi;
import org.qinan.safetyeval.client.co.SafetyMessageCO;
import org.qinan.safetyeval.client.dto.*;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.dataobject.base.Req;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* Controller
*
* @author safety-eval
*/
@Slf4j
@Api(tags = "移动端消息中心")
@RestController
@RequestMapping("/safetyEval/app/safetyMessage")
public class AppSafetyMessageController {
@Resource
private SafetyMessageApi safetyMessageApi;
@ApiOperation("查询消息详情")
@GetMapping("/get")
public SingleResponse<SafetyMessageCO> get(@ApiParam("主键ID") @RequestParam Long id) {
return safetyMessageApi.get(id);
}
@ApiOperation("批量标为已读")
@PostMapping("/batchMarkedAsRead")
public SingleResponse<Boolean> batchMarkedAsRead(@ApiParam("主键IDj集合") @RequestBody Req<List<Long>> req) {
return safetyMessageApi.batchMarkedAsRead(req.getData());
}
@ApiOperation("删除消息")
@PostMapping("/delete")
public SingleResponse<Void> delete(@ApiParam("主键ID") @RequestBody Req<Long> req) {
return safetyMessageApi.delete(req.getData());
}
@ApiOperation("分页查询消息")
@GetMapping("/page")
public PageResponse<SafetyMessageCO> page(@Validated SafetyMessagePageQuery query) {
query.setReceiveId(AuthUserContextAdapter.getCurrentUserId());
return safetyMessageApi.page(query);
}
}

View File

@ -77,7 +77,6 @@ public class EvalProjectExecutor implements EvalProjectApi {
@Override
public PageResponse<EvalProjectCO> page(EvalProjectPageQuery query) {
EvalProjectQuery domainQuery = evalProjectCmdConvertor.convertPageQueryToQ(query);
domainQuery.setOrgId(institutionOrgSupport.resolveCurrentOrgId());
PageResult<EvalProjectEntity> pageResult = evalProjectDomainService.page(domainQuery);
return PageResponse.of(
evalProjectCmdConvertor.convertEListToCOList(pageResult.getRecords()),

View File

@ -1,5 +1,6 @@
package org.qinan.safetyeval.app.executor.institution;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.qinan.safetyeval.app.convertor.EvalSurveyCmdConvertor;
import org.qinan.safetyeval.client.api.institution.EvalSurveyApi;
import org.qinan.safetyeval.client.co.institution.EvalSurveyCO;
@ -12,11 +13,17 @@ import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.query.EvalSurveyQuery;
import org.qinan.safetyeval.domain.query.PageResult;
import org.qinan.safetyeval.domain.service.EvalSurveyDomainService;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.convertor.EvalSurveyDoConvertor;
import org.qinan.safetyeval.infrastructure.dataobject.EvalSurveyDO;
import org.qinan.safetyeval.infrastructure.mapper.EvalSurveyMapper;
import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EvalSurveyExecutor implements EvalSurveyApi {
@ -31,6 +38,10 @@ public class EvalSurveyExecutor implements EvalSurveyApi {
@Lazy
@Autowired(required = false)
private EvalSurveyCmdConvertor evalSurveyCmdConvertor;
@Autowired
private EvalSurveyMapper evalSurveyMapper;
@Autowired
private EvalSurveyDoConvertor evalSurveyDoConvertor;
@Override
public SingleResponse<EvalSurveyCO> save(EvalSurveySaveCmd cmd) {
@ -55,4 +66,14 @@ public class EvalSurveyExecutor implements EvalSurveyApi {
evalSurveyCmdConvertor.convertEListToCOList(pageResult.getRecords()),
pageResult.getTotal());
}
@Override
public SingleResponse<EvalSurveyCO> get(String projectId) {
List<EvalSurveyDO> evalSurveyDOS = evalSurveyMapper.selectList(new LambdaQueryWrapper<EvalSurveyDO>()
.eq(EvalSurveyDO::getProjectId, projectId)
.eq(EvalSurveyDO::getPersonnelId, AuthUserContextAdapter.getCurrentUserId())
.last("limit 1"));
EvalSurveyEntity evalSurveyEntity = evalSurveyDoConvertor.convertDoToE(evalSurveyDOS.get(0));
return SingleResponse.success(evalSurveyCmdConvertor.convertEToCO(evalSurveyEntity));
}
}

View File

@ -11,4 +11,6 @@ public interface EvalSurveyApi {
SingleResponse<EvalSurveyCO> save(EvalSurveySaveCmd cmd);
PageResponse<EvalSurveyCO> page(EvalSurveyPageQuery query);
SingleResponse<EvalSurveyCO> get(String projectId);
}

View File

@ -24,10 +24,10 @@ public class EvalSignTaskCO {
private String taskTitle;
@ApiModelProperty("待签角色")
private String signerRoles;
@ApiModelProperty(value = "任务状态编码1待签 2已签 3已作废", example = "1")
@ApiModelProperty(value = "任务状态编码1待签 2已签", example = "1")
private Integer taskStatusCode;
@ApiModelProperty(value = "任务状态名称:待签/已签/已作废", example = "待签")
@ApiModelProperty(value = "任务状态名称:待签/已签", example = "待签")
private String taskStatusName;
@ApiModelProperty(value = "任务下发时间")

View File

@ -9,6 +9,6 @@ public class EditSignTaskSaveCmd {
@ApiModelProperty(value = "任务id")
private Long id;
@ApiModelProperty("签字图片")
@ApiModelProperty("签字图片,多个以逗号隔开")
private String signerUrl;
}

View File

@ -25,4 +25,7 @@ public class EvalProjectPageQuery extends BasePageQuery {
private Boolean isStatutory;
private Long customerId;
@ApiModelProperty("app关键字搜素")
private String keyword;
}

View File

@ -45,9 +45,9 @@ public class EvalSurveySaveCmd {
@ApiModelProperty("签退时间")
private LocalDateTime signOutTime;
@ApiModelProperty("现场图片")
@ApiModelProperty("现场图片,多个以逗号隔开")
private String sceneUrl;
@ApiModelProperty("签字图片")
@ApiModelProperty("签字图片,多个以逗号隔开")
private String signatureUrl;
}

View File

@ -35,4 +35,7 @@ public class EvalProjectQuery {
@ApiModelProperty("是否法定项目 1是 0否")
private Boolean isStatutory;
@ApiModelProperty("app关键字搜素")
private String keyword;
}

View File

@ -157,6 +157,9 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway {
if (!CollectionUtils.isEmpty(query.getProjectIds())) {
wrapper.in(EvalProjectDO::getId, query.getProjectIds());
}
if (StringUtils.hasText(query.getKeyword())) {
wrapper.and(o -> o.like(EvalProjectDO::getProjectName, query.getKeyword()).or().like(EvalProjectDO::getProjectNo, query.getKeyword()));
}
if (Boolean.TRUE.equals(query.getMyProject())) {
wrapper.apply("JSON_CONTAINS(participants_json, JSON_OBJECT('id', {0}))", AuthUserContextAdapter.getCurrentUserId());
}

View File

@ -16,9 +16,6 @@ public class InstitutionOrgSupport {
if (orgId == null) {
orgId = ThreadLocalUserInfoAdapter.get();
}
if (orgId == null) {
throw new BizException(ErrorCode.ORG_INFO_NOT_FOUND);
}
return orgId;
}