diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index 9bd6ad1e3..f2a7e616b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -143,7 +143,7 @@ public class HardOrderController { // 判断是否为合作超市管理员工 if (!hardManagerService.isSuperMarketAdmin(user)) return R.ok(new Page()); // 查询用户属于的商户 - MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId()).getData(); + MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户"); // 查询商户和下面的子商户 List mchDtoIds = new java.util.ArrayList<>(List.of(mch.getId())); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java index b38aac8da..7d55dd36b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java @@ -11,6 +11,7 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.service.PjcloudUser; @@ -74,7 +75,7 @@ public class HardOrderTotalController { // 判断是否为合作超市管理员工 if (!hardManagerService.isSuperMarketAdmin(user)) return R.ok(new Page()); // 查询用户属于的商户 - MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId()).getData(); + MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户"); List mchDtoIds = new ArrayList<>(List.of(mch.getId())); // 查询商户和下面的子商户 @@ -96,7 +97,7 @@ public class HardOrderTotalController { // 判断是否为合作超市管理员工 if (!hardManagerService.isSuperMarketAdmin(user)) return R.ok(new Page()); // 查询用户属于的商户 - MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId()).getData(); + MchManageVo mch = mchService.getFirstMchByDeptId(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.CANTEEN).getData(); if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户"); List mchDtoIds = new ArrayList<>(List.of(mch.getId())); // 查询商户和下面的子商户 diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java index dcf42f978..c4e46891d 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java @@ -40,6 +40,10 @@ import java.util.Set; @FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.UPMS_SERVICE) public interface RemoteUserService { + @NoToken + @PostMapping("/user/inner/sync-user-canteen") + R syncUserCanteen(@RequestParam(required = false) Long userId, @RequestParam(required = false) Long deptId, @RequestParam(required = false) Boolean foure); + @NoToken @PostMapping("/user/inner-page") R> getRemoteUserPage(@RequestParam Long current, @RequestParam Long size, @RequestBody UserDTO userDTO); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java index 4375a38aa..c34a88fd0 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java @@ -86,6 +86,18 @@ public class SysUserController { /* ************************************* end 回调 end ************************************* */ + /* ************************************* start 远程调用 start ************************************* */ + + @Inner() + @PostMapping("/inner/sync-user-canteen") + public R syncUserCanteen(@RequestParam(required = false) Long userId, @RequestParam(required = false) Long deptId, @RequestParam(required = false) Boolean foure) { + if (ObjectUtil.isEmpty(foure)) foure = true; + userService.syncUserCanteen(userId, deptId, foure); + return R.ok(); + } + + /* ************************************* end 远程调用 end ************************************* */ + @Operation(summary = "同步用户食堂信息", description = "同步用户食堂信息") @PostMapping("/sync-user-canteen") public R syncUserCanteen() { diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java index 7a0db9c73..a4d1561be 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java @@ -222,6 +222,7 @@ public interface SysUserService extends IService { /** * 根据部门id/姓名,获取用户信息 + * * @param deptId * @param name * @return @@ -229,7 +230,17 @@ public interface SysUserService extends IService { List listUserIdByDeptId(Long deptId, String name); /** - * 同步用户食堂信息 + * 同步所有用户食堂信息 */ void syncUserCanteen(); + + /** + * 按条件同步用户食堂信息 + */ + void syncUserCanteen(Long userId, Long deptId, boolean foure); + + /** + * 获取用户食堂id + */ + Long getUserCanteenId(Long deptId); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java index d8e49d154..0cb08a46a 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java @@ -53,6 +53,7 @@ import com.bsd.pjcloud.common.audit.annotation.Audit; import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.CommonConstants; import com.bsd.pjcloud.common.core.constant.CommonRoleConstant; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.exception.ErrorCodes; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.MsgUtils; @@ -174,6 +175,8 @@ public class SysUserServiceImpl extends ServiceImpl impl sysUser.setUpdateBy(userDto.getUsername()); sysUser.setPassword(ENCODER.encode(userDto.getPassword())); sysUser.setPasswordModifyTime(LocalDateTime.now()); + // 获取用户食堂id + sysUser.setCanteenId(getUserCanteenId(sysUser.getDeptId())); baseMapper.insert(sysUser); // 保存用户岗位信息 Optional.ofNullable(userDto.getPost()).ifPresent(posts -> { @@ -209,7 +212,9 @@ public class SysUserServiceImpl extends ServiceImpl impl RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); + // 创建钱包 remoteWalletService.createWallet(sysUser.getUserId()); + // 通知钱包 remoteWalletService.userChange(sysUser.getUserId(), Boolean.FALSE); }); } @@ -890,6 +895,7 @@ public class SysUserServiceImpl extends ServiceImpl impl updateUser.setUserId(detail.getUserId()); updateUser.setProcessStatus(processStatus); updateUser.setProcessTime(LocalDateTime.now()); + if (isConsent) updateUser.setCanteenId(getUserCanteenId(detail.getDeptId())); baseMapper.updateById(updateUser); if (isConsent) { // 创建用户默认钱包 @@ -961,6 +967,35 @@ public class SysUserServiceImpl extends ServiceImpl impl } } + /** + * 按条件同步用户食堂信息 + */ + @Override + public void syncUserCanteen(Long userId, Long deptId, boolean foure) { + SysUser userDto = new SysUser(); + userDto.setUserId(userId); + userDto.setDeptId(deptId); + Long current = 1L; + while (true) { + boolean result = syncUserCanteenGroup(current, userDto, foure); + if (!result) break; + current++; + } + } + + /** + * 获取用户食堂id + */ + @Override + public Long getUserCanteenId(Long deptId) { + if (ObjectUtil.isEmpty(deptId)) return -1L; + MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(deptId, MerchantTypeEnum.CANTEEN).getData(); + if (ObjectUtil.isNotEmpty(mchDetail) && ObjectUtil.isNotEmpty(mchDetail.getTypes()) && ObjectUtil.equals(mchDetail.getTypes(), MerchantTypeEnum.CANTEEN.getType())) { + return mchDetail.getId(); + } + return -1L; + } + public boolean syncUserCanteenGroup(Long current, SysUser userDto, boolean foure) { Page page = new Page<>(); page.setCurrent(current); @@ -977,14 +1012,15 @@ public class SysUserServiceImpl extends ServiceImpl impl for (SysUser v : pageList.getRecords()) { if (!foure && ObjectUtil.isNotEmpty(v.getCanteenId())) continue; - MchManageVo mchDetail = remoteMchService.getFirstMchByDeptId(v.getDeptId()).getData(); - if (ObjectUtil.isEmpty(mchDetail)) { - noneMchUserSum++; - continue; - } SysUser item = new SysUser(); item.setUserId(v.getUserId()); - item.setCanteenId(mchDetail.getId()); + Long mchId = getUserCanteenId(v.getDeptId()); + if (ObjectUtil.equals(mchId, -1L)) { + item.setCanteenId(-1L); + noneMchUserSum++; + } else { + item.setCanteenId(mchId); + } updateUserList.add(item); } baseMapper.updateById(updateUserList); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java index e7a28ac17..1d5e3beef 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserTransactionServiceImpl.java @@ -205,6 +205,7 @@ public class SysUserTransactionServiceImpl extends ServiceImpl getFirstMch(@RequestParam List deptIds); + R getFirstMch(@RequestParam List deptIds, @RequestParam MerchantTypeEnum mchType); @NoToken @GetMapping("/mch-manage/get-first-mch-by-dept-id") - R getFirstMchByDeptId(@RequestParam Long deptId); + R getFirstMchByDeptId(@RequestParam Long deptId, @RequestParam MerchantTypeEnum mchType); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java index 268e34876..971600fa7 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/mch/MchManageController.java @@ -90,16 +90,16 @@ public class MchManageController { @Inner @GetMapping("/get-first-mch") - public R getFirstMch(@RequestParam List deptIds) { - MchManageVo mchManage = mchManageService.getFirstMch(deptIds); + public R getFirstMch(@RequestParam List deptIds, @RequestParam MerchantTypeEnum mchType) { + MchManageVo mchManage = mchManageService.getFirstMch(deptIds, mchType); if (ObjectUtil.isEmpty(mchManage)) return R.failed("商户不存在"); return R.ok(mchManage); } @Inner @GetMapping("/get-first-mch-by-dept-id") - public R getFirstMchByDeptId(@RequestParam Long deptId) { - MchManageVo mchManage = mchManageService.getFirstMchByDeptId(deptId); + public R getFirstMchByDeptId(@RequestParam Long deptId, @RequestParam MerchantTypeEnum mchType) { + MchManageVo mchManage = mchManageService.getFirstMchByDeptId(deptId, mchType); if (ObjectUtil.isEmpty(mchManage)) return R.failed("商户不存在"); return R.ok(mchManage); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java index 9d5865eb8..8f313e6cd 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java @@ -37,9 +37,9 @@ public interface MchManageService extends IService { MchManageVo getByDeptId(Long deptId, MerchantTypeEnum type); - MchManageVo getFirstMch(List deptIds); + MchManageVo getFirstMch(List deptIds, MerchantTypeEnum mchType); - MchManageVo getFirstMchByDeptId(Long deptId); + MchManageVo getFirstMchByDeptId(Long deptId, MerchantTypeEnum mchType); /** * 刷新商户二维码 diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java index b5f4014ab..07553d851 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletActiveServiceImpl.java @@ -12,6 +12,7 @@ import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.utils.DataUtil; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; @@ -159,7 +160,7 @@ public class WalletActiveServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper() .isNull(WalletActiveEntity::getUserId) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java index f34ff94f0..303ad5262 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java @@ -23,6 +23,7 @@ import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.utils.DataUtil; import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.CommonRoleConstant; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; @@ -461,8 +462,8 @@ public class WalletManageServiceImpl extends ServiceImpl() .set(WalletActiveEntity::getMerchantId, mch.getId()) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchDeptServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchDeptServiceImpl.java index 559acd902..f47a06fb9 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchDeptServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchDeptServiceImpl.java @@ -8,6 +8,7 @@ import com.bsd.pjcloud.admin.api.dto.DeptAllListDto; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; import com.bsd.pjcloud.admin.api.utils.DataUtil; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.dto.mch.MchDeptDto; import com.bsd.pjcloud.wallet.api.entity.mch.MchDeptEntity; @@ -57,7 +58,7 @@ public class MchDeptServiceImpl extends ServiceImpl deptIds) { - List merchantList = baseMapper.selectList(new LambdaQueryWrapper()); + public MchManageVo getFirstMch(List deptIds, MerchantTypeEnum mchType) { + List merchantList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(mchType), MchManageEntity::getTypes, mchType.getType()) + ); if (ObjectUtil.isEmpty(merchantList)) return null; for (Long id : deptIds) { for (MchManageEntity merchant : merchantList) { if (ObjectUtil.equals(merchant.getDeptId(), id)) { - return BeanUtils.toBean(merchant, MchManageVo.class); + if (ObjectUtil.isNotEmpty(mchType)) { + if (ObjectUtil.equals(merchant.getTypes(), mchType.getType())) { + return BeanUtils.toBean(merchant, MchManageVo.class); + } + } else { + return BeanUtils.toBean(merchant, MchManageVo.class); + } } } } @@ -288,13 +298,13 @@ public class MchManageServiceImpl extends ServiceImpl parentDeptIdList = remoteDeptService.getParentDeptList(deptId).getData(); if (ObjectUtil.isEmpty(parentDeptIdList)) { return null; } List deptIds = parentDeptIdList.stream().map(SysDept::getDeptId).toList(); - return getFirstMch(deptIds); + return getFirstMch(deptIds, mchType); } /** diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/WalletThirdZyServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/WalletThirdZyServiceImpl.java index 7ef0a9e8b..913e279d5 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/WalletThirdZyServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/WalletThirdZyServiceImpl.java @@ -15,6 +15,7 @@ import com.bsd.pjcloud.admin.api.feign.RemoteRoleService; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.vo.UserVO; import com.bsd.pjcloud.common.core.constant.CommonRoleConstant; +import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccClassInfoDto; @@ -115,7 +116,7 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService { public void syncAllDept(Long deptId, Boolean isDel) { MchManageDto dto = new MchManageDto(); if (ObjectUtil.isNotEmpty(deptId)) { - MchManageVo mchManageVo = mchManageService.getFirstMchByDeptId(deptId); + MchManageVo mchManageVo = mchManageService.getFirstMchByDeptId(deptId, MerchantTypeEnum.CANTEEN); if (ObjectUtil.isNotEmpty(mchManageVo)) { dto.setDeptId(mchManageVo.getDeptId()); } @@ -268,7 +269,7 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService { log.error("|{}|syncAllUserGroup用户没有自动创建钱包权限|{}|", TAG, JSONUtil.toJsonStr(v)); continue; } - MchManageVo mch = mchManageService.getFirstMchByDeptId(v.getDeptId()); + MchManageVo mch = mchManageService.getFirstMchByDeptId(v.getDeptId(), MerchantTypeEnum.CANTEEN); // 查询是在商户下 if (ObjectUtil.isEmpty(mch)) { log.error("|{}|syncAllUserGroup用户部门商户id为空WalletManageVo|{}|", TAG, JSONUtil.toJsonStr(v));