package io.as.modules.daycard.controller; import io.as.common.annotation.AuditAction; import io.as.common.exception.ASException; import io.as.common.utils.R; import io.as.modules.daycard.entity.DayCardActivationCodeEntity; import io.as.modules.daycard.service.DayCardActivationCodeService; import io.as.modules.sys.entity.SysOrgEntity; import io.as.modules.sys.service.SysOrgService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 天卡设备激活码管理(管理后台用) *

管理后台按门店生成激活码,App 端 init 时输入激活码完成设备注册绑定

*/ @Api(tags = "天卡设备激活码") @RestController @RequestMapping("/manage/daycard/activation-code") public class DayCardActivationCodeController { @Autowired private DayCardActivationCodeService dayCardActivationCodeService; @Autowired private SysOrgService sysOrgService; /** * 按门店查询激活码列表 */ @ApiOperation("按门店查询激活码列表") @GetMapping("/list/{storeOrgId}") public R listByStore(@PathVariable("storeOrgId") Long storeOrgId) { List list = dayCardActivationCodeService.listByStoreOrgId(storeOrgId); List> result = new ArrayList<>(); for (DayCardActivationCodeEntity entity : list) { result.add(toMap(entity)); } Map data = new HashMap<>(); data.put("list", result); return R.dataSuccess(data); } /** * 为门店生成激活码(每门店一个,已存在则返回已有的) */ @ApiOperation("为门店生成激活码") @AuditAction(value = "ACTCODE_GENERATE", description = "生成门店激活码") @PostMapping("/generate") public R generate(@RequestBody GenerateRequest request) { if (request.getStoreOrgId() == null) { throw new ASException("门店组织ID不能为空"); } // 校验门店存在 SysOrgEntity storeOrg = sysOrgService.getById(request.getStoreOrgId()); if (storeOrg == null) { throw new ASException("门店不存在"); } // 从门店 mpath 解析渠道 Long channelOrgId = resolveChannelOrgId(storeOrg); DayCardActivationCodeEntity entity = dayCardActivationCodeService.generateForStore( request.getStoreOrgId(), channelOrgId, request.getRemark()); Map data = new HashMap<>(); data.put("data", toMap(entity)); return R.dataSuccess(data); } /** * 重新生成激活码 code(旧 code 失效) */ @ApiOperation("重新生成激活码") @AuditAction(value = "ACTCODE_REGENERATE", description = "重新生成激活码") @PostMapping("/{id}/regenerate") public R regenerate(@PathVariable("id") Long id) { String newCode = dayCardActivationCodeService.regenerateCode(id); Map item = new HashMap<>(); item.put("code", newCode); Map data = new HashMap<>(); data.put("data", item); return R.dataSuccess(data); } /** * 启用/禁用激活码 */ @ApiOperation("启用/禁用激活码") @AuditAction(value = "ACTCODE_UPDATE_STATUS", description = "修改激活码状态") @PutMapping("/{id}/status") public R updateStatus(@PathVariable("id") Long id, @RequestBody UpdateStatusRequest request) { dayCardActivationCodeService.updateStatus(id, request.getStatus()); return R.ok(); } /** * 删除激活码(软删除) */ @ApiOperation("删除激活码") @AuditAction(value = "ACTCODE_DELETE", description = "删除激活码") @DeleteMapping("/{id}") public R delete(@PathVariable("id") Long id) { dayCardActivationCodeService.delete(id); return R.ok(); } // ==================== 内部方法 ==================== /** * 从门店 mpath 解析渠道组织ID(mpath 第2段) */ private Long resolveChannelOrgId(SysOrgEntity storeOrg) { if (storeOrg == null || StringUtils.isBlank(storeOrg.getMpath())) { return null; } String[] segments = storeOrg.getMpath().split("\\."); if (segments.length >= 2) { try { return Long.parseLong(segments[1]); } catch (NumberFormatException e) { return null; } } return null; } private Map toMap(DayCardActivationCodeEntity entity) { Map m = new HashMap<>(); m.put("id", entity.getId()); m.put("code", entity.getCode()); m.put("channelOrgId", entity.getChannelOrgId()); m.put("storeOrgId", entity.getStoreOrgId()); m.put("status", entity.getStatus()); m.put("maxDeviceCount", entity.getMaxDeviceCount()); m.put("activatedCount", entity.getActivatedCount()); m.put("remark", entity.getRemark()); m.put("createdAt", entity.getCreatedAt()); return m; } /** * 生成激活码请求 */ @lombok.Data public static class GenerateRequest { private Long storeOrgId; private String remark; } /** * 更新状态请求 */ @lombok.Data public static class UpdateStatusRequest { private String status; } }