package com.ruoyi.web.controller.api;
|
|
|
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.crypto.SecureUtil;
|
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpResponse;
|
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.basic.PageInfo;
|
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.core.exception.ServiceException;
|
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.UserStatus;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.WebUtils;
|
import com.ruoyi.system.export.BigGiftPackageImport;
|
import com.ruoyi.system.export.SysUserImport;
|
import com.ruoyi.system.model.TBigGiftPackage;
|
import com.ruoyi.system.model.TCompany;
|
import com.ruoyi.system.model.TPhysicalGoods;
|
import com.ruoyi.system.query.*;
|
import com.ruoyi.system.service.*;
|
import com.ruoyi.system.vo.ProfitPageListVo;
|
import com.ruoyi.system.vo.PromotionPageListVo;
|
import com.ruoyi.system.vo.SysUserVO;
|
import com.ruoyi.web.controller.system.SysUserController;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import org.apache.poi.ss.usermodel.Workbook;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.validation.Valid;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.text.MessageFormat;
|
import java.util.*;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* <p>
|
* 公司 前端控制器
|
* </p>
|
*
|
* @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;
|
private final TAppUserService appUserService ;
|
private final TBigGiftPackageOrderService bigGiftPackageOrderService;
|
|
|
public TCompanyController(TCompanyService companyService, ISysUserService userService, RedisTemplate redisTemplate, TAppUserService appUserService, TBigGiftPackageOrderService bigGiftPackageOrderService) {
|
this.companyService = companyService;
|
this.userService = userService;
|
this.redisTemplate = redisTemplate;
|
this.appUserService = appUserService;
|
this.bigGiftPackageOrderService = bigGiftPackageOrderService;
|
}
|
|
@ApiOperation(value = "公司分页列表")
|
@PostMapping(value = "/pageList")
|
public R<Page<TCompany>> pageList(@RequestBody TCompanyQuery query) {
|
Page<TCompany> page = new Page<>(query.getPageNum(), query.getPageSize());
|
LambdaQueryWrapper<TCompany> 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<TCompany> pageInfo = companyService.page(page, wrapper);
|
return R.ok(pageInfo);
|
}
|
|
|
@ApiOperation(value = "公司详情")
|
@PostMapping(value = "/detail/{id}")
|
public R<TCompany> 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<String> 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(2l);
|
if (!userService.checkUserNameUnique(user)) {
|
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
|
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
|
return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
|
}else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkCodeUnique(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<String> 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<String> 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<Page<SysUser>> getCompanyUserList(@RequestBody CompanyUserQuery query) {
|
Page<SysUser> page = new Page<>(query.getPageNum(), query.getPageSize());
|
List<SysUser> list = userService.getCompanyUserList(page,query.getCompanyId());
|
page.setRecords(list);
|
return R.ok(page);
|
}
|
|
|
@ApiOperation(value = "公司需求--管理人员获取二维码")
|
@GetMapping(value = "/getQrcode")
|
public R<String> getQrcode(@RequestParam Long userId) {
|
SysUser sysUser = userService.selectUserById(userId);
|
Object o = redisTemplate.opsForValue().get("ADMIN_WX_IMG" + sysUser.getUserId());
|
if(o!=null){
|
return R.ok(o.toString());
|
}
|
String accessToken = getAccessToken();
|
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
|
Map<String, Object> param = new HashMap<>();
|
param.put("page", "pages/home/home");
|
param.put("width", 430); //二维码尺寸
|
param.put("scene", "code=" + sysUser.getCode()+"&type=1"); //二维码尺寸
|
param.put("env_version", "trial"); //二维码尺寸
|
param.put("check_path", false); //二维码尺寸
|
HttpRequest post = HttpUtil.createPost(url);
|
post.body(JSON.toJSONString(param));
|
HttpResponse execute = post.execute();
|
byte[] result =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<String> 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() + "'失败,手机号码已存在");
|
}
|
else if (StringUtils.isNotEmpty(user.getCode()) && !userService.checkCodeUnique(user))
|
{
|
return R.fail("新增用户'" + user.getUserName() + "'失败,推广号已存在");
|
}
|
user.setCreateBy(getUsername());
|
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
|
|
user.setRoleType(3);
|
user.setRoleId(1l);
|
// 随机10数数字
|
userService.insertUser(user);
|
if(user.getCompanyId()!=null){
|
String accessToken = getAccessToken();
|
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
|
Map<String, Object> param = new HashMap<>();
|
param.put("page", "pages/home/home");
|
param.put("width", 430); //二维码尺寸
|
param.put("scene", "code=" + user.getCode()+"&type=1"); //二维码尺寸
|
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()));
|
}
|
// 移除之前的二维码
|
redisTemplate.delete("ADMIN_WX_IMG" + user.getUserId());
|
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<Long> userIds = new ArrayList<>();
|
for (String s : split) {
|
userIds.add(Long.valueOf(s));
|
}
|
if (userIds.contains(getUserId()))
|
{
|
return error("当前用户不能删除");
|
}
|
return AjaxResult.success(userService.deleteUserByIds(userIds));
|
}
|
|
|
|
@Log(title = "股东-导入", businessType = BusinessType.IMPORT)
|
@ApiOperation(value = "股东-导入")
|
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
@PostMapping("/import")
|
public R<String> importInfo(@RequestPart("file") MultipartFile file, @RequestParam Integer companyId) {
|
List<SysUserImport> imports = new ArrayList<>();
|
ImportParams params = new ImportParams();
|
params.setHeadRows(1); //表头行数
|
InputStream inputStream = null;
|
try {
|
inputStream = file.getInputStream();
|
imports = ExcelImportUtil.importExcel(inputStream,
|
SysUserImport.class, params);
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new ServiceException("股东导入失败!");
|
} finally {
|
try {
|
inputStream.close();
|
} catch (IOException e) {
|
throw new ServiceException(e.getMessage());
|
}
|
}
|
if (CollectionUtils.isEmpty(imports)) {
|
throw new ServiceException("股东数据为空!");
|
}
|
cn.hutool.json.JSONObject result = new cn.hutool.json.JSONObject();
|
int i = 1;
|
for (SysUserImport sysUserImport : imports) {
|
if (!org.springframework.util.StringUtils.hasLength(sysUserImport.getUserName())){
|
result.append("第"+i+"行:[", "人员名称"+"]不能为空");
|
continue;
|
}
|
if (!org.springframework.util.StringUtils.hasLength(sysUserImport.getCode())){
|
result.append("第"+i+"行:[", "推广号"+"]不能为空");
|
continue;
|
}
|
if (!org.springframework.util.StringUtils.hasLength(sysUserImport.getPhone())){
|
result.append("第"+i+"行:[", "联系电话"+"]不能为空");
|
continue;
|
}
|
if (!org.springframework.util.StringUtils.hasLength(sysUserImport.getAccount())){
|
result.append("第"+i+"行:[", "登录账号"+"]不能为空");
|
continue;
|
}
|
if (!org.springframework.util.StringUtils.hasLength(sysUserImport.getPassword())){
|
result.append("第"+i+"行:[", "初始密码"+"]不能为空");
|
continue;
|
}
|
SysUser sysUser = new SysUser();
|
sysUser.setUserName(sysUserImport.getAccount());
|
if(!userService.checkUserNameUnique(sysUser)){
|
result.append("第"+i+"行:[", "登录账号"+"]已存在");
|
continue;
|
}
|
sysUser.setNickName(sysUserImport.getUserName());
|
sysUser.setPhonenumber(sysUserImport.getPhone());
|
sysUser.setPassword(SecurityUtils.encryptPassword(sysUserImport.getPassword()));
|
sysUser.setCompanyId(companyId);
|
sysUser.setRemark(sysUserImport.getRemark());
|
sysUser.setCode(sysUserImport.getCode());
|
if(!userService.checkCodeUnique(sysUser)){
|
result.append("第"+i+"行:[", "推广号"+"]已存在");
|
continue;
|
}
|
|
|
sysUser.setCreateBy(getUsername());
|
sysUser.setRoleType(3);
|
sysUser.setRoleId(2L);
|
// sysUsers.add(sysUser);
|
userService.insertUser(sysUser);
|
i++;
|
}
|
|
if(!result.isEmpty()){
|
return R.fail(result.toString());
|
}
|
return R.ok();
|
}
|
|
|
|
@ApiOperation(value = "推广记录")
|
@PostMapping("/promotionPageList")
|
public R<Page<PromotionPageListVo>> promotionPageList(@RequestBody @Valid PromotionPageListQuery query) {
|
Page<PromotionPageListVo> page = new Page<>(query.getPageNum(), query.getPageSize());
|
List<PromotionPageListVo> list = appUserService.promotionPageList(page,query);
|
page.setRecords(list);
|
return R.ok(page);
|
}
|
|
|
|
@ApiOperation(value = "推广记录导出")
|
@PostMapping(value = "/export")
|
@Log(title = "推广记录-导出", businessType = BusinessType.EXPORT)
|
public void export(@RequestBody @Valid PromotionPageListQuery query){
|
|
List<PromotionPageListVo> list = appUserService.promotionPageListExport(query);
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), PromotionPageListVo.class, list);
|
HttpServletResponse response = WebUtils.response();
|
assert response != null;
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("utf-8");
|
ServletOutputStream outputStream = null;
|
try {
|
String fileName = URLEncoder.encode("推广记录导出信息.xls", "utf-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
response.setHeader("Pragma", "no-cache");
|
response.setHeader("Cache-Control", "no-cache");
|
outputStream = response.getOutputStream();
|
workbook.write(outputStream);
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
outputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
|
@ApiOperation(value = "收益明细")
|
@PostMapping("/profitPageList")
|
public R<Page<ProfitPageListVo>> profitPageList(@RequestBody @Valid ProfitPageListQuery query) {
|
Page<ProfitPageListVo> page = new Page<>(query.getPageNum(), query.getPageSize());
|
List<ProfitPageListVo> list = bigGiftPackageOrderService.profitPageList(page,query);
|
|
page.setRecords(list);
|
return R.ok(page);
|
}
|
|
|
@ApiOperation(value = "收益明细导出")
|
@PostMapping(value = "/exportProfit")
|
@Log(title = "收益明细-导出", businessType = BusinessType.EXPORT)
|
public void exportProfit(@RequestBody @Valid ProfitPageListQuery query){
|
|
List<ProfitPageListVo> list = bigGiftPackageOrderService.profitPageListExport(query);
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ProfitPageListVo.class, list);
|
HttpServletResponse response = WebUtils.response();
|
assert response != null;
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("utf-8");
|
ServletOutputStream outputStream = null;
|
try {
|
String fileName = URLEncoder.encode("收益明细导出信息.xls", "utf-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
response.setHeader("Pragma", "no-cache");
|
response.setHeader("Cache-Control", "no-cache");
|
outputStream = response.getOutputStream();
|
workbook.write(outputStream);
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
outputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
|
}
|