Compare commits

..

2 Commits
main ... master

Author SHA1 Message Date
遥望-倪浩天 2f6cb37169 上传图片注明位置 2024-07-13 10:58:54 +08:00
遥望-倪浩天 0e9e4a721e 游客提交数据 2024-07-12 17:44:06 +08:00
29 changed files with 154 additions and 530 deletions

View File

@ -49,7 +49,7 @@ public interface CommonConstant {
/**
* 对接TB模块的名称
*/
String KN_VORDM_MODULE_NAME = "biz-vordm";
String KN_VORDM_MODULE_NAME = "biz-vordm-glj";
/**
* 系统管理模块 application name

View File

@ -228,9 +228,7 @@ public class DisasterInfo implements Serializable {
private String email;
//分数
@TableField(exist = false)
private Integer fraction;
//申请数量
private Integer applyForCount;
}

View File

@ -9,7 +9,6 @@ import java.util.Date;
import java.util.List;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 其他上传的实体数据
@ -116,7 +115,7 @@ public class EntityDataAll implements Serializable {
private Integer isDeleted;
/**
* 是否发布0未发布/1已发布w
* 是否发布0未发布/1已发布
*/
private Integer isPublish;
@ -163,12 +162,12 @@ public class EntityDataAll implements Serializable {
/**
* 云层覆盖量
*/
private Double cloudCover;
private Integer cloudCover;
/**
* 生产时间
*/
private String productTime;
private Date productTime;
/**
* 产品波段树
@ -290,11 +289,6 @@ public class EntityDataAll implements Serializable {
*/
private Integer isAdministration;
/**
* 位置
*/
private String location;
/**
* 查询枚举
*/
@ -322,13 +316,11 @@ public class EntityDataAll implements Serializable {
/**
* 用户邮件
*/
@TableField(exist = false)
private String email;
/**
* 用户组织机构
*/
@TableField(exist = false)
private String organization;
/**
@ -340,7 +332,6 @@ public class EntityDataAll implements Serializable {
/**
* 职业
*/
@TableField(exist = false)
private String occupation;
/**
@ -364,9 +355,28 @@ public class EntityDataAll implements Serializable {
/**
* 国家
*/
@TableField(exist = false)
private String country;
/**
* 真实姓名
*/
private String realname;
/**
* 学位
*/
private String education;
/**
* 自我介绍
*/
private String introduction;
/**
* 自我介绍
*/
private String location;
@TableField(exist = false)
private static final long serialVersionUID = 1L;

View File

@ -41,19 +41,53 @@ public class GuestApplyDisasterRef implements Serializable {
*/
private Long adminId;
/**
* 用户邮件
*/
@TableField(exist = false)
private String userName;
/**
* 用户邮件
*/
@TableField(exist = false)
private String userEmail;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
GuestApplyDisasterRef other = (GuestApplyDisasterRef) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getDisasterId() == null ? other.getDisasterId() == null : this.getDisasterId().equals(other.getDisasterId()))
&& (this.getUserStatus() == null ? other.getUserStatus() == null : this.getUserStatus().equals(other.getUserStatus()))
&& (this.getApplyTime() == null ? other.getApplyTime() == null : this.getApplyTime().equals(other.getApplyTime()))
&& (this.getAdminId() == null ? other.getAdminId() == null : this.getAdminId().equals(other.getAdminId()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getDisasterId() == null) ? 0 : getDisasterId().hashCode());
result = prime * result + ((getUserStatus() == null) ? 0 : getUserStatus().hashCode());
result = prime * result + ((getApplyTime() == null) ? 0 : getApplyTime().hashCode());
result = prime * result + ((getAdminId() == null) ? 0 : getAdminId().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", disasterId=").append(disasterId);
sb.append(", userStatus=").append(userStatus);
sb.append(", applyTime=").append(applyTime);
sb.append(", adminId=").append(adminId);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

View File

@ -57,10 +57,6 @@ public class Install implements Serializable {
private Integer status;
/**
* 发生时间
*/
private String happenTime;
/**
* 名称_查询

View File

@ -394,16 +394,17 @@ public class DisasterInfoController {
LambdaQueryWrapper<GuestInfo> guestInfoQw = new LambdaQueryWrapper<>();
guestInfoQw.eq(GuestInfo::getId, one.getSponsorId());
GuestInfo guestInfoNew = guestInfoService.getOne(guestInfoQw);
if (guestInfoNew == null) {
LambdaQueryWrapper<Administrator> administratorQw = new LambdaQueryWrapper<>();
administratorQw.eq(Administrator::getId, one.getSponsorId());
Administrator administrator = administratorService.getOne(administratorQw);
guestInfo.setId(administrator.getId());
guestInfo.setEmail(administrator.getEmail());
Integer fractionUser = administrator.getFraction();
administrator.setFraction(fractionUser + 1);
administratorService.updateById(administrator);
}else {
guestInfo.setId(guestInfoNew.getId());
guestInfo.setEmail(guestInfoNew.getEmail());
}
@ -427,28 +428,28 @@ public class DisasterInfoController {
//获取所有管理员信息
List<UserVo> allUserEmail = disasterInfoService.getAllUserEmail();
List<String> userEmails = new ArrayList<>();
// allUserEmail.stream().forEach(userVo -> {
// //发送信息
allUserEmail.stream().forEach(userVo -> {
//发送信息
// if (userVo.getEmail() != null) {
// userEmails.add(userVo.getEmail());
// }
//// 获取灾害详情
//
// email.setTos(new String[]{userVo.getEmail()});
//
// try {
// emailService.sendMimeMessage(email);
// } catch (Exception e) {
// userEmails.add(userVo.getEmail());
// }
// });
// 获取灾害详情
email.setTos(new String[]{userVo.getEmail()});
try {
emailService.sendMimeMessage(email);
} catch (Exception e) {
userEmails.add(userVo.getEmail());
}
});
Email emailNewUser = new Email();
emailNewUser.setTos(new String[]{guestInfo.getEmail()});
emailNewUser.setSubject("Your disaster response application has been approved!");
emailNewUser.setText("Your disaster response application has been approved!");
try {
emailService.sendMimeMessage(emailNewUser);
emailService.sendMimeMessage(email);
} catch (Exception e) {
return R.fail("Sending failed, please check if the email is correct!");
}
@ -781,6 +782,7 @@ public class DisasterInfoController {
}
byId.setFraction(fractionUserNew);
administratorService.updateById(byId);
}else {
userEmail = disasterInfo.getEmail();
}
@ -854,74 +856,4 @@ public class DisasterInfoController {
return R.data(disasterInfoService.getUserDisasterInfoListNew(Condition.getPage(query), params.get("userId"),params.get("roleId")));
}
//home页面 受影响国家统计
@GetMapping("/getAffectedCountryCount")
public R<Integer> getAffectedCountryCount(@RequestParam Map<String, String> params) {
String dateType = String.valueOf(params.get("dateType"));
if (StringUtils.isNotBlank(dateType) && !"4".equals(dateType) && !"null".equals(dateType)) {
LocalDate date = LocalDate.now();
//如果有时间类型
switch (dateType) {
case "1":
//Latest week 上一周
date = LocalDate.now().minusWeeks(1);
params.put("startTime",date.toString());
break;
case "2":
//Latest month 上一个月
date = LocalDate.now().minusMonths(1);
params.put("startTime",date.toString());
break;
case "3":
//Latest six month 上3个月
date = LocalDate.now().minusMonths(3);
params.put("startTime",date.toString());
break;
case "5":
//Latest six month 上6个月
date = LocalDate.now().minusMonths(6);
params.put("startTime",date.toString());
break;
default:
break;
}
}
return R.data(disasterInfoService.getAffectedCountryCount(params));
}
//home页面 灾害类型数量统计
@GetMapping("/getDisasterCountryCount")
public R<Integer> getDisasterCountryCount(@RequestParam Map<String, String> params) {
String dateType = String.valueOf(params.get("dateType"));
if (StringUtils.isNotBlank(dateType) && !"4".equals(dateType) && !"null".equals(dateType)) {
LocalDate date = LocalDate.now();
//如果有时间类型
switch (dateType) {
case "1":
//Latest week 上一周
date = LocalDate.now().minusWeeks(1);
params.put("startTime",date.toString());
break;
case "2":
//Latest month 上一个月
date = LocalDate.now().minusMonths(1);
params.put("startTime",date.toString());
break;
case "3":
//Latest six month 上3个月
date = LocalDate.now().minusMonths(3);
params.put("startTime",date.toString());
break;
case "5":
//Latest six month 上6个月
date = LocalDate.now().minusMonths(6);
params.put("startTime",date.toString());
break;
default:
break;
}
}
return R.data(disasterInfoService.getDisasterCountryCount(params));
}
}

View File

@ -116,9 +116,8 @@ public class EntityDataAllController {
* @return
*/
//4遥感数据(Remote sensing data) type
@PostMapping("/importTemplate")
public R fileExcelUpload(@RequestParam("fileDataOne") MultipartFile fileDataOne, @RequestParam("fileDataTwo") List<MultipartFile> fileDataTwo,
@RequestParam("type") Integer type, @RequestParam("disasterId") Long disasterId, @RequestParam("userId") Long userId) {
return entityDataAllService.fileExcelUpload(fileDataOne,fileDataTwo,type,disasterId,userId);
@PostMapping({"/importTemplate"})
public R fileExcelUpload(@RequestParam("fileDataOne") MultipartFile fileDataOne, @RequestParam("fileDataTwo") List<MultipartFile> fileDataTwo, @RequestParam("type") Integer type, @RequestParam("disasterId") Long disasterId) {
return R.data(null);
}
}

View File

@ -3,9 +3,7 @@ package com.kening.vordm.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.kening.vordm.entity.EntityData;
import com.kening.vordm.entity.GuestApplyDisasterRef;
import com.kening.vordm.service.DisasterInfoService;
import com.kening.vordm.service.GuestApplyDisasterRefService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -16,8 +14,6 @@ import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@RestController
@AllArgsConstructor
@ -26,8 +22,6 @@ public class GuestApplyDisasterRefController {
private final GuestApplyDisasterRefService guestApplyDisasterRefService;
private final DisasterInfoService disasterInfoService;
@GetMapping("/list")
public R<IPage<GuestApplyDisasterRef>> list(GuestApplyDisasterRef guestApplyDisasterRef, Query query) {
IPage<GuestApplyDisasterRef> pages = guestApplyDisasterRefService.page(Condition.getPage(query), Condition.getQueryWrapper(guestApplyDisasterRef));
@ -38,8 +32,6 @@ public class GuestApplyDisasterRefController {
@ApiOperation(value = "新增", notes = "传入Influence")
@PostMapping("/save")
public R save(@ApiParam(value = "Influence对象", required = true) @RequestBody GuestApplyDisasterRef guestApplyDisasterRef) {
guestApplyDisasterRef.setApplyTime(new Date());
disasterInfoService.updateApplyForCount(guestApplyDisasterRef.getDisasterId());
return R.status(guestApplyDisasterRefService.save(guestApplyDisasterRef));
}
@ -65,8 +57,10 @@ public class GuestApplyDisasterRefController {
}
@GetMapping("/detailByDisasterInfoId")
public R<IPage<GuestApplyDisasterRef>> detailByDisasterInfoId(String id, Query query) {
IPage<GuestApplyDisasterRef> detail = guestApplyDisasterRefService.detailByDisasterInfoId(Condition.getPage(query), id);
public R<GuestApplyDisasterRef> detailByDisasterInfoId(@ApiParam(value = "主键", required = true) @RequestParam String id) {
LambdaQueryWrapper<GuestApplyDisasterRef> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(GuestApplyDisasterRef::getDisasterId,id);
GuestApplyDisasterRef detail = guestApplyDisasterRefService.getOne(queryWrapper);
return R.data(detail);
}
}

View File

@ -13,7 +13,6 @@ import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@RestController
@ -44,7 +43,6 @@ public class InstallController {
@PostMapping("/save")
public R save(@ApiParam(value = "Install对象", required = true) @RequestBody Install install) {
install.setCreateTime(new Date());
return R.status(installService.save(install));
}

View File

@ -5,7 +5,6 @@ import com.kening.vordm.service.DisasterInfoService;
import com.kening.vordm.service.EmailService;
import com.kening.vordm.vo.UserVo;
import lombok.RequiredArgsConstructor;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
@ -25,8 +24,6 @@ public class LoginController {
//邮箱发送服务
private final EmailService emailService;
//引入BladeRedis
private BladeRedis bladeRedis;
/**
* 新增用户信息
*
@ -47,7 +44,6 @@ public class LoginController {
*/
@PostMapping("/sendUserPasswordEmail")
public R sendUserPasswordEmail(@RequestBody UserVo userVo) throws MessagingException {
bladeRedis.del("blade:user::user:account:595035-"+userVo.getEmail());
return emailService.sendUserPasswordEmail(userVo);
}

View File

@ -48,21 +48,15 @@ public class ToolController{
if(!StringUtils.isEmpty(tool.getToolName())){
queryWrapper.like("tool_name", tool.getToolName());
}
if(!StringUtils.isEmpty(tool.getMailbox())){
queryWrapper.like("mailbox", tool.getMailbox());
}
if(!StringUtils.isEmpty(tool.getLabel())){
queryWrapper.like("label", tool.getLabel());
}
if(!StringUtils.isEmpty(tool.getDisasterType())){
queryWrapper.like("disaster_type", tool.getDisasterType());
if(tool.getUploader()!=null) {
queryWrapper.eq("uploader", tool.getUploader());
}
if(!StringUtils.isEmpty(tool.getRelatedDisasterType())) {
queryWrapper.eq("related_disaster_type", tool.getRelatedDisasterType());
}
if(!StringUtils.isEmpty(tool.getDisasterType())) {
queryWrapper.like("disaster_type", tool.getDisasterType());
}
String checkd = tool.getChecked();
if(checkd != null && checkd.equals("1")){
queryWrapper.isNull("review_time");

View File

@ -115,10 +115,4 @@ public interface DisasterInfoMapper extends BaseMapper<DisasterInfo> {
IPage<DisasterInfo> getUserDisasterInfoListNewB2(IPage<Object> page, @Param("userId") String userId);
IPage<DisasterInfo> getUserDisasterInfoListNew(IPage<Object> page, @Param("userId") String userId);
void updateApplyForCount(@Param("id") Long id);
Integer getAffectedCountryCount(@Param("params")Map<String, String> params);
Integer getDisasterCountryCount(@Param("params")Map<String, String> params);
}

View File

@ -25,8 +25,6 @@
<result property="sponsorOrganization" column="sponsor_organization" jdbcType="TIMESTAMP"/>
<result property="respondedTime" column="responded_time" jdbcType="TIMESTAMP"/>
<result property="isEndApply" column="is_end_apply" jdbcType="INTEGER"/>
<result property="fraction" column="fraction" jdbcType="INTEGER"/>
<result property="applyForCount" column="apply_for_count" jdbcType="INTEGER"/>
</resultMap>
@ -38,7 +36,7 @@
di.temp_start_time,di.create_time,di.vordm_id,
di.respond_time,di.download_count,di.sponsor_organization,
di.responded_time,di.is_end_apply,di.admin_id,di.admin_name,
di.chief_id,di.chief_name,di.approval_role,di.fraction
di.chief_id,di.chief_name,di.approval_role
</sql>
<sql id="Home_Disaster_Info">
@ -193,8 +191,6 @@
d.respond_status,
d.responded_time,
d.is_end_apply,
d.fraction,
IFNULL(d.apply_for_count,0) AS apply_for_count,
ud.review_time AS reviewTime,
ud.sponsor_id AS sponsorId,
bdb.dict_value as dictValue,
@ -575,7 +571,6 @@
LEFT JOIN blade_user gi on gi.id = gmdr.sponsor_id
<where>
gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
</where>
</select>
@ -586,6 +581,7 @@
from disaster_info di
<where>
di.chief_id = #{userId}
and di.respond_status > 1
</where>
</select>
@ -611,7 +607,6 @@
di.disaster_time BETWEEN #{start} AND #{end}
<if test="email != null">
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
</if>
GROUP BY date
@ -632,7 +627,6 @@
LEFT JOIN blade_user gi on gi.id = gmdr.sponsor_id
where date_format(t.disaster_time, '%Y-%m') = CONCAT(#{year}, '-01')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-02') as `key`, 0 as response, count (1) as initiate
@ -644,7 +638,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-02')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-03') as `key`, 0 as response, count (1) as initiate
@ -656,7 +649,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-03')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-04') as `key`, 0 as response, count (1) as initiate
@ -668,7 +660,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-04')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-05') as `key`, 0 as response, count (1) as initiate
@ -680,7 +671,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-05')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-06') as `key`, 0 as response, count (1) as initiate
@ -692,7 +682,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-06')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-07') as `key`, 0 as response, count (1) as initiate
@ -704,7 +693,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-07')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-08') as `key`, 0 as response, count (1) as initiate
@ -716,7 +704,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-08')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-09') as `key`, 0 as response, count (1) as initiate
@ -728,7 +715,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-09')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-10') as `key`, 0 as response, count (1) as initiate
@ -740,7 +726,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-10')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-11') as `key`, 0 as response, count (1) as initiate
@ -752,7 +737,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-11')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-12') as `key`, 0 as response, count (1) as initiate
@ -764,7 +748,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-12')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
@ -889,7 +872,6 @@
LEFT JOIN blade_user gi on gi.id = gmdr.sponsor_id
<where>
gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
</where>
</select>
@ -1447,7 +1429,6 @@
LEFT JOIN blade_user gi on gi.id = gmdr.sponsor_id
where date_format(t.disaster_time, '%Y-%m') = CONCAT(#{year}, '-01')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-02') as `key`, 0 as response, count (1) as initiate
@ -1459,7 +1440,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-02')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-03') as `key`, 0 as response, count (1) as initiate
@ -1471,7 +1451,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-03')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-04') as `key`, 0 as response, count (1) as initiate
@ -1483,7 +1462,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-04')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-05') as `key`, 0 as response, count (1) as initiate
@ -1495,7 +1473,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-05')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-06') as `key`, 0 as response, count (1) as initiate
@ -1507,7 +1484,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-06')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-07') as `key`, 0 as response, count (1) as initiate
@ -1519,7 +1495,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-07')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-08') as `key`, 0 as response, count (1) as initiate
@ -1531,7 +1506,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-08')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-09') as `key`, 0 as response, count (1) as initiate
@ -1543,7 +1517,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-09')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-10') as `key`, 0 as response, count (1) as initiate
@ -1555,7 +1528,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-10')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-11') as `key`, 0 as response, count (1) as initiate
@ -1567,7 +1539,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-11')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
SELECT CONCAT(#{year}, '-12') as `key`, 0 as response, count (1) as initiate
@ -1579,7 +1550,6 @@
, '%Y-%m') = CONCAT(#{year}
, '-12')
and gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
union ALL
@ -1703,8 +1673,7 @@
LEFT JOIN guest_manage_disaster_ref gmdr on gmdr.disaster_id = di.id
<where>
gmdr.sponsor_id = #{userId}
and gmdr.status > 0
and gmdr.status != 2
and di.respond_status > 1
</where>
</select>
@ -1714,8 +1683,7 @@
from disaster_info di
<where>
di.admin_id = #{userId}
and gmdr.status > 0
and gmdr.status != 2
and di.respond_status > 1
</where>
</select>
@ -1726,8 +1694,7 @@
LEFT JOIN guest_manage_disaster_ref gmdr on gmdr.disaster_id = di.id
<where>
gmdr.admin_id = #{userId}
and gmdr.status > 0
and gmdr.status != 2
and di.respond_status = 2
</where>
</select>
@ -1738,61 +1705,8 @@
LEFT JOIN guest_manage_disaster_ref gmdr on gmdr.disaster_id = di.id
<where>
gmdr.manager_id = #{userId}
and gmdr.status > 0
and gmdr.status != 2
and di.respond_status = 2
</where>
</select>
<update id="updateApplyForCount">
UPDATE disaster_info set apply_for_count=IFNULL(apply_for_count,0)+1
<where>
id=#{id}
</where>
</update>
<select id="getAffectedCountryCount" resultType="java.lang.Integer">
SELECT count(*) FROM
(SELECT disaster_country FROM `disaster_info`
<where>
<if test="params.respondStatus!=null and params.respondStatus!=''">
and respond_status = #{params.respondStatus}
</if>
<if test="params.affectedArea!=null and params.affectedArea!=''">
and disaster_country = #{params.affectedArea}
</if>
<if test="params.disasterType!=null and params.disasterType!=''">
and disaster_type = #{params.disasterType}
</if>
<if test="params.startTime!=null and params.startTime!=''">
and disaster_time &gt;= #{params.startTime}
</if>
<if test="params.endTime!=null and params.endTime!=''">
and disaster_time &lt;= #{params.endTime}
</if>
</where>
GROUP BY disaster_country) disaster
</select>
<select id="getDisasterCountryCount" resultType="java.lang.Integer">
SELECT count(*) FROM
(SELECT disaster_type FROM `disaster_info`
<where>
<if test="params.respondStatus!=null and params.respondStatus!=''">
and respond_status = #{params.respondStatus}
</if>
<if test="params.affectedArea!=null and params.affectedArea!=''">
and disaster_country = #{params.affectedArea}
</if>
<if test="params.disasterType!=null and params.disasterType!=''">
and disaster_type = #{params.disasterType}
</if>
<if test="params.startTime!=null and params.startTime!=''">
and disaster_time &gt;= #{params.startTime}
</if>
<if test="params.endTime!=null and params.endTime!=''">
and disaster_time &lt;= #{params.endTime}
</if>
</where>
GROUP BY disaster_type) disaster
</select>
</mapper>

