package com.ruoyi.web.controller.api;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpRequest;
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.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.model.TCompany;
import com.ruoyi.system.model.TPhysicalGoods;
import com.ruoyi.system.query.BigGiftPackageQuery;
import com.ruoyi.system.query.CompanyUserQuery;
import com.ruoyi.system.query.TCompanyQuery;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.TCompanyService;
import com.ruoyi.system.service.TPhysicalGoodsService;
import com.ruoyi.web.controller.system.SysUserController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
*
* 公司 前端控制器
*
*
* @author xiaochen
* @since 2025-12-08
*/
@RestController
@RequestMapping("/t-company")
@Api(tags = "(嘉视达)公司 管理")
public class TCompanyController extends BaseController {
private final TCompanyService companyService;
private final ISysUserService userService;
private final RedisTemplate redisTemplate;
public TCompanyController(TCompanyService companyService, ISysUserService userService, RedisTemplate redisTemplate) {
this.companyService = companyService;
this.userService = userService;
this.redisTemplate = redisTemplate;
}
@ApiOperation(value = "公司分页列表")
@PostMapping(value = "/pageList")
public R> pageList(@RequestBody TCompanyQuery query) {
Page page = new Page<>(query.getPageNum(), query.getPageSize());
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.ne(TCompany::getStatus, 3);
wrapper.like(Objects.nonNull(query.getName()), TCompany::getName, query.getName());
wrapper.like(Objects.nonNull(query.getChargePerson()), TCompany::getChargePerson, query.getChargePerson());
wrapper.orderByDesc(TCompany::getCreateTime);
Page pageInfo = companyService.page(page, wrapper);
return R.ok(pageInfo);
}
@ApiOperation(value = "公司详情")
@PostMapping(value = "/detail/{id}")
public R detail(@PathVariable Integer id) {
TCompany company = companyService.getById(id);
return R.ok(company);
}
@ApiOperation(value = "公司添加")
@PostMapping(value = "/add")
@Log(title = "添加公司-添加", businessType = BusinessType.INSERT)
public R add(@RequestBody TCompany company) {
company.setStatus(1);
company.setCreateUserId(getUserId());
SysUser user = new SysUser();
user.setRoleType(2);
user.setDeptId(124l);
user.setIsAdmin(1);
user.setUserName(company.getAccount());
user.setPassword(company.getPassword());
user.setPhonenumber(company.getChargePersonPhone());
user.setNickName(company.getChargePerson());
user.setRoleId(1l);
if (!userService.checkUserNameUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
}
user.setCreateBy(getUsername());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
int count = userService.insertUser(user);
if (count > 0) {
boolean save = companyService.save(company);
if (save) {
user.setCompanyId(company.getId());
userService.updateUser(user);
}
}
return R.ok();
}
@ApiOperation(value = "公司修改")
@PostMapping(value = "/edit")
@Log(title = "修改公司-修改", businessType = BusinessType.UPDATE)
public R edit(@RequestBody TCompany company) {
SysUser user = userService.getUserByCompanyId(company.getId());
if (!userService.checkUserNameUnique(user)) {
return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
}
user.setUserName(company.getAccount());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
company.setUpdateUserId(getUserId());
int count = userService.updateUser(user);
if (count > 0) {
boolean update = companyService.updateById(company);
return R.ok();
}
return R.fail();
}
@ApiOperation(value = "公司删除")
@DeleteMapping(value = "/delete/{id}")
@Log(title = "删除公司-删除", businessType = BusinessType.DELETE)
public R delete(@PathVariable Integer id) {
TCompany tCompany = companyService.getById(id);
tCompany.setStatus(3);
companyService.updateById(tCompany);
SysUser userByCompanyId = userService.getUserByCompanyId(tCompany.getId());
userByCompanyId.setDelFlag("2");
userService.deleteUserByIds(Arrays.asList(userByCompanyId.getUserId()));
return R.ok();
}
@ApiOperation(value = "公司需求--管理人员列表")
@PostMapping(value = "/getCompanyUserList")
public R> getCompanyUserList(@RequestBody CompanyUserQuery query) {
Page page = new Page<>(query.getPageNum(), query.getPageSize());
List list = userService.getCompanyUserList(page,query.getCompanyId());
page.setRecords(list);
return R.ok(page);
}
@ApiOperation(value = "公司需求--管理人员获取二维码")
@GetMapping(value = "/getQrcode")
public R getQrcode(@RequestParam Long userId) {
Object o = redisTemplate.opsForValue().get("ADMIN_WX_IMG" + userId);
if(o!=null){
return R.ok(o.toString());
}
String accessToken = getAccessToken();
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
Map param = new HashMap<>();
param.put("page", "pages/home/home");
param.put("width", 430); //二维码尺寸
param.put("scene", "userId=" + userId); //二维码尺寸
param.put("env_version", "trial"); //二维码尺寸
HttpRequest post = HttpUtil.createPost(url);
post.body(JSON.toJSONString(param));
byte[] result = post.execute().bodyBytes();
// base64
String img = Base64.getEncoder().encodeToString(result);
// 后台用户的小程序码
redisTemplate.opsForValue().set("ADMIN_WX_IMG" + userId, img);
return R.ok(img);
}
@Value("${wx.url}")
private String ACCESS_TOKEN_URL;
@Value("${wx.conf.secretId}")
private String memberAppSecret;
@Value("${wx.conf.appId}")
private String wxAppId;
@Autowired
private RestTemplate restTemplate;
public String getAccessToken() {
Object o = redisTemplate.opsForValue().get("accessToken");
if(o!=null){
return o.toString();
}
String requestUrl = MessageFormat.format(ACCESS_TOKEN_URL,wxAppId,memberAppSecret);
String respBody = restTemplate.getForEntity(requestUrl, String.class).getBody();
JSONObject jsonObject = JSONObject.parseObject(respBody);
String string = jsonObject.getString("access_token");
redisTemplate.opsForValue().set("accessToken", string,5000, TimeUnit.SECONDS);
return string;
}
@ApiOperation(value = "新增股东管理",response = SysUser.class)
@Log(title = "公司信息-新增股东", businessType = BusinessType.INSERT)
@PostMapping("/system/user/add")
public R add(@RequestBody SysUser user)
{
user.setUserName(user.getUserName());
if (!userService.checkUserNameUnique(user))
{
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
}
else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
{
return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
}
user.setCreateBy(getUsername());
user.setPassword(SecurityUtils.encryptPassword("123456"));
// 随机10数数字
user.setCode(RandomUtil.randomNumbers(10));
userService.insertUser(user);
if(user.getCompanyId()!=null){
String accessToken = getAccessToken();
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
Map param = new HashMap<>();
param.put("page", "pages/home/home");
param.put("width", 430); //二维码尺寸
param.put("scene", "userId=" + user.getUserId()); //二维码尺寸
param.put("env_version", "trial"); //二维码尺寸
HttpRequest post = HttpUtil.createPost(url);
post.body(JSON.toJSONString(param));
byte[] result = post.execute().bodyBytes();
// base64
String img = Base64.getEncoder().encodeToString(result);
// 后台用户的小程序码
redisTemplate.opsForValue().set("ADMIN_WX_IMG" + user.getUserId(), img);
}
return R.ok();
}
@ApiOperation(value = "修改股东管理")
@Log(title = "公司信息-修改股东", businessType = BusinessType.UPDATE)
@PostMapping("/system/user/edit")
public R edit(@RequestBody SysUser user)
{
user.setUserName(user.getPhonenumber());
// userService.checkUserAllowed(user);
// userService.checkUserDataScope(user.getUserId());
if (!userService.checkUserNameUnique(user))
{
return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
}
else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
{
return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
}
user.setUpdateBy(getUsername());
if(StringUtils.isNotEmpty(user.getPassword())){
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
}
return R.ok(userService.updateUser(user));
}
@ApiOperation(value = "批量删除股东")
@Log(title = "公司信息-批量删除股东", businessType = BusinessType.DELETE)
@DeleteMapping("/system/user/deleteById/{ids}")
public AjaxResult remove(@PathVariable String ids)
{
String[] split = ids.split(",");
List userIds = new ArrayList<>();
for (String s : split) {
userIds.add(Long.valueOf(s));
}
if (userIds.contains(getUserId()))
{
return error("当前用户不能删除");
}
return AjaxResult.success(userService.deleteUserByIds(userIds));
}
}