package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.FilePictureRenderData;
import com.yuanchu.mom.dto.PersonPostAuthorizationRecordDto;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.PersonPostAuthorizationRecord;
import com.yuanchu.mom.mapper.PersonPostAuthorizationRecordMapper;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.PersonPostAuthorizationRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.HashMap;
/**
*
* 任职授权记录 服务实现类
*
*
* @author
* @since 2024-10-09 10:48:17
*/
@Service
public class PersonPostAuthorizationRecordServiceImpl extends ServiceImpl implements PersonPostAuthorizationRecordService {
@Resource
UserMapper userMapper;
@Value("${file.path}")
private String imgUrl;
@Override
public IPage personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName) {
return baseMapper.personPostAuthorizationRecordPage(page, departLimsId, userId, userName);
}
@Override
public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response) {
PersonPostAuthorizationRecord personPostAuthorizationRecord = baseMapper.selectById(id);
//姓名
User user = userMapper.selectById(personPostAuthorizationRecord.getUserId());
String name = user.getName();
//姓名英文
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
StringBuilder pinyinBuilder = new StringBuilder();
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
// 判断是否是汉字
if (Character.toString(c).matches("[\\u4E00-\\u9FFF]")) {
// 获取汉字的拼音数组
String[] pinyinArray = new String[0];
try {
pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
}
if (pinyinArray!= null && pinyinArray.length > 0) {
pinyinBuilder.append(pinyinArray[0]);
}
} else {
pinyinBuilder.append(c);
}
}
String nameEn = pinyinBuilder.toString();
//理论知识考试成绩
String num1=personPostAuthorizationRecord.getNum1();
//操作技能考试成绩
String num2=personPostAuthorizationRecord.getNum2();
//证书编号
String code = personPostAuthorizationRecord.getCertificateNumber();
//发证时间
LocalDateTime createTime = personPostAuthorizationRecord.getCreateTime();
String year = createTime.getYear() + "";
String mon = createTime.getMonth().getValue() + "";
String day = createTime.getDayOfMonth() + "";
//个人照片
if (ObjectUtils.isEmpty(user.getPictureUrl())) {
throw new ErrorException(name+"的个人照片没有上传");
}
String pictureUrl = user.getPictureUrl();
InputStream inputStream = this.getClass().getResourceAsStream("/static/credentials-deal.docx");
ConfigureBuilder builder = Configure.builder();
builder.useSpringEL(true);
XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
new HashMap() {{
put("name", name);
put("nameEn", nameEn);
put("num1", num1);
put("num2", num2);
put("code", code);
put("year", year);
put("mon", mon);
put("day", day);
put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + pictureUrl));
}});
try {
response.setContentType("application/msword");
String fileName = URLEncoder.encode(
name+"的岗位职业资格正式", "UTF-8");
response.setHeader("Content-disposition",
"attachment;filename=" + fileName + ".docx");
OutputStream os = response.getOutputStream();
template.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("导出失败");
}
}
}