| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package service
- import (
- "context"
- "encoding/csv"
- "fmt"
- "go-template/business/dto"
- "go-template/business/exception"
- "go-template/business/model"
- "go-template/business/util"
- "io"
- "gitea.ckfah.com/cjjy/gocommon/pkg/common"
- "gitea.ckfah.com/cjjy/gocommon/pkg/mq/rocketmq"
- "gitea.ckfah.com/cjjy/gocommon/pkg/net/engines"
- "github.com/google/uuid"
- "gitea.ckfah.com/cjjy/gocommon/pkg/cerror"
- )
- type reportService struct {
- }
- func NewReportService() *reportService {
- return new(reportService)
- }
- // 举报详情
- func (rs *reportService) ReportInfo(context context.Context, params *dto.ReportInfoParams) (*dto.ReportInfoResult, cerror.Cerror) {
- reportInfo, err := reportDao.GetById(context, params.Id)
- if err != nil {
- return nil, err
- }
- if reportInfo == nil {
- return nil, exception.ReportListError("举报详情为空")
- }
- cityInfo, err := cityService.CityInfo(context, &dto.CityInfoParams{
- CityId: reportInfo.CityID,
- })
- if err != nil {
- return nil, err
- }
- opInfo, err := factoryService.GetOpWorkerDetailById(context, reportInfo.OpWorkerID)
- if err != nil {
- return nil, err
- }
- return &dto.ReportInfoResult{Infos: []interface{}{cityInfo, reportInfo, opInfo}}, nil
- }
- func (rs *reportService) ReportList(context context.Context, params *dto.ReportListParams) (*dto.ReportListResult, cerror.Cerror) {
- page := params.GetPaginator()
- count, err := reportDao.GetCountByUserId(context, params.UserId)
- if err != nil {
- return nil, err
- }
- if count == 0 {
- return &dto.ReportListResult{
- Items: []model.ReportPeccancy{},
- PageResponse: page.GetPageResponse(count),
- }, nil
- }
- result, err := reportDao.GetByUserId(context, params.UserId, page)
- if err != nil {
- return nil, err
- }
- return &dto.ReportListResult{
- Items: result,
- PageResponse: page.GetPageResponse(count),
- }, nil
- }
- func (rs *reportService) SendMQ(ctx context.Context, params *dto.SendMQParams) (interface{}, cerror.Cerror) {
- if params.Topic == "" {
- params.Topic = "test_topic"
- }
- if params.Message == "" {
- params.Message = "hello, go-template"
- }
- if err := rocketmq.GetProducer().Send(ctx, params.Topic, []byte(params.Message)); err != nil {
- return nil, exception.DefaultError(err)
- }
- return map[string]string{"result": "发送成功"}, nil
- }
- func (rs *reportService) getDownLoadFileHeader(ctx context.Context, column int) []string {
- header := make([]string, 0, column)
- for x := 0; x < column; x++ {
- header = append(header, fmt.Sprintf("header-%d", x))
- }
- return header
- }
- func (rs *reportService) getDownLoadResult(ctx context.Context, row, column int) [][]string {
- generateList := func(length int) []string {
- list := make([]string, 0, length)
- for x := 0; x < length; x++ {
- list = append(list, uuid.New().String())
- }
- return list
- }
- list := make([][]string, row)
- for index := range list {
- list[index] = generateList(column)
- }
- return list
- }
- func (rs *reportService) DownLoadXlsxFile(ctx context.Context, writer engines.ResponseWriter, params *dto.DownLoadXlsxFileParams) cerror.Cerror {
- // 生成数据!
- list := rs.getDownLoadResult(ctx, params.Row, params.Column)
- // 生成header
- header := rs.getDownLoadFileHeader(ctx, params.Column)
- // 写excel
- excel := common.NewWriter360Excel()
- // 写sheet
- for x := 0; x < params.Sheet; x++ {
- // 写sheet
- if err := excel.WriteSheet(fmt.Sprintf("demo数据-%d", x), header, func(r common.Row) (hasNext bool) {
- if r.RowIndex() > len(list)-1 { // 如果当前写的index 超过了数组的index的最大值 就return false
- return false
- }
- row := list[r.RowIndex()]
- for _, elem := range row {
- r.Write(elem)
- }
- // 由于row_index是先写后加,所以当你写到最后一个的时候
- return true
- }); err != nil {
- return exception.DefaultError(err)
- }
- }
- // 先写响应头
- util.ResponseFileV2(writer, "输出文件.xlsx")
- // 后写body,顺序必须是这个
- if err := excel.FlushWrite(writer); err != nil {
- return exception.DefaultError(err)
- }
- return nil
- }
- func (rs *reportService) DownLoadCsvFile(ctx context.Context, writer engines.ResponseWriter, params *dto.DownLoadCsvFileParams) cerror.Cerror {
- // 生成数据!
- list := rs.getDownLoadResult(ctx, params.Row, params.Column)
- // 生成header
- header := rs.getDownLoadFileHeader(ctx, params.Column)
- // 先写响应头
- util.ResponseFileV2(writer, "输出文件.csv")
- // 再写csv (csv只能写一个sheet)
- csvFile := csv.NewWriter(writer)
- // 写header
- if err := csvFile.Write(header); err != nil {
- return exception.DefaultError(err)
- }
- // 写body
- if err := csvFile.WriteAll(list); err != nil {
- return exception.DefaultError(err)
- }
- // 最后记得flush一下,因为csv使用了buffer的原因
- csvFile.Flush()
- return nil
- }
- func (rs *reportService) UploadXlsxFile(ctx context.Context, file io.Reader, params *dto.UploadXlsxFileParams) (*dto.UploadXlsxFileResponse, cerror.Cerror) {
- excel, err := common.NewReader360Excel(file)
- if err != nil {
- return nil, exception.DefaultError(err)
- }
- // 读取sheet中的内容,第一行是header
- content, err := excel.ReadSheet(params.SheetName)
- if err != nil {
- return nil, exception.DefaultError(err)
- }
- // 为空返回数据
- if content == nil || len(content) == 0 {
- return &dto.UploadXlsxFileResponse{
- Header: []string{},
- }, nil
- }
- // todo 处理业务
- // 响应
- return &dto.UploadXlsxFileResponse{
- Rows: len(content),
- Columns: len(content[0]),
- Header: content[0],
- }, nil
- }
|