View File

@ -33,7 +33,7 @@
<result property="productSerialNum" column="product_serial_num" jdbcType="VARCHAR"/>
<result property="productResolution" column="product_resolution" jdbcType="VARCHAR"/>
<result property="cloudCover" column="cloud_cover" jdbcType="INTEGER"/>
<result property="productTime" column="product_time" jdbcType="VARCHAR"/>
<result property="productTime" column="product_time" jdbcType="TIMESTAMP"/>
<result property="productBandsNum" column="product_bands_num" jdbcType="VARCHAR"/>
<result property="reason" column="reason" jdbcType="VARCHAR"/>
<result property="source" column="source" jdbcType="VARCHAR"/>
@ -57,8 +57,6 @@
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="satelliteType" column="satellite_type" jdbcType="VARCHAR"/>
<result property="pictureName" column="picture_name" jdbcType="VARCHAR"/>
<result property="isAdministration" column="is_administration" jdbcType="INTEGER"/>
<result property="location" column="location" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
@ -79,13 +77,13 @@
ed.upper_right_lon, ed.view_center_lat, ed.view_center_lon,
ed.lower_right_lat, ed.lower_right_lon, ed.lower_left_lat,
ed.lower_left_lon, ed.create_time, ed.satellite_type,
ed.picture_name, ed.is_administration, ed.location
ed.picture_name
</sql>
<select id="getEntityDataList" resultType="com.kening.vordm.entity.EntityDataAll">
select
<include refid="Base_Column_List"/>,
bu.name AS username,
bu.name AS uploaderName,
bu.email AS email,
di.vordm_id,
di.geometry

View File

@ -1,12 +1,7 @@
package com.kening.vordm.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kening.vordm.entity.EntityData;
import com.kening.vordm.entity.GuestApplyDisasterRef;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author G
@ -16,7 +11,6 @@ import java.util.List;
*/
public interface GuestApplyDisasterRefMapper extends BaseMapper<GuestApplyDisasterRef> {
IPage<GuestApplyDisasterRef> detailByDisasterInfoId(IPage<Object> page, @Param("id") String id);
}

View File

@ -16,17 +16,4 @@
id,disaster_id,user_status,
apply_time,admin_id
</sql>
<select id="detailByDisasterInfoId" resultType="com.kening.vordm.entity.GuestApplyDisasterRef">
select ga.id,ga.disaster_id,ga.user_status,
ga.apply_time,ga.admin_id,
bu.name AS userName,bu.email AS userEmail
from guest_apply_disaster_ref ga
left join blade_user bu on ga.admin_id = bu.id
<where>
<if test="id!=null and id!=''">
ga.disaster_id = #{id}
</if>
</where>
</select>
</mapper>

View File

@ -47,7 +47,6 @@
LEFT JOIN blade_user gi on gi.id = gmdr.sponsor_id
<where>
gi.email = #{email}
and gmdr.status > 0
and gmdr.status != 2
</where>
</select>
@ -83,15 +82,17 @@
<select id="getByUserStatisticsOneNew" resultType="java.lang.Integer">
select count(di.id)
FROM guest_manage_disaster_ref di
LEFT JOIN guest_manage_disaster_ref gmdr on gmdr.disaster_id = di.id
LEFT JOIN blade_user gi on gi.id = gmdr.sponsor_id
<where>
di.sponsor_id = #{userId}
and di.status != 2
gi.email = #{email}
and gmdr.status != 2
</where>
</select>
<select id="getByUserStatisticsThreeNew" resultType="java.lang.Integer">
select count(ed.id)
FROM entity_data_all ed
FROM entity_data ed
<where>
ed.uploader_id = #{userId}
</where>

View File

@ -13,12 +13,11 @@
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="happenTime" column="happen_time" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,title,Images,
link,sort,is_deleted,
create_time,status,happen_time
create_time,status
</sql>
</mapper>

View File

@ -21,7 +21,6 @@
<result property="showName" column="show_name" jdbcType="VARCHAR"/>
<result property="mailbox" column="mailbox" jdbcType="VARCHAR"/>
<result property="paperLink" column="paper_link" jdbcType="VARCHAR"/>
<result property="disasterType" column="disaster_type" jdbcType="VARCHAR"/>
<result property="toolVisits" column="tool_visits" jdbcType="INTEGER"/>
<result property="paperVisits" column="paper_visits" jdbcType="INTEGER"/>
</resultMap>
@ -31,7 +30,7 @@
Introduction,link,detail,
create_time,upload_id,manager_id,
review_time,type,voluntary_flag,
uploader,show_name,mailbox,paper_link,tool_visits,paper_visits,disaster_type
uploader,show_name,mailbox,paper_link,tool_visits,paper_visits
</sql>
<select id="toolRanking" resultType="com.kening.vordm.entity.Tool">

View File

@ -96,10 +96,4 @@ public interface DisasterInfoService extends IService<DisasterInfo> {
List<DisasterInfo> statisticsByUserCountry(Long userId);
IPage<DisasterInfo> getUserDisasterInfoListNew(IPage<Object> page, String userId, String roleId);
void updateApplyForCount(Long disasterId);
Integer getAffectedCountryCount(Map<String, String> params);
Integer getDisasterCountryCount(Map<String, String> params);
}

View File

@ -6,7 +6,6 @@ import com.kening.vordm.entity.EntityDataAll;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kening.vordm.vo.UserTenantVo;
import org.springblade.core.tool.api.R;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -23,5 +22,4 @@ public interface EntityDataAllService extends IService<EntityDataAll> {
R saveEntityData(EntityDataAll entityData);
R fileExcelUpload(MultipartFile fileDataOne, List<MultipartFile> fileDataTwo, Integer type, Long disasterId, Long userId);
}

View File

@ -1,12 +1,8 @@
package com.kening.vordm.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kening.vordm.entity.EntityData;
import com.kening.vordm.entity.GuestApplyDisasterRef;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author G
* @description 针对表guest_apply_disaster_ref(灾害响应表每一个灾害可能有多个用户响应-申请)的数据库操作Service
@ -14,5 +10,4 @@ import java.util.List;
*/
public interface GuestApplyDisasterRefService extends IService<GuestApplyDisasterRef> {
IPage<GuestApplyDisasterRef> detailByDisasterInfoId(IPage<Object> page, String id);
}

View File

@ -621,19 +621,4 @@ public class DisasterInfoServiceImpl extends ServiceImpl<DisasterInfoMapper, Dis
return baseMapper.getUserDisasterInfoListNewB2(page, userId);
}
}
@Override
public void updateApplyForCount(Long disasterId) {
baseMapper.updateApplyForCount(disasterId);
}
@Override
public Integer getAffectedCountryCount(Map<String, String> params) {
return baseMapper.getAffectedCountryCount(params);
}
@Override
public Integer getDisasterCountryCount(Map<String, String> params) {
return baseMapper.getDisasterCountryCount(params);
}
}

View File

@ -39,7 +39,6 @@ public class EmailServiceImpl implements EmailService {
private final DisasterInfoMapper disasterInfoMapper;
//引入BladeRedis
private final BladeRedis bladeRedis;
@Value("${spring.mail.username}")
@ -68,8 +67,8 @@ public class EmailServiceImpl implements EmailService {
if (bladeUser == null || bladeUser.getPassword()==null){
return R.data(1405, "There are currently no bound users for this email");
}
disasterInfoMapper.updataUserByEmail(userVo.getEmail(),"1790ae2beb8e6c6a4c6744667e11c4ba26abeb09");
bladeRedis.del("blade:user::user:account:595035-"+userVo.getEmail());
Email email = new Email();
email.setSubject("Your login password has been updated");
String encrypt = DigestUtil.encrypt(bladeUser.getPassword());

View File

@ -1,6 +1,5 @@
package com.kening.vordm.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -11,23 +10,12 @@ import com.kening.vordm.service.EntityDataAllService;
import com.kening.vordm.mapper.EntityDataAllMapper;
import com.kening.vordm.vo.UserTenantVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.springblade.core.oss.MinioTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.oss.props.OssProperties;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* @author G
@ -36,18 +24,11 @@ import java.util.concurrent.atomic.AtomicInteger;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class EntityDataAllServiceImpl extends ServiceImpl<EntityDataAllMapper, EntityDataAll>
implements EntityDataAllService{
private final GuestInfoMapper guestInfoMapper;
private final OssProperties ossProperties;
private final MinioTemplate minioTemplate;
@Value("${oss.minio.image-url:}")
private String imageUrl;
@Override
public IPage<EntityDataAll> getEntityDataList(IPage<Object> page, EntityDataAll entityData) {
if (entityData.getType() !=null && !entityData.getType().isEmpty()){
@ -99,181 +80,6 @@ public class EntityDataAllServiceImpl extends ServiceImpl<EntityDataAllMapper, E
}
return R.status(this.baseMapper.insert(entityData) > 0);
}
@Override
public R fileExcelUpload(MultipartFile fileDataOne, List<MultipartFile> fileDataTwo, Integer type, Long disasterId, Long userId) {
HashSet<String> pictureNames = new HashSet<>();
fileDataTwo.stream().forEach(multipartFile -> {
String filename = multipartFile.getOriginalFilename();
String firstname = filename.substring(0, filename.lastIndexOf("."));
pictureNames.add(firstname);
});
try {
InputStream inputStream = fileDataOne.getInputStream();
Workbook workbook = new HSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0);
sheet.forEach(currentRow -> {
if (currentRow.getRowNum()!= 0&&currentRow!=null&&!isBlankRow(currentRow)) {
EntityDataAll entityDataAll = new EntityDataAll();
currentRow.forEach(cell -> {
if (!Objects.isNull(cell)){
int columnIndex = cell.getColumnIndex();
//设置单元格类型
cell.setCellType(CellType.STRING);
switch (columnIndex) {
case 0:
entityDataAll.setTitle(cell.getStringCellValue());
break;
case 1:
entityDataAll.setProductLevel(cell.getStringCellValue());
break;
case 2:
entityDataAll.setProductSerialNum(cell.getStringCellValue());
break;
case 3:
entityDataAll.setProductTime(cell.getStringCellValue());
break;
case 4:
entityDataAll.setProductResolution(cell.getStringCellValue());
break;
case 5:
String s = cell.getStringCellValue();
entityDataAll.setCloudCover(Double.parseDouble(s));
break;
case 6:
entityDataAll.setSatelliteCode(cell.getStringCellValue());
break;
case 7:
entityDataAll.setUpperLeftLat(cell.getStringCellValue());
break;
case 8:
entityDataAll.setUpperLeftLon(cell.getStringCellValue());
break;
case 9:
entityDataAll.setUpperRightLat(cell.getStringCellValue());
break;
case 10:
entityDataAll.setUpperRightLon(cell.getStringCellValue());
break;
case 11:
entityDataAll.setViewCenterLat(cell.getStringCellValue());
break;
case 12:
entityDataAll.setViewCenterLon(cell.getStringCellValue());
break;
case 13:
entityDataAll.setLowerRightLat(cell.getStringCellValue());
break;
case 14:
entityDataAll.setLowerRightLon(cell.getStringCellValue());
break;
case 15:
entityDataAll.setLowerLeftLat(cell.getStringCellValue());
break;
case 16:
entityDataAll.setLowerLeftLon(cell.getStringCellValue());
break;
case 17:
entityDataAll.setCoverageArea(cell.getStringCellValue());
break;
case 18:
String s1 = cell.getStringCellValue();
// 1-Optical satellite, 2-Night light satellite, 3-Video satellite,
// 4-Hyperspectral satellite, 5-Radar satellite
if (s1.equals("Optical")){
entityDataAll.setSatelliteTypeSelect(1);
}else if (s1.equals("Night light satellite")){
entityDataAll.setSatelliteTypeSelect(2);
}else if (s1.equals("Video satellite")){
entityDataAll.setSatelliteTypeSelect(3);
}else if (s1.equals("Hyperspectral satellite")){
entityDataAll.setSatelliteTypeSelect(4);
}else if (s1.equals("Radar satellite")){
entityDataAll.setSatelliteTypeSelect(5);
}
break;
case 19:
entityDataAll.setSourceOrganization(cell.getStringCellValue());
break;
case 20:
entityDataAll.setPictureName(cell.getStringCellValue());
if (StrUtil.isNotBlank(cell.getStringCellValue())){
boolean flag = pictureNames.add(cell.getStringCellValue());
if (!flag) {
fileDataTwo.stream().forEach(multipartFile -> {
String filename = multipartFile.getOriginalFilename();
if (filename.contains(cell.getStringCellValue())) {
BladeFile bladeFile = minioTemplate.putFile(multipartFile);
bladeFile = format(bladeFile, imageUrl);
entityDataAll.setLink(bladeFile.getLink());
}
});
} else {
pictureNames.remove(cell.getStringCellValue());
}
}
break;
case 21:
entityDataAll.setDownloadLink(cell.getStringCellValue());
break;
}
}
});
entityDataAll.setType("4");
entityDataAll.setSource("Other");
entityDataAll.setDisasterId(disasterId);
entityDataAll.setUploaderId(userId);
entityDataAll.setUploadTime(new Date());
entityDataAll.setIsAdministration(1);
entityDataAll.setStatus(2);
baseMapper.insert(entityDataAll);
}
});
workbook.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
return R.data(false);
}
return R.data(true);
}
/**
* 格式化上传文件返回路径
*
* @param bladeFile 上传成功后返回的值
* @param showUrl 回显地址
* @return 上传后的文件内容
*/
private BladeFile format(BladeFile bladeFile, String showUrl) {
if (StringUtil.isNotBlank(showUrl)) {
String link = bladeFile.getLink();
String subUrl = link.replace(ossProperties.getEndpoint(), showUrl);
bladeFile.setLink(subUrl);
bladeFile.setDomain(showUrl);
}
return bladeFile;
}
public static boolean isBlankRow(Row row){
boolean isEmptyRow = true;
for (int i=0; i<row.getLastCellNum(); i++){
if (row.getCell(i) != null){
if (row.getCell(i).getCellType()== CellType.STRING && !row.getCell(i).getRichStringCellValue().equals("")){
isEmptyRow = false;
break;
}else if (row.getCell(i).getCellType()!=CellType.BLANK){
isEmptyRow = false;
break;
}
}
if (!isEmptyRow)
break;
}
return isEmptyRow;
}
}

View File

@ -1,15 +1,11 @@
package com.kening.vordm.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kening.vordm.entity.EntityData;
import com.kening.vordm.entity.GuestApplyDisasterRef;
import com.kening.vordm.service.GuestApplyDisasterRefService;
import com.kening.vordm.mapper.GuestApplyDisasterRefMapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author G
* @description 针对表guest_apply_disaster_ref(灾害响应表每一个灾害可能有多个用户响应-申请)的数据库操作Service实现
@ -19,10 +15,6 @@ import java.util.List;
public class GuestApplyDisasterRefServiceImpl extends ServiceImpl<GuestApplyDisasterRefMapper, GuestApplyDisasterRef>
implements GuestApplyDisasterRefService{
@Override
public IPage<GuestApplyDisasterRef> detailByDisasterInfoId(IPage<Object> page, String id) {
return this.baseMapper.detailByDisasterInfoId(page,id);
}
}

View File

@ -136,6 +136,12 @@ public class NewsServiceImpl extends ServiceImpl<NewsMapper, News>
String reply_count = ExcelCellUtil.strHandle(row.get(5));
String visit_count = ExcelCellUtil.strHandle(row.get(6));
String retweet_count = ExcelCellUtil.strHandle(row.get(7));
String geo = ExcelCellUtil.strHandle(row.get(8));
String coordinates = ExcelCellUtil.strHandle(row.get(9));
String place = ExcelCellUtil.strHandle(row.get(10));
String contributors = ExcelCellUtil.strHandle(row.get(11));
String topic = ExcelCellUtil.strHandle(row.get(12));
SocialMedia socialMedia = new SocialMedia();
socialMedia.setCreateTime(new Date());
socialMedia.setDisasterId(disasterId);
@ -173,7 +179,23 @@ public class NewsServiceImpl extends ServiceImpl<NewsMapper, News>
if (retweet_count != null) {
socialMedia.setRetweetCount(Integer.parseInt(retweet_count));
}
socialMedia.setStatus(1);
if (geo != null) {
socialMedia.setGeo(geo);
}
if (coordinates != null) {
socialMedia.setCoordinates(coordinates);
}
if (place != null) {
socialMedia.setPlace(place);
}
if (contributors != null) {
socialMedia.setContributors(contributors);
}
if (topic != null) {
}
socialMedia.setTopic(topic);
socialMedia.setStatus(0);
socialMediaMapper.insert(socialMedia);
}
}

View File

@ -87,6 +87,7 @@ public class PictureInfoServiceImpl extends ServiceImpl<PictureInfoMapper, Pictu
}
pictureInfo.setSize(multipartFile.getSize());
pictureInfo.setType(multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().indexOf(".") + 1));
pictureInfo.setIsMain(otherData.getIsMain());
pictureInfoList.add(pictureInfo);
}
return saveBatch(pictureInfoList);

View File

@ -8,11 +8,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kening.vordm.entity.EntityDataAll;
import com.kening.vordm.entity.RemoteSensingSourceData;
import com.kening.vordm.mapper.EntityDataAllMapper;
import com.kening.vordm.mapper.RemoteSensingSourceDataMapper;
import com.kening.vordm.service.EntityDataAllService;
import com.kening.vordm.service.RemoteSensingSourceDataService;
import com.kening.vordm.vo.productResolutionVo;
import lombok.RequiredArgsConstructor;
@ -61,8 +58,6 @@ public class RemoteSensingSourceDataServiceImpl extends ServiceImpl<RemoteSensin
private final OssProperties ossProperties;
private final EntityDataAllMapper entityDataAllMapper;
@Value("${oss.minio.image-url:}")
private String imageUrl;
@ -304,7 +299,7 @@ public class RemoteSensingSourceDataServiceImpl extends ServiceImpl<RemoteSensin
@Override
public void exportRemoteSensing(Long id, HttpServletRequest request, HttpServletResponse response) {
EntityDataAll remoteSensingSourceData = this.entityDataAllMapper.selectById(id);
RemoteSensingSourceData remoteSensingSourceData = this.baseMapper.selectById(id);
if (remoteSensingSourceData != null){
XSSFWorkbook workbook = new XSSFWorkbook();
CellStyle style = workbook.createCellStyle();
@ -339,8 +334,8 @@ public class RemoteSensingSourceDataServiceImpl extends ServiceImpl<RemoteSensin
}
XSSFCell xssfCell3 = dataRow.createCell(2);
xssfCell3.setCellStyle(style);
if (remoteSensingSourceData.getLink()!=null) {
xssfCell3.setCellValue(remoteSensingSourceData.getLink());
if (remoteSensingSourceData.getDownloadUrl()!=null) {
xssfCell3.setCellValue(remoteSensingSourceData.getDownloadUrl());
}
//下载分析报告excel
downLoadExcel(response, workbook, "download");