Jelajahi Sumber

曲目导入

liujunchi 3 tahun lalu
induk
melakukan
eeedb231aa

+ 30 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -5,6 +5,8 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
+import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
@@ -19,13 +21,19 @@ import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.utils.easyexcel.ErrMsg;
+import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
+import com.yonge.toolset.utils.easyexcel.ExcelException;
+import com.yonge.toolset.utils.easyexcel.ExcelUtils;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 import java.util.Date;
@@ -228,4 +236,26 @@ public class MusicSheetController extends BaseController {
         }
         return status(musicSheetService.sendBuyMessage(param.getTeacherId(),param.getStudentId(),param.getMusicSheetId()));
     }
+    /**
+     * 导入
+     */
+    @PostMapping("/importExcel")
+    @ApiOperation(value = "导入", notes = "传入file")
+    public HttpResponseResult<List<ErrMsg>> importExcel(@RequestParam("file") MultipartFile file) {
+        if (null == file) {
+            return HttpResponseResult.failed("请上传文件");
+        }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        try {
+            ExcelDataReader<MusicSheetExport> reader = ExcelUtils.getReader(MusicSheetExport.class, file);
+            musicSheetService.importExcel(reader.getDataList(), user.getId());
+            return HttpResponseResult.succeed();
+        } catch (ExcelException e) {
+            return HttpResponseResult.failed(BizHttpStatus.IMPORT.getCode(), e.getErrMsgList(), BizHttpStatus.IMPORT.getMsg());
+        }
+    }
+
 }

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/AudioTypeConverter.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+public class AudioTypeConverter implements Converter<AudioTypeEnum> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return AudioTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public AudioTypeEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            return AudioTypeEnum.valueOf(cellData.getStringValue().trim());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CellData convertToExcelData(AudioTypeEnum audioTypeEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (null != audioTypeEnum) {
+            return new CellData(audioTypeEnum.getCode());
+        }
+        return new CellData("异常数据");
+    }
+}

+ 45 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/ChargeTypeConverter.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+public class ChargeTypeConverter implements Converter<ChargeTypeEnum> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return AudioTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public ChargeTypeEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+        try {
+            return ChargeTypeEnum.valueOf(cellData.getStringValue().trim());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CellData convertToExcelData(ChargeTypeEnum yesOrNoEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (null != yesOrNoEnum) {
+            return new CellData(yesOrNoEnum.getCode());
+        }
+        return new CellData("异常数据");
+    }
+}

+ 44 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/YesOrNoConverter.java

@@ -0,0 +1,44 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+public class YesOrNoConverter implements Converter<YesOrNoEnum> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return AudioTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public YesOrNoEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            return YesOrNoEnum.valueOf(cellData.getStringValue().trim());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CellData convertToExcelData(YesOrNoEnum yesOrNoEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (null != yesOrNoEnum) {
+            return new CellData(yesOrNoEnum.getCode());
+        }
+        return new CellData("异常数据");
+    }
+}

+ 172 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetExport.java

@@ -0,0 +1,172 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yonge.cooleshow.biz.dal.convert.AudioTypeConverter;
+import com.yonge.cooleshow.biz.dal.convert.ChargeTypeConverter;
+import com.yonge.cooleshow.biz.dal.convert.YesOrNoConverter;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+@ApiModel("曲目导入格式")
+public class MusicSheetExport {
+
+    @ExcelProperty(value = "曲目名称", index = 1)
+    private String musicSheetName;  //曲谱名称
+
+
+    @ApiModelProperty(value = "曲目音频类型 MP3:mp3, MIDI:midi,")
+    @ExcelProperty(value = "播放类型",converter = AudioTypeConverter.class)
+    private AudioTypeEnum audioType;
+
+
+    @ApiModelProperty(value = "mp3类型 MP3:mp3, MP3_METRONOME:MP3_METRONOME,")
+    @ExcelProperty(value = "是否含节拍器", index = 0)
+    private AudioTypeEnum mp3Type;
+
+
+
+    @ApiModelProperty(value = "XML文件存储路径")
+    @ExcelProperty(value = "XML文件地址", index = 0)
+    private String xmlFileUrl;  //XML文件存储路径
+
+
+    @ApiModelProperty(value = "midi路径")
+    @ExcelProperty(value = "伴奏文件地址", index = 0)
+    private String midiUrl;  //XML文件存储路径
+
+
+
+    @ApiModelProperty(value = "曲谱标签(多个标签用逗号分隔)")
+    @ExcelProperty(value = "曲目标签", index = 0)
+    private String musicTags;  //曲谱标签(多个标签用逗号分隔)
+
+
+    @ExcelProperty(value = "可用声部", index = 0)
+    private String musicSubjects;  //曲谱声部(适用的乐器,可能是多个,用逗号分隔)
+
+    @ExcelProperty(value = "音乐人", index = 0)
+    private String composer;  //作曲人
+
+
+    @ExcelProperty(value = "指法是否展示",converter = YesOrNoConverter.class)
+    @ApiModelProperty(value = "是否展示指法(0:否;1:是)")
+    private YesOrNoEnum showFingering;  //是否展示指法(0:否;1:是)
+
+    @ExcelProperty(value = "是否评测",converter = YesOrNoConverter.class)
+    @ApiModelProperty(value = "是否可以评测(0:否;1:是)")
+    private YesOrNoEnum canEvaluate;  //是否可以评测(0:否;1:是)
+
+    @ExcelProperty(value = "收费方式",converter = ChargeTypeConverter.class)
+    @ApiModelProperty(value = "收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+    private ChargeTypeEnum chargeType;  //收费类型(0:免费;1:会员;2:单曲收费)
+
+
+    @ExcelProperty(value = "MP3原音", index = 0)
+    @ApiModelProperty(value = "MP3原声音频文件URL")
+    private String audioFileUrls;  //MP3原声音频文件URL
+
+    public String getMusicSheetName() {
+        return musicSheetName;
+    }
+
+    public void setMusicSheetName(String musicSheetName) {
+        this.musicSheetName = musicSheetName;
+    }
+
+    public AudioTypeEnum getAudioType() {
+        return audioType;
+    }
+
+    public void setAudioType(AudioTypeEnum audioType) {
+        this.audioType = audioType;
+    }
+
+    public AudioTypeEnum getMp3Type() {
+        return mp3Type;
+    }
+
+    public void setMp3Type(AudioTypeEnum mp3Type) {
+        this.mp3Type = mp3Type;
+    }
+
+    public String getXmlFileUrl() {
+        return xmlFileUrl;
+    }
+
+    public void setXmlFileUrl(String xmlFileUrl) {
+        this.xmlFileUrl = xmlFileUrl;
+    }
+
+    public String getMidiUrl() {
+        return midiUrl;
+    }
+
+    public void setMidiUrl(String midiUrl) {
+        this.midiUrl = midiUrl;
+    }
+
+    public String getMusicTags() {
+        return musicTags;
+    }
+
+    public void setMusicTags(String musicTags) {
+        this.musicTags = musicTags;
+    }
+
+    public String getMusicSubjects() {
+        return musicSubjects;
+    }
+
+    public void setMusicSubjects(String musicSubjects) {
+        this.musicSubjects = musicSubjects;
+    }
+
+    public String getComposer() {
+        return composer;
+    }
+
+    public void setComposer(String composer) {
+        this.composer = composer;
+    }
+
+    public YesOrNoEnum getShowFingering() {
+        return showFingering;
+    }
+
+    public void setShowFingering(YesOrNoEnum showFingering) {
+        this.showFingering = showFingering;
+    }
+
+    public YesOrNoEnum getCanEvaluate() {
+        return canEvaluate;
+    }
+
+    public void setCanEvaluate(YesOrNoEnum canEvaluate) {
+        this.canEvaluate = canEvaluate;
+    }
+
+    public ChargeTypeEnum getChargeType() {
+        return chargeType;
+    }
+
+    public void setChargeType(ChargeTypeEnum chargeType) {
+        this.chargeType = chargeType;
+    }
+
+    public String getAudioFileUrls() {
+        return audioFileUrls;
+    }
+
+    public void setAudioFileUrls(String audioFileUrls) {
+        this.audioFileUrls = audioFileUrls;
+    }
+}

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
@@ -12,6 +13,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
+
+import java.util.List;
 
 /**
  * MusicSheetService服务类
@@ -223,4 +227,11 @@ public interface MusicSheetService extends IService<MusicSheet> {
      */
     HomeMusicSheetVo getMusicSheetHome();
 
+    /**
+     * 导入曲目
+     *
+     * @param dataList 导入信息
+     * @param userId 导入人id
+     */
+    void importExcel(List<ExcelDataReaderProperty<MusicSheetExport>> dataList, Long userId);
 }

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetPayDto;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
@@ -23,6 +24,8 @@ import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.easyexcel.ErrMsg;
+import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -579,6 +582,26 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         return homeMusicSheetVo;
     }
 
+    @Override
+    public void importExcel(List<ExcelDataReaderProperty<MusicSheetExport>> dataList, Long userId) {
+
+        List<ErrMsg> errMsgList = new ArrayList<>();
+        dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
+        List<MusicSheetDto> userWithdrawalList = new ArrayList<>();
+
+        for (ExcelDataReaderProperty<MusicSheetExport> readerProperty : dataList) {
+            String errMsg = readerProperty.getErrorMessage();
+            if (!StringUtil.isEmpty(errMsg)) {
+                errMsgList.add(new ErrMsg(readerProperty.getRowIndex(), errMsg));
+                continue;
+            }
+            MusicSheetExport sheetExport = readerProperty.getClazz();
+            // sheetExport
+
+        }
+
+    }
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                        .map(sysUserFeignService::queryUserById)