puzhibing
2026-05-14 4f7fd9e879d9de211b255eb21535a034893ffbff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.xiaopeng.maintenance.controller;
 
import cn.hutool.core.collection.CollUtil;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient;
import com.xiaopeng.api.model.maintenance.XpCheckLocation;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.enums.DisabledEnum;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.log.annotation.AdminOperationLog;
import com.xiaopeng.common.log.enums.AdminBusinessType;
import com.xiaopeng.common.log.enums.AdminOperationType;
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.maintenance.dto.LocationUpdateStatusDTO;
import com.xiaopeng.maintenance.model.query.XpCheckLocationQuery;
import com.xiaopeng.maintenance.service.IXpCheckLocationService;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
 
import java.util.ArrayList;
import java.util.List;
import com.xiaopeng.common.log.annotation.AdminOperationLog;
import com.xiaopeng.common.log.enums.AdminBusinessType;
import com.xiaopeng.common.log.enums.AdminOperationType;
 
/**
 * @author MiTao
 * @date 2026-02-12 21:17
 *
 */
@Validated
@RestController
@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class XpCheckLocationController {
    private final IXpCheckLocationService xpCheckLocationService;
    private final XpFleetClient xpFleetClient;
    private final TokenService tokenService;
 
    @GetMapping("/api/v1/check-location/list")
    @ApiOperation(value = "获取打卡地址列表", tags = {"管理后台-车队管理"})
    public  R<List<XpCheckLocation>> getList(){
        return R.ok(xpCheckLocationService.lambdaQuery().eq(XpCheckLocation::getStatus, DisabledEnum.YES.getCode()).list());
    }
 
    @GetMapping("/logan/inner/check-location/queryById")
    @ApiOperation(value = "根据ID查询打卡地址", tags = {"内部接口"})
    public R<XpCheckLocation> queryById(@RequestParam Long id) {
        return R.ok(xpCheckLocationService.getById(id));
    }
 
    @PostMapping("/logan/inner/check-location/listByIds")
    @ApiOperation(value = "根据ID列表批量查询打卡地址", tags = {"内部接口"})
    public R<List<XpCheckLocation>> listByIds(@RequestBody List<Long> ids) {
        if (CollUtil.isEmpty(ids)) {
            return R.ok(new ArrayList<>());
        }
        return R.ok(xpCheckLocationService.listByIds(ids));
    }
 
    @ApiOperation(value = "根据ID查询打卡地址", tags = {"运维APP-排班与考勤"})
    @GetMapping("/maintenance-app/api/v1/check-location/queryByUserId")
    public R<XpCheckLocation> queryByUserId() {
        Long id = tokenService.getLoginOperationUser().getId();
        return R.ok(xpCheckLocationService.queryByUserId(id));
    }
 
    @PostMapping("/api/v1/check-location/pageList")
    @ApiOperation(value = "获取打卡地址分页列表", tags = {"管理后台-运维执行"})
    public  R<PageInfo<XpCheckLocation>> pageList(@RequestBody XpCheckLocationQuery query){
        PageInfo<XpCheckLocation> pageList = xpCheckLocationService.pageList(query);
        return R.ok(pageList);
    }
 
    @PostMapping("/api/v1/check-location/add")
    @ApiOperation(value = "新增打卡地", tags = {"管理后台-运维执行"})
    @AdminOperationLog(
            businessType = AdminBusinessType.CHECK_LOCATION_MANAGEMENT,
            operationType = AdminOperationType.ADD,
            content = "新增打卡地点",
            appendRequestData = true
    )
    public  R<String> add(@RequestBody XpCheckLocation dto){
        xpCheckLocationService.save(dto);
        return R.ok();
    }
 
    @PostMapping("/api/v1/check-location/edit")
    @ApiOperation(value = "编辑打卡地", tags = {"管理后台-运维执行"})
    @AdminOperationLog(
            businessType = AdminBusinessType.CHECK_LOCATION_MANAGEMENT,
            operationType = AdminOperationType.EDIT,
            content = "编辑打卡地点",
            appendRequestData = true
    )
    public  R<String> edit(@RequestBody XpCheckLocation dto){
        xpCheckLocationService.updateById(dto);
        return R.ok();
    }
 
    @DeleteMapping("/api/v1/check-location/deleteById")
    @ApiOperation(value = "删除打卡地", tags = {"管理后台-运维执行"})
    @AdminOperationLog(
            businessType = AdminBusinessType.CHECK_LOCATION_MANAGEMENT,
            operationType = AdminOperationType.DELETE,
            contentExpression = "'删除打卡地点,id=' + #p0",
            appendRequestData = false
    )
    public  R<String> deleteById(@RequestParam Long id){
        // 判断打卡地是否已被使用
        Long data = xpFleetClient.getUseCountByLocationId(id).getData();
        if (data > 0) {
            return R.fail("打卡地已被使用,请先解除关联");
        }
        xpCheckLocationService.removeById(id);
        return R.ok();
    }
 
    @PostMapping("/api/v1/check-location/updateStatus")
    @ApiOperation(value = "启用禁用打卡地", tags = {"管理后台-运维执行"})
    @AdminOperationLog(
            businessType = AdminBusinessType.CHECK_LOCATION_MANAGEMENT,
            operationTypeExpression = "#p0.status == 1 ? T(com.xiaopeng.common.log.enums.AdminOperationType).ENABLE : T(com.xiaopeng.common.log.enums.AdminOperationType).DISABLE",
            contentExpression = "(#p0.status == 1 ? '启用打卡地点,id=' : '禁用打卡地点,id=') + #p0.id",
            appendRequestData = false
    )
    public  R<String> updateStatus(@RequestBody LocationUpdateStatusDTO dto){
        XpCheckLocation xpCheckLocation = xpCheckLocationService.getById(dto.getId());
        xpCheckLocation.setStatus(dto.getStatus());
        xpCheckLocationService.updateById(xpCheckLocation);
        return R.ok();
    }
 
}