Browse Source

1.接口同步

yuanliang 1 year ago
parent
commit
8702d71bca

+ 108 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAccountRecordController.java

@@ -1,14 +1,29 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.tools.DownloadManager;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
+import com.yonge.cooleshow.biz.dal.entity.FileImportInfo;
+import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.service.ExcelAnalyseCoreService;
 import com.yonge.cooleshow.biz.dal.service.TenantAccountRecordService;
+import com.yonge.cooleshow.biz.dal.wrapper.FileImportInfoWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAccountRecordWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -16,14 +31,23 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
 @RestController
 @RequestMapping("${app-config.url.admin:}/tenantAccountRecord")
 @Api(value = "机构账户流水表", tags = "机构账户流水表")
 public class TenantAccountRecordController extends BaseController {
-
     @Autowired
     private TenantAccountRecordService tenantAccountRecordService;
 
+    @Autowired
+    private OssPluginContext ossPluginContext;
+
+    @Autowired
+    private ExcelAnalyseCoreService excelAnalyseCoreService;
     /**
      * 查询分页
      */
@@ -46,4 +70,87 @@ public class TenantAccountRecordController extends BaseController {
         return succeed(tenantAccountRecordPageInfo);
     }
 
+
+
+    /**
+     * 导出
+     */
+    @PostMapping("/export")
+    @ApiOperation(value = "机构流水", notes = "TenantAccountRecordQuery")
+    @PreAuthorize("@pcs.hasPermissions('tenantAccountRecord/export')")
+    public HttpResponseResult<TenantActivationCodeWrapper.ExportFile> export(@RequestBody TenantAccountRecordWrapper.TenantAccountRecordQuery query) {
+        query.setRows(-1);
+        query.setInOrOut(InOrOutEnum.IN.getCode());
+
+        IPage<TenantAccountRecordWrapper.TenantAccountRecord> pages = tenantAccountRecordService.selectPage(PageUtil.getPage(query), query);
+
+        // 构建数据
+        List<TenantAccountRecordWrapper.TenantAccountRecord> records = pages.getRecords();
+
+        if (CollectionUtils.isEmpty(records)) {
+            records = new ArrayList<>();
+        }
+
+        List<TenantAccountRecordWrapper.TenantAccountRecordExport> list = JSON.parseArray(JSON.toJSONString(records), TenantAccountRecordWrapper.TenantAccountRecordExport.class);
+
+        for (TenantAccountRecordWrapper.TenantAccountRecordExport tenantAccountRecord : list) {
+            tenantAccountRecord.setBizType(AccountBizTypeEnum.valueOf(tenantAccountRecord.getBizType()).getMsg());
+            tenantAccountRecord.setSettlement(PostStatusEnum.RECORDED.getCode().equals(tenantAccountRecord.getPostStatus())?"是":"否");
+        }
+
+        return succeed(generateExportExcelFile(list,TenantAccountRecordWrapper.TenantAccountRecordExport.class,"机构收入导出","机构收入导出"));
+    }
+
+
+
+    /**
+     * 导出
+     */
+    @PostMapping("/import")
+    @ApiOperation(value = "机构流水", notes = "TenantAccountRecordQuery")
+    @PreAuthorize("@pcs.hasPermissions('tenantAccountRecord/import')")
+    public HttpResponseResult<FileImportInfo> importFile(@RequestBody FileImportInfoWrapper.FileImport wrapper) {
+
+
+        // 读取数据
+        return HttpResponseResult.succeed(excelAnalyseCoreService.analyseReadExcelData(
+                JSON.parseObject(JSON.toJSONString(wrapper), FileImportInfoWrapper.FileImportInfo.class)));
+    }
+
+    private TenantActivationCodeWrapper.ExportFile generateExportExcelFile(List<?> orderExports, Class<?> clazz, String fileName, String sheetName) {
+
+        // OSS上传文件目录
+        String uploadOssPath = MessageFormat.format("excel-download/{0}", DateTime.now().toString("yyyy-MM"));
+
+        // 文件上传下载地址
+        String uploadPath = MessageFormat.format("{0}/{1}-{2}.xlsx", uploadOssPath, fileName, DateTime.now().toString("MMddHHmmss"));
+
+        // 本地文件地址
+        String localPath = DownloadManager.getInstance().path(uploadPath);
+
+        // 模板文件保存在springboot项目的resources/static下
+        // Resource resource = new ClassPathResource("static/预报名模板导出.xlsx");
+
+        EasyExcel
+                .write(localPath, clazz)
+                //.withTemplate(resource.getStream()) // 利用模板的输出流
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                .sheet(0, sheetName)
+                .doWrite(orderExports);
+
+        // 上传本地文件到OSS服务器
+        String downloadPath = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME)
+                .uploadFile(uploadOssPath, new File(localPath));
+
+        // 删除本地缓存文件
+        DownloadManager.getInstance().deleteOnExit(localPath);
+
+        // 学生统计下载
+        return TenantActivationCodeWrapper.ExportFile
+                .builder()
+                .fileName(MessageFormat.format("{0}.xlsx", fileName))
+                .downloadPath(downloadPath)
+                .build();
+    }
+
 }

+ 46 - 35
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java

@@ -1,29 +1,32 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.service.EmployeeService;
-import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
-import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
-import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.yonge.cooleshow.biz.dal.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindHistoryService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindHistoryWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.enums.UserLockFlag;
-import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Validated
@@ -33,38 +36,46 @@ import org.springframework.web.bind.annotation.RestController;
 public class TenantUnbindHistoryController extends BaseController{
 
     @Autowired
-    private TenantUnbindRecordService tenantUnbindRecordService;
+    private TenantUnbindHistoryService tenantUnbindHistoryService;
 
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
 
     @Autowired
-    private EmployeeService employeeService;
+    private TenantInfoService tenantInfoService;
 
-    @ApiOperation(value = "查询分页", notes = "机构解绑申请记录- 传入 TenantUnbindRecordVo.TenantUnbindRecordQuery")
-    @PreAuthorize("@pcs.hasPermissions('tenantUnbindRecord/page')")
+    @ApiOperation(value = "查询分页", notes = "机构解绑历史表- 传入 TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery")
     @PostMapping("/page")
-    public HttpResponseResult<PageInfo<TenantUnbindRecordWrapper.TenantUnbindRecord>>
-    page(@RequestBody TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
-        // 查询数据
-        IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> pages =
-                tenantUnbindRecordService.selectPage(QueryInfo.getPage(query), query);
-        return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
-    }
+    public R<PageInfo<TenantUnbindHistoryWrapper.TenantUnbindHistory>> page(@RequestBody TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query) {
 
-    @ApiOperation(value = "审核")
-    @PostMapping("/audit")
-    @PreAuthorize("@pcs.hasPermissions('tenantUnbindRecord/audit')")
-    public HttpResponseResult<Boolean> audit(@RequestBody TenantUnbindRecordWrapper.Audio audio) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("请登录");
-        }
-        EmployeeVo employeeVo = employeeService.detail(sysUserFeignService.queryUserInfo().getId());
-        if (employeeVo == null || UserLockFlag.LOCKED.equals(employeeVo.getLockFlag())) {
-            throw new BizException("权限不足");
+        IPage<TenantUnbindHistory> pages = tenantUnbindHistoryService.selectPage(QueryInfo.getPage(query), query);
+
+        List<TenantUnbindHistory> records = pages.getRecords();
+        if (records.isEmpty()) {
+            return R.from(QueryInfo.pageInfo(pages, new ArrayList<>()));
         }
-        tenantUnbindRecordService.tenantUserUnbindAudit(audio, sysUser.getId(),true);
-        return succeed();
+        List<Long> userIds =
+                pages.getRecords().stream().map(TenantUnbindHistory::getVerifyUserId).distinct()
+                        .collect(Collectors.toList());
+        Map<Long, SysUser> mapByIds = sysUserService.getMapByIds(userIds);
+
+        List<Long> tenantIds =
+                pages.getRecords().stream().map(TenantUnbindHistory::getTenantId).distinct()
+                        .collect(Collectors.toList());
+        Map<Long, TenantInfo> tenantInfoMap = tenantInfoService.getMapByIds(tenantIds);
+        List<TenantUnbindHistoryWrapper.TenantUnbindHistory> histories = records.stream().map(next -> {
+            TenantUnbindHistoryWrapper.TenantUnbindHistory tenantUnbindHistory =
+                    JSON.parseObject(JSON.toJSONString(next), TenantUnbindHistoryWrapper.TenantUnbindHistory.class);
+            SysUser orDefault = mapByIds.getOrDefault(next.getVerifyUserId(), new SysUser());
+            tenantUnbindHistory.setVerifyUserName(orDefault.getUsername());
+            if(tenantInfoMap.containsKey(next.getTenantId())){
+                TenantInfo tenantInfo = tenantInfoMap.get(next.getTenantId());
+                tenantUnbindHistory.setTenantUserName(tenantInfo.getUsername());
+                tenantUnbindHistory.setTenantPhone(tenantInfo.getPhone());
+            }
+            return tenantUnbindHistory;
+
+        }).collect(Collectors.toList());
+        return R.from(QueryInfo.pageInfo(pages, histories));
     }
 }

+ 47 - 23
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -16,9 +16,11 @@ import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.tenant.vo.StudentVo;
@@ -36,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -67,6 +70,9 @@ public class OpenStudentController extends BaseController {
     @Autowired
     private ImGroupMemberService imGroupMemberService;
 
+    @Autowired
+    private SysConfigService sysConfigService;
+
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student,换绑时按照返回错误码5004判断,是否需要换绑,updateTenant=true表示换绑")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
@@ -103,37 +109,54 @@ public class OpenStudentController extends BaseController {
                 if (one.getTenantId().equals(-1L)) {
                     throw new BizException("该手机号已经注册为平台学生");
                 }
-                if (one.getTenantId().equals(tenantId)) {
-                    throw new BizException("已经注册当前机构,请勿重复注册");
-                }
+//                if (one.getTenantId().equals(tenantId)) {
+//                    //已经注册当前机构,请勿重复注册
+//                    throw new BizException(5004, tenantInfo.getName());
+//                }
                 // 转到其他机构
-                if ((student.getUpdateTenant() == null ||
-                        !student.getUpdateTenant())) {
-                    throw new BizException(5004, "该手机号已经注册为其他平台学生");
-                }
-                // 退群
-                List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
-                        .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
-                        .eq(ImGroupMember::getIsAdmin, false)
-                        .eq(ImGroupMember::getUserId, one.getUserId())
-                        .list();
-                List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId)
-                        .distinct().collect(Collectors.toList());
-                groupIdList.forEach(groupId -> {
-                    try {
-                        imGroupService.quit(groupId, one.getUserId(), ClientEnum.STUDENT);
-                    } catch (Exception e) {
-                        log.error("学生注册,切换机构退群失败:{}", e.getMessage());
+                if ((!Objects.equals(student.getTenantId(), one.getTenantId()))) {
+                    if(student.getUpdateTenant() == null || Boolean.FALSE.equals(student.getUpdateTenant())){
+                        TenantInfo oldTenant = tenantInfoService.getById(one.getTenantId());
+                        throw new BizException(5004, oldTenant.getName());
+                    } else {
+                        // 退群
+                        List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
+                                .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
+                                .eq(ImGroupMember::getIsAdmin, false)
+                                .eq(ImGroupMember::getUserId, one.getUserId())
+                                .list();
+                        List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId)
+                                .distinct().collect(Collectors.toList());
+                        groupIdList.forEach(groupId -> {
+                            try {
+                                imGroupService.quit(groupId, one.getUserId(), ClientEnum.STUDENT);
+                            } catch (Exception e) {
+                                log.error("学生注册,切换机构退群失败:{}", e.getMessage());
+                            }
+                        });
                     }
-                });
+                }
+
+                // 更新头像
+                if (StringUtils.isEmpty(student.getAvatar())) {
+                    student.setAvatar(one.getAvatar());
+                }
             }
             student.setId(studentId);
         }
 
+        // 配置头像
+        String avatar = student.getAvatar();
+        if (StringUtils.isEmpty(avatar)) {
+            if (StringUtils.isEmpty(avatar)) {
+                avatar = sysConfigService.findConfigValue(SysConfigConstant.TENANT_STUDENT_AVATAR);
+                student.setAvatar(avatar);
+            }
+            student.setAvatar(avatar);
+        }
 
-        StudentWrapper.Student studentInfo = JSON.parseObject(JSON.toJSONString(student), StudentWrapper.Student.class);
+        Student studentInfo = JSON.parseObject(JSON.toJSONString(student), Student.class);
         studentInfo.setTenantId(tenantInfo.getId());
-        studentService.save(studentInfo);
 
         // 加好友
         if (student.getId() == null) {
@@ -144,6 +167,7 @@ public class OpenStudentController extends BaseController {
             teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
                     new HashSet<>(ImmutableList.of(sysUser.getId()))));
         }
+        studentService.saveOrUpdate(studentInfo);
         return succeed();
     }
 }