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; /** *

* 公司 前端控制器 *

* * @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> 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() + "'失败,手机号码已存在"); }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 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) { 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 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 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 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 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 importInfo(@RequestPart("file") MultipartFile file, @RequestParam Integer companyId) { List 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(1L); // sysUsers.add(sysUser); userService.insertUser(sysUser); i++; } if(!result.isEmpty()){ return R.fail(result.toString()); } return R.ok(); } @ApiOperation(value = "推广记录") @PostMapping("/promotionPageList") public R> promotionPageList(@RequestBody @Valid PromotionPageListQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); List 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 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> profitPageList(@RequestBody @Valid ProfitPageListQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); List 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 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(); } } } }