This commit is contained in:
Paidax
2025-07-31 15:48:46 +08:00
parent ac02be1aec
commit 1510e28ab0
294 changed files with 36042 additions and 4361 deletions
@@ -0,0 +1,11 @@
package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller;
/**
* @version 1.0
* @Author zzr
* @nameActivityDeclareApplyController
* @Date 2025/7/31 15:46
* @注释
*/
public class ActivityDeclareApplyController {
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.activity.declarereimbursement.declare.models;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.Table;
/**
* @version 1.0
* @Author zzr
* @nameActivityDeclareInfo
* @Date 2025/7/31 15:38
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ActivityDeclareInfo extends BaseModel {
}
@@ -0,0 +1,11 @@
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller;
/**
* @version 1.0
* @Author zzr
* @nameActivityReimbursementApplyController
* @Date 2025/7/31 15:47
* @注释
*/
public class ActivityReimbursementApplyController {
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.Table;
/**
* @version 1.0
* @Author zzr
* @nameActivityReimbursement
* @Date 2025/7/31 15:43
* @注释
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ActivityReimbursementInfo extends BaseModel {
}
@@ -0,0 +1,16 @@
package com.budwk.app.zhgh.activity.fitnesswalk.contants;
import lombok.Data;
import java.util.List;
/**
* 获取活动的树形结构
*/
@Data
public class Cascader {
private String value;
private String label;
private List<Cascader> children;
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.activity.fitnesswalk.contants;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum FitnessWalkMode {
PUNCH("punch", "打卡"),
STEP_COUNT("stepCount", "计步"),
GPS("gps", "GPS");
private final String value;
private final String desc;
}
@@ -0,0 +1,133 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import io.swagger.annotations.ApiOperation;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
@IocBean
@Ok("json")
@ApiOperation("健步走-同步绑定记录")
@At("/platform/fitnessWalk/bindingRecord")
public class FitnessWalkActivityBindingRecordController {
@Inject
private WeAppCloudUtil weAppCloudUtil;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/bindingRecord.html")
@SaCheckPermission("fitnessWalk.bindingRecord")
public void index() {
}
/**
* 获取用户绑定记录
* @param keyWord
* @param unionId
* @param searchName
* @param searchKeyword
* @param pageNumber
* @param pageSize
* @param pageOrderName
* @param pageOrderBy
* @return
* @throws IOException
*/
@At
@ApiOperation("获取用户绑定记录")
@SaCheckPermission("fitnessWalk.bindingRecord")
public Result pageData(@Param("keyWord") String keyWord,
@Param("unionId") String unionId,
@Param("searchName") String searchName,
@Param("searchKeyword") String searchKeyword,
@Param("pageNumber") int pageNumber, @Param("pageSize") int pageSize,
@Param("pageOrderName") String pageOrderName,
@Param("pageOrderBy") String pageOrderBy) {
int skip = (pageNumber == 1 ? 0 : (pageNumber - 1)) * pageSize;
StringBuilder sql = new StringBuilder("db.collection('login_record')");
if (StrUtil.isNotBlank(keyWord)) {
sql.append(".where(");
sql.append("_.or([");
sql.append("{loginname:{$regex:'").append(keyWord).append("',$options:'i'}},");
sql.append("{username:{$regex:'").append(keyWord).append("',$options:'i'}}");
sql.append("])");
sql.append(")");
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
sql.append(".where({'data.unionid':'").append(SecurityUtil.getUnionId()).append("'})");
} else {
if (Strings.isNotBlank(unionId)) {
sql.append(".where({'data.unionid':'").append(unionId).append("'})");
}
}
sql.append(".field({ data: false })");
sql.append(".skip(").append(skip).append(")");
sql.append(".limit(").append(pageSize).append(")");
sql.append(".get()");
try {
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
List<NutMap> data = jsonObject.getJSONArray("data").stream()
.map(v -> JSONUtil.toBean((String) v, NutMap.class))
.collect(Collectors.toList());
JSONObject pager = jsonObject.getJSONObject("pager");
Pagination pagination = new Pagination(pageNumber, pageSize, pager.getInt("Total"), data);
return Result.success().addData(pagination);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 删除绑定记录
* @param ids
* @return
*/
@At
@ApiOperation("删除绑定记录")
@SLog(tag = "健步走-同步绑定记录", msg = "删除绑定记录")
@SaCheckPermission("fitnessWalk.bindingRecord")
public Result delete(String[] ids) {
String sql = "db.collection('login_record').where({_id:_.in(" + Json.toJson(ids) + ")}).remove()";
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, sql);
return Result.success();
}
/**
* 删除所有绑定记录
* @return
*/
@At
@ApiOperation("删除所有绑定记录")
@SLog(tag = "健步走-同步绑定记录", msg = "删除所有绑定记录")
@SaCheckPermission("fitnessWalk.bindingRecord")
public Result deleteAll() {
String sql = "db.collection('login_record').where({_id: _.neq('0')}).remove()";
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, sql);
return Result.success();
}
}
@@ -0,0 +1,337 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_task;
import com.budwk.app.sys.services.SysTaskService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.task.services.TaskPlatformService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@IocBean
@Ok("json")
@ApiOperation("健步走-活动管理")
@At("/platform/fitnessWalk/activityManage")
public class FitnessWalkActivityManageController {
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Inject
private SysTaskService sysTaskService;
@Inject
private SysUserService sysUserService;
@Inject
private TaskPlatformService taskPlatformService;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/activityManage.html")
@SaCheckPermission("fitnessWalk.activityManage")
public void index() {
}
@At
@ApiOperation("获取活动数据")
@SaCheckPermission("fitnessWalk.activityManage")
public Result pageData(@Param("year") Integer year, @Param("unionId") String unionId, @Param("searchName") String searchName,
@Param("searchKeyword") String searchKeyword, @Param("pageNumber") int pageNumber,
@Param("pageSize") int pageSize, @Param("pageOrderName") String pageOrderName,
@Param("pageOrderBy") String pageOrderBy) {
int skip = (pageNumber == 1 ? 0 : (pageNumber - 1)) * pageSize;
StringBuilder sql = new StringBuilder("db.collection('activity')");
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
sql.append("where(");
sql.append("_.or([");
sql.append("{name:{$regex:'").append(searchKeyword).append("',$options:'i'}}");
sql.append("{tag:{$regex:'").append(searchKeyword).append("',$options:'i'}}");
sql.append("])");
sql.append(")");
}
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
sql.append(".where({unionId:'").append(SecurityUtil.getUnionId()).append("'})");
} else if (StrUtil.isNotBlank(unionId)) {
sql.append(".where({unionId:'").append(unionId).append("'})");
}
sql.append(".skip(").append(skip).append(")");
sql.append(".limit(").append(pageSize).append(")");
sql.append(".get()");
try {
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
List<FitnessWalkActivity> data = jsonObject.getJSONArray("data").stream()
.map(v -> JSONUtil.toBean((String) v, FitnessWalkActivity.class))
.collect(Collectors.toList());
JSONObject pager = jsonObject.getJSONObject("pager");
Pagination pagination = new Pagination(pageNumber, pageSize, pager.getInt("Total"), data);
return Result.success().addData(pagination);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
@At
@ApiOperation("添加活动")
@SLog(tag = "健步走-活动管理", msg = "添加活动")
@SaCheckPermission("fitnessWalk.activityManage")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doAdd(@Param("fitnessWalkActivity") FitnessWalkActivity fitnessWalkActivity,
@Param("file") TempFile tempFile,
@Param("stepFiles") TempFile[] stepFiles,
@Param("certificateFile") TempFile certificateTempFile) {
try {
//设置时间
if ("punch".equals(fitnessWalkActivity.getActivityModel())) {
fitnessWalkActivity.setApplyStartTime(fitnessWalkActivity.getApplyTime()[0]);
fitnessWalkActivity.setApplyEndTime(fitnessWalkActivity.getApplyTime()[1]);
}
fitnessWalkActivity.setStartTime(fitnessWalkActivity.getTime()[0]);
fitnessWalkActivity.setEndTime(fitnessWalkActivity.getTime()[1]);
if (tempFile != null) {
String fileId = weAppCloudUtil.uploadFile("activity/", tempFile.getFile());
fitnessWalkActivity.setCover(fileId);
}
if (Lang.isNotEmpty(stepFiles)) {
List<String> stepFileIdList = new ArrayList<>();
for (TempFile file : stepFiles) {
String fileId = weAppCloudUtil.uploadFile("activity/", file.getFile());
stepFileIdList.add(fileId);
}
fitnessWalkActivity.setRandomPics(stepFileIdList);
}
if (certificateTempFile != null) {
String fileId = weAppCloudUtil.uploadFile("activity/", certificateTempFile.getFile());
fitnessWalkActivity.setCompletionCertificateCover(fileId);
}
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
fitnessWalkActivity.setUnionId(SecurityUtil.getUnionId());
} else {
fitnessWalkActivity.setUnionId("");
}
fitnessWalkActivity.setNote(fitnessWalkActivity.getNote().replace("\"", "'"));
StringBuilder sql = new StringBuilder();
sql.append("db.collection('activity').add({data:").append(Json.toJson(fitnessWalkActivity)).append("})");
try {
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.INSERT, sql.toString());
fitnessWalkCommonService.addLotteryTask(fitnessWalkActivity);
fitnessWalkCommonService.addOrEditDoSaveRedis(fitnessWalkActivity);
return Result.success();
} catch (Exception e) {
return Result.error(e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
return Result.error();
}
}
@At
@Ok("json:full")
@ApiOperation("根据Id获取健步走活动")
@SaCheckPermission("fitnessWalk.activityManage")
public Result findOne(String id) {
return Result.success(fitnessWalkCommonService.getActivity(id));
}
@At
@Ok("json")
@ApiOperation("获取附件")
@SaCheckPermission("fitnessWalk.activityManage")
public Result getFile(String pic) {
try {
NutMap res = NutMap.NEW();
String imgurl = weAppCloudUtil.httpFile(pic);
HashMap<String, Object> imgmap = new HashMap<>();
imgmap.put("status", "success");
imgmap.put("name", imgurl.substring(imgurl.lastIndexOf("/") + 1));
imgmap.put("id", imgurl);
imgmap.put("url", imgurl);
res.setv("img", imgmap);
return Result.success().addData(res);
} catch (Exception e) {
return Result.error();
}
}
@At
@ApiOperation("修改健步走活动")
@SaCheckPermission("fitnessWalk.activityManage")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doEdit(@Param("fitnessWalkActivity") FitnessWalkActivity fitnessWalkActivity,
@Param("file") TempFile tempFile,
@Param("stepFiles") TempFile[] stepFiles,
@Param("certificateFile") TempFile certificateTempFile) {
//设置时间
if ("punch".equals(fitnessWalkActivity.getActivityModel())) {
fitnessWalkActivity.setApplyStartTime(fitnessWalkActivity.getApplyTime()[0]);
fitnessWalkActivity.setApplyEndTime(fitnessWalkActivity.getApplyTime()[1]);
}
fitnessWalkActivity.setStartTime(fitnessWalkActivity.getTime()[0]);
fitnessWalkActivity.setEndTime(fitnessWalkActivity.getTime()[1]);
if (tempFile != null) {
String fileId = weAppCloudUtil.uploadFile("activity/", tempFile.getFile());
fitnessWalkActivity.setCover(fileId);
}
if (Lang.isNotEmpty(stepFiles)) {
List<String> stepFileIdList = new ArrayList<>();
for (TempFile file : stepFiles) {
String fileId = weAppCloudUtil.uploadFile("activity/", file.getFile());
stepFileIdList.add(fileId);
}
fitnessWalkActivity.setRandomPics(stepFileIdList);
}
if (certificateTempFile != null) {
String fileId = weAppCloudUtil.uploadFile("activity/", certificateTempFile.getFile());
fitnessWalkActivity.setCompletionCertificateCover(fileId);
}
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
fitnessWalkActivity.setUnionId(SecurityUtil.getUnionId());
} else {
fitnessWalkActivity.setUnionId("");
}
fitnessWalkActivity.setNote(fitnessWalkActivity.getNote().replace("\"", "'"));
StringBuilder sql = new StringBuilder();
sql.append("db.collection('activity').doc('")
.append(fitnessWalkActivity.get_id())
.append("').update({data:").append(Json.toJson(fitnessWalkActivity)).append("})");
try {
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.UPDATE, sql.toString());
fitnessWalkCommonService.addLotteryTask(fitnessWalkActivity);
fitnessWalkCommonService.addOrEditDoSaveRedis(fitnessWalkActivity);
return Result.success();
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
@At
@ApiOperation("删除健步走活动")
@SLog(tag = "健步走-活动管理", msg = "删除活动")
@SaCheckPermission("fitnessWalk.activityManage")
public Result delete(String id) {
try {
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('activity').doc('" + id + "').remove()");
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('register').where({activity_id:'" + id + "'}).remove()");
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('sign').where({activity_id:'" + id + "'}).remove()");
weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE, "db.collection('gift_voucher').where({activity_id:'" + id + "'}).remove()");
List<Sys_task> sys_tasks = sysTaskService.query(Cnd.where("note", "=", id));
if (sys_tasks != null) {
sys_tasks.forEach(v -> {
taskPlatformService.delete(v.getId(), v.getId());
sysTaskService.delete(v.getId());
});
}
return Result.success();
} catch (Exception e) {
return Result.error();
}
}
/**
* 健身走健步模式通知提醒
*
* @param map
*/
private void addNotifyTask(NutMap map) {
if (map.getBoolean("sendNotify")) {
String id = map.getString("_id");
String name = map.getString("name");
String groupId = map.getString("groupId");
//提醒频率
int notifyGap = 10;
List<Sys_task> sys_tasks = sysTaskService.query(Cnd.where("note", "=", id));
if (Lang.isNotEmpty(sys_tasks)) {
sys_tasks.forEach(v -> {
taskPlatformService.delete(v.getId(), v.getId());
sysTaskService.delete(v.getId());
});
}
DateTime startTime = DateUtil.date(map.getLong("start_time"));
DateTime endTime = DateUtil.date(map.getLong("end_time"));
Set<DateTime> result = new HashSet<>();
DateTime offsetDay = DateUtil.offsetDay(startTime, notifyGap);
while (offsetDay.isBefore(endTime) && offsetDay.isAfter(new Date())) {
result.add(offsetDay);
offsetDay = DateUtil.offsetDay(offsetDay, notifyGap);
}
//活动结束前一天再添加一个日期提醒
result.add(DateUtil.offsetDay(endTime, -1));
for (DateTime dateTime : result) {
Sys_task sys_task = new Sys_task();
sys_task.setName(name);
sys_task.setNote(id);
sys_task.setJobClass("io.v.nutz.task.job.walking.WalkingNotifyJob");
sys_task.setData(Json.toJson(Map.of("groupId", groupId)));
sys_task.setDisabled(false);
String dateFormat = "ss mm HH dd MM ? yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String corn = sdf.format(dateTime);
sys_task.setCron(corn);
sysTaskService.insert(sys_task);
taskPlatformService.add(sys_task.getId(), sys_task.getId(), sys_task.getJobClass(), sys_task.getCron(), sys_task.getNote(), sys_task.getData());
}
}
}
}
@@ -0,0 +1,52 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* 健身走公共答题
*/
@IocBean
@At("/platform/fitnessWalk/common")
@Ok("json:full")
public class FitnessWalkCommonController {
// @Inject
// private QuestionService questionService;
//
// @Inject
// private QuestionIssueService questionIssueService;
//
// @Inject
// private QuestionWorService questionWorService;
//
// @Inject
// private QuestionReplyService questionReplyService;
//
// @At
// public Object getQuestion() {
// return questionService.query(Cnd.where("qflag", "=", 2));
// }
//
// @At
// public Object getIssueById(String id) {
// List<Question_issue> questionIssues = questionIssueService.query(Cnd.where("iqid", "=", id).asc("ipxbh"));
// questionIssues.forEach(issue -> {
// issue.setWors(questionWorService.query(Cnd.where("wiid", "=", issue.getIid()).asc("wpxbh")));
// });
// return questionIssues;
// }
//
// @At
// public Object saveAnswer(@Param("reply") Question_reply[] replys) {
// for (Question_reply reply : replys) {
// reply.setSave(false);
// reply.setRidentity(R.UU32());
// reply.setRtime(DateUtil.getDate());
// questionReplyService.insert(reply);
// }
// return null;
// }
}
@@ -0,0 +1,75 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.services.SysUserService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @author: Aaron
* @create: 2020-09-11 13:50
* @description: 小程序登录
**/
@At("/platform/fitnessWalk/login")
@Ok("json:full")
@IocBean
public class FitnessWalkLoginController {
@Inject
private SysUserService sysUserService;
@At("/")
public Object index(String username, String loginname) {
try {
Sql sql = Sqls.create("""
SELECT
u.id userid,
u.username,
u.loginname,
u.sex,
u.mobile,
u.birthday,
unit.`name` unitname,
u.unitid,
u.member,
unit.unionid,
un.unionname,
group_concat(sr.`code`) roles
FROM
sys_user u
LEFT JOIN sys_unit unit ON u.unitid = unit.id
LEFT JOIN sys_union un ON unit.unionid = un.id
LEFT JOIN sys_user_role sur ON sur.userId = u.id
LEFT JOIN sys_role sr ON sr.id = sur.roleId
$condition
""").setParam("loginname", loginname).setParam("username", username);
Cnd cnd = Cnd.NEW();
cnd.and("LOWER(u.loginname)", "=", loginname.trim().toLowerCase());
cnd.and("LOWER(u.username)", "=", username.trim().toLowerCase());
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.map());
sysUserService.dao().execute(sql);
NutMap user = (NutMap) sql.getResult();
if (StrUtil.isBlank(user.getString("userid"))) {
return Result.error().addMsg("系统查询不到您的信息,请与工会管理员联系!");
}
// if(user.getInt("member",0)==0){
// return Result.error().addMsg("您没有权限参加本次健步行,请与工会管理员联系!");
// }
/*if (user.getInt("member", 0) != 1 && !user.getString("sex", "").equals("女")) {
return Result.error().addMsg("您没有权限参加本次健步行,请与工会管理员联系!");
}*/
return Result.success().addData(user);
} catch (Exception e) {
return Result.error();
}
}
}
@@ -0,0 +1,258 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkPunchLottery;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
/**
* 打卡抽奖
*/
@IocBean
@Ok("json")
@ApiOperation("健步走打卡抽奖")
@At("/platform/fitnessWalk/punchLottery")
public class FitnessWalkPunchLotteryController {
private final ReentrantLock lock = new ReentrantLock(true);
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Inject
private RedisService redisService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/punchLottery.html")
public void index() {
}
/**
* 打卡完成之后抽奖
*
* @param activityId 活动Id
* @param userId 用户Id
* @return
*/
@At
@ApiOperation("打卡模式的抽奖")
public Result judgeWinningToPunch(String activityId, String userId) {
try {
if (StrUtil.isBlank(activityId) && StrUtil.isBlank(userId)) {
return Result.error("参数错误");
}
lock.lock();
int winingCount = fitnessWalkCommonService.dao().count(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
if (winingCount > 0) {
return null;
}
// 把中奖的用户直接存到redis里面去
String redisKey = this.getClass().getName() + "#judgeWinningToPunch#activityid:" + activityId + "#PRIZELIST:";
String getPrizeIndexesKey = this.getClass().getName() + "#judgeWinningToPunch#activityid:" + activityId + "#GETPRIZEINDEXES:";
// redisService.del(getPrizeIndexesKey);
// 获取奖品列表
List<FitnessWalkActivity.PunchLotteryPrize> punchLotteryPrizes = new ArrayList<>();
String punchLotteryPrizesJson = redisService.get(redisKey);
if (StrUtil.isNotBlank(punchLotteryPrizesJson)) {
punchLotteryPrizes = JSONUtil.toList(punchLotteryPrizesJson, FitnessWalkActivity.PunchLotteryPrize.class);
} else {
JSONObject prizeJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, "db.collection('activity').doc('%s').field({punchLotteryPrizes: true}).get()".formatted(activityId));
List<FitnessWalkActivity.PunchLotteryPrize> prizeList = JSONUtil.parseObj((String) prizeJsonObject.getJSONArray("data").get(0)).getJSONArray("punchLotteryPrizes").toList(FitnessWalkActivity.PunchLotteryPrize.class);
redisService.set(redisKey, JSONUtil.toJsonStr(prizeList));
punchLotteryPrizes = prizeList;
}
List<Integer> winningUserIndexList = null;
//奖项,抽取多少个
int sum = punchLotteryPrizes.stream().mapToInt(v -> Integer.parseInt(v.getNum())).sum();
//判断是否有key,可以获得奖项的下标数组
if (!redisService.exists(getPrizeIndexesKey)) {
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, "db.collection('register').where({activity_id:'%s'}).count()".formatted(activityId));
JSONObject pager = jsonObject.getJSONObject("pager");
String total = pager.getStr("Total");
//报名人数的一半,从这里的人中取数(最多抽取人数)
Integer lotteryNum = (int) Math.ceil(Double.parseDouble(total) / 2);
winningUserIndexList = generateRandomNumber(1, lotteryNum, sum);
redisService.set(getPrizeIndexesKey, JSONUtil.toJsonStr(winningUserIndexList));
} else {
String data = redisService.get(getPrizeIndexesKey);
winningUserIndexList = JSONUtil.toList(data, Integer.class);
}
List<FitnessWalkPunchLottery> punchLotteryList = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId));
Sys_user user = fitnessWalkCommonService.dao().fetch(Sys_user.class, Cnd.where("id", "=", userId));
FitnessWalkPunchLottery punchLottery = new FitnessWalkPunchLottery();
punchLottery.setId(R.UU32());
punchLottery.setActivityId(activityId);
punchLottery.setUserId(userId);
punchLottery.setLoginName(user.getLoginname());
punchLottery.setUserName(user.getUsername());
punchLottery.setWinDate(new Date());
punchLottery.setIsRead(false);
punchLottery.setIsWin(false);
punchLottery.setIsExchange(false);
if (winningUserIndexList.contains((punchLotteryList.size()))) {
//奖项map
Map<String, String> prizeMap = punchLotteryPrizes.stream().collect(Collectors.toMap(FitnessWalkActivity.PunchLotteryPrize::getValue, FitnessWalkActivity.PunchLotteryPrize::getName));
//奖项池
List<String> prizeIdList = new ArrayList<>();
punchLotteryPrizes.forEach(v -> {
for (int i = 0; i < Integer.parseInt(v.getNum()); i++) {
prizeIdList.add(v.getValue());
}
});
//已经中奖的奖项ID集合
List<String> winPrizeIdList = punchLotteryList.stream().filter(FitnessWalkPunchLottery::getIsWin).map(FitnessWalkPunchLottery::getPrizeId).toList();
winPrizeIdList.forEach(prizeIdList::remove);
Random random = new Random();
if (Lang.isNotEmpty(prizeIdList.size())) {
int index = random.nextInt(prizeIdList.size());
// 获取随机元素
String winingPrizeId = prizeIdList.get(index);
String winingPrizeName = prizeMap.get(winingPrizeId);
punchLottery.setPrizeName(winingPrizeName);
punchLottery.setPrizeId(winingPrizeId);
punchLottery.setIsWin(true);
}
}
fitnessWalkCommonService.dao().insert(punchLottery);
if (punchLottery.getIsWin()) {
return Result.success().addData(punchLottery.getPrizeId());
} else {
return Result.success().addData(null);
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (lock.isLocked()) {
lock.unlock();
}
}
}
@At
@ApiOperation("获取中奖记录")
public Result getLotteryRecord(String activityId, String userId) {
List<FitnessWalkPunchLottery> list = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId)
.and("userId", "=", userId));
return Result.success(list);
}
/**
* 兑奖
*
* @param id
* @return
*/
@At
@ApiOperation("兑奖")
public Result doExchange(String id) {
int count = fitnessWalkCommonService.dao().count(FitnessWalkPunchLottery.class, Cnd.where("id", "=", id).and("isExchange", "=", 1));
//返回2 "该二维码已兑奖!"
if (count > 0) {
return Result.success(2);
}
int update = fitnessWalkCommonService.dao().update(FitnessWalkPunchLottery.class,
Chain.make("isExchange", 1).add("exchangeDate", new Date()),
Cnd.where("id", "=", id));
return update > 0 ? Result.success() : Result.error();
}
/**
* 改为已读
*
* @param activityId
* @param userId
* @return
*/
@At
@ApiOperation("改为已读")
public Result doReadLottery(String activityId, String userId) {
fitnessWalkCommonService.dao().update(FitnessWalkPunchLottery.class, Chain.make("isRead", 1),
Cnd.where("userId", "=", userId).and("activityId", "=", activityId));
return Result.success();
}
/**
* 查看获奖人员
*
* @return
*/
@At
@ApiOperation("查看获奖人员")
public Result getPunchWining(String activityId) {
List<FitnessWalkPunchLottery> punchLotteryList = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class,
Cnd.where("isWin", "=", 1).and("activityId", "=", activityId));
return Result.success(punchLotteryList);
}
/**
* 抽奖方法的工具类,生成随机数,该随机数为中奖人
*
* @param minNum 最小值
* @param maxNum 最多抽取多少人
* @param count 抽几个
* @return
*/
public List<Integer> generateRandomNumber(Integer minNum, Integer maxNum, Integer count) {
Set<Integer> randomNumbers = new HashSet<>();
Random rand = new Random();
//如果是 抽奖人数小于了 奖品数量,会陷入死循环
if (maxNum <= count) {
for (int i = 0; i <= maxNum; i++) {
randomNumbers.add(i + 1);
}
} else {
while (randomNumbers.size() < count) {
int randomNum = rand.nextInt(maxNum - minNum + 1) + minNum;
randomNumbers.add(randomNum);
}
}
return new ArrayList<>(randomNumbers);
}
}
@@ -0,0 +1,247 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkPunchStatisticsService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* 打卡统计
*/
@IocBean
@Ok("json")
@ApiOperation("健步走打卡统计")
@At("/platform/fitnessWalk/punchStatistics")
public class FitnessWalkPunchStatisticsController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Inject
private FitnessWalkPunchStatisticsService fitnessWalkPunchStatisticsService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/punchStatistics.html")
@SaCheckPermission("fitnessWalk.punchStatistics")
public void index() {
}
/**
* 分工会统计
*
* @param activityId
* @param unionId
* @return
*/
@At
@Ok("json:full")
@ApiOperation("打卡记录统计")
@SaCheckPermission("fitnessWalk.punchStatistics")
public Result pageData(String activityId, String unionId) {
List<NutMap> list = fitnessWalkPunchStatisticsService.unionRegCheckInNum(activityId, unionId);
return Result.success(list);
}
@At
@ApiOperation("获取活动列表")
@SaCheckPermission("fitnessWalk.punchStatistics")
public Result getCascadersActivity(@Param("year") int year) {
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.PUNCH));
}
@At
@Ok("json:full")
@ApiOperation("根据工会查询获取报名人员")
@SaCheckPermission("fitnessWalk.punchStatistics")
public Result unionRegistrationData(String activityId, String unionId) {
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionRegistrationData(activityId, unionId);
return Result.success(list);
}
@At
@Ok("json:full")
@ApiOperation("根据工会查询获取打卡人员")
@SaCheckPermission("fitnessWalk.punchStatistics")
public Result unionCheckInData(String activityId, String unionId) {
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionCheckInData(activityId, unionId);
return Result.success(list);
}
@At
@Ok("void")
@ApiOperation("导出各分工会报名人数、打卡人数")
@SaCheckPermission("fitnessWalk.punchStatistics")
public void exportUnionRegCheckInNum(HttpServletResponse response, String activityId) {
List<NutMap> list = fitnessWalkPunchStatisticsService.unionRegCheckInNum(activityId, null);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("分工会", "unionname", 20));
entities.add(new ExcelExportEntity("报名人数", "regCount", 20));
entities.add(new ExcelExportEntity("打卡人数", "checkInCount", 20));
try {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("各分工会统计人数.xlsx", workbook, response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@At
@Ok("void")
@ApiOperation("导出某个分工会的报名人员")
@SaCheckPermission("fitnessWalk.punchStatistics")
public void exportRegUsers(HttpServletResponse response, String activityId, String unionId) {
Sys_union union = dao.fetch(Sys_union.class, unionId);
String unionName = Optional.ofNullable(union).map(Sys_union::getName).orElse(null);
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionRegistrationData(activityId, unionId);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginname", 20));
entities.add(new ExcelExportEntity("姓名", "username", 20));
entities.add(new ExcelExportEntity("单位", "unitname", 20));
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
entities.add(new ExcelExportEntity("报名时间", "register_time_str", 20));
try {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("分工会报名人员.xlsx", workbook, response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@At
@Ok("void")
@ApiOperation("导出某个分工会的打卡人员")
@SaCheckPermission("fitnessWalk.punchStatistics")
public void exportCheckInUsers(HttpServletResponse response, String activityId, String unionId) {
Sys_union union = dao.fetch(Sys_union.class, unionId);
String unionName = Optional.ofNullable(union).map(Sys_union::getName).orElse(null);
List<JSONObject> list = fitnessWalkPunchStatisticsService.unionCheckInData(activityId, unionId);
for (JSONObject jsonObject : list) {
Boolean used = jsonObject.getBool("used");
if (used == null) {
jsonObject.put("used", "未取得");
} else if (used) {
jsonObject.put("used", "已领取");
} else {
jsonObject.put("used", "未领取");
}
}
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginname", 20));
entities.add(new ExcelExportEntity("姓名", "username", 20));
entities.add(new ExcelExportEntity("单位", "unitname", 20));
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
entities.add(new ExcelExportEntity("点位总数", "pts_size", 20));
entities.add(new ExcelExportEntity("已打卡点位数", "sign_size", 20));
entities.add(new ExcelExportEntity("礼品券", "used", 20));
try {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download(unionName + "分工会报名人员.xlsx", workbook, response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
// /**
// * 导出礼品领取情况
// * @param response
// * @param activityId
// * @param unionId 工会id
// * @param used
// */
// @At
// @Ok("void")
// public void exportGiftInfo(HttpServletResponse response, String activityId, String unionId, boolean used) {
//
//
//
// }
@At
@Ok("void")
@ApiOperation("导出未领取得奖品券用户")
@SaCheckPermission("fitnessWalk.punchStatistics")
public void exportNotGetGiftVoucherUsers(HttpServletResponse response, String activityId) {
List<JSONObject> list = fitnessWalkPunchStatisticsService.exportNotGetGiftVoucherUsers(activityId);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginname", 20));
entities.add(new ExcelExportEntity("姓名", "username", 20));
entities.add(new ExcelExportEntity("单位", "unitname", 20));
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
try {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("未领取得奖品券人员.xlsx", workbook, response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@At
@Ok("void")
@ApiOperation("导出未使用奖品券用户")
@SaCheckPermission("fitnessWalk.punchStatistics")
public void exportNotUseGiftVoucherUsers(HttpServletResponse response, String activityId) {
List<JSONObject> list = fitnessWalkPunchStatisticsService.exportNotUseGiftVoucherUsers(activityId);
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginname", 20));
entities.add(new ExcelExportEntity("姓名", "username", 20));
entities.add(new ExcelExportEntity("单位", "unitname", 20));
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
try {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entities, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("导出未使用礼品券用户.xlsx", workbook, response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@@ -0,0 +1,403 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkStep;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import com.budwk.app.zhgh.integral.model.IntegralDetail;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.stream.Collectors;
@IocBean
@Ok("json")
@ApiOperation("健步走步数管理")
@At("/platform/fitnessWalk/stepManage")
public class FitnessWalkStepManageController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private RedisService redisService;
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
/**
* 用户上传一个近31天的步数
*
* @param activityId 活动id
* @param userId 用户id
* @param monthSteps 步数(当天往前推30天)
* @return
*/
@At
@Ok("json:full")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "健步走步数管理", msg = "微信步数上传")
@ApiOperation("上传微信步数,再根据是否开启了积分,自动将步数转化成积分")
public Result updateStepMonth(String activityId, String userId, String monthSteps) {
try {
if (StrUtil.isBlank(userId) || StrUtil.isBlank(monthSteps) || StrUtil.isBlank(activityId)) {
return Result.error("必要参数未传递");
}
// 健步走的活动数据
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
// 是否启用了积分
boolean isPoints = activity.getIsPoints() != null && activity.getIsPoints();
// 使用对象解构获取活动参数
final Integer standSteps = activity.getLotteryQualificationSteps();
final Integer standPoints = activity.getLotteryQualificationPoints();
final Integer otherSteps = activity.getOtherSteps();
final Integer otherPoints = activity.getOtherPoints();
final Integer maxPoints = activity.getMaxPoints();
String integralNotes = activity.getMasterActivityName() + "所获积分";
// 获取到的用户的步数数据
List<NutMap> steps = Json.fromJsonAsList(NutMap.class, monthSteps);
//判断数据是否完整 微信运动会在晚上10点多进行步数的更新 会导致31天前的步数获取变为0 所以这里去除掉第一个元素 即为31天前的数据 每次只保存最近30天的数据
if (Lang.isNotEmpty(steps) && steps.size() == 31) {
steps.remove(0);
}
// 传递过来的步数数据
List<FitnessWalkStep> wxSteps = steps.stream().map(v -> {
FitnessWalkStep step = new FitnessWalkStep();
step.setActivityId(activityId);
step.setUserId(userId);
step.setStep(v.getInt("step"));
// 计算积分,判断有没有设置,超过达标步数后,每达标XX步数,获得XX积分
int calculatedPoints = calculatePoints(isPoints, standSteps, standPoints, otherSteps, otherPoints, maxPoints, step.getStep());
step.setPoints(calculatedPoints);
DateTime date = DateUtil.parse(DateUtil.format(DateUtil.date(v.getLong("timestamp") * 1000), "yyyy-MM-dd"), "yyyy-MM-dd");
step.setApplyDate(date);
return step;
}).toList();
// 传递过来的所有日期的集合
List<Date> dateList = wxSteps.stream().map(FitnessWalkStep::getApplyDate).collect(Collectors.toList());
// 去数据库查询日期,这个玩意还要保证插入到数据库的单个日期只有一条,并且这个日期数据库之前有步数,传过来没步数那就要保留数据库的步数
// 上面日期集合数据库的步数
List<FitnessWalkStep> stepList = dao.query(FitnessWalkStep.class, Cnd.where("activityId", "=", activityId)
.and("userId", "=", userId).and("applyDate", "in", dateList));
// 这就是保留每天最大步数的集合,那这个集合里面applyDate就是唯一的了
List<FitnessWalkStep> dupStepList = new ArrayList<>(stepList.stream()
.collect(Collectors.toMap(FitnessWalkStep::getApplyDate, Function.identity(),
BinaryOperator.maxBy(Comparator.comparing(FitnessWalkStep::getStep))))
.values());
// 这是过滤的相同的applyDate的集合,这些数据要删除
List<String> delStepIds = stepList.stream()
.filter(step -> !dupStepList.contains(step))
.map(FitnessWalkStep::getId)
.collect(Collectors.toList());
// 数据库的数据 这个map就用于判断数据库的日期和传递过来日期的步数,两个是不是相等的,保留步数多的数据
Map<Date, FitnessWalkStep> dateStepMap = dupStepList.stream().collect(Collectors.toMap(FitnessWalkStep::getApplyDate, v -> v));
List<FitnessWalkStep> resultStepList = new ArrayList<>();
// 这里循环就是,循环的传递过来的数据
for (FitnessWalkStep step : wxSteps) {
// 数据库存储的步数
FitnessWalkStep walkStep = dateStepMap.get(step.getApplyDate());
// 如果数据库没有,那就要新增
if (Lang.isEmpty(walkStep)) {
resultStepList.add(step);
} else {
// 如果数据库有,那就要保留步数多的
if (walkStep.getStep() < step.getStep()) {
walkStep.setStep(step.getStep());
resultStepList.add(walkStep);
}
}
}
// 最后删除重复日期,更新步数数据
if (Lang.isNotEmpty(delStepIds)) {
dao.clear(FitnessWalkStep.class, Cnd.where("id", "in", delStepIds));
if (standSteps != null && standSteps > 0) {
// 删除积分明细
dao.clear(IntegralDetail.class, Cnd.where("id", "in", delStepIds));
}
}
if (Lang.isNotEmpty(resultStepList)) {
dao.insertOrUpdate(resultStepList);
if (standSteps != null && standSteps > 0) {
// 增加积分明细
int year = DateUtil.thisYear();
List<IntegralDetail> integralDetailList = resultStepList.stream().map(v -> {
IntegralDetail detail = new IntegralDetail();
detail.setId(v.getId());
detail.setYear(String.valueOf(year));
detail.setUserId(userId);
detail.setIntegral(String.valueOf(v.getPoints()));
detail.setIntegralNotes(integralNotes);
detail.setBizId(activityId);
detail.setIntegralTime(v.getApplyDate());
return detail;
}).toList();
List<IntegralDetail> list = integralDetailList.stream().filter(v -> !"0".equals(v.getIntegral())).toList();
if (Lang.isNotEmpty(list)) {
dao.insertOrUpdate(list);
}
}
}
return Result.success();
} catch (Exception e){
e.printStackTrace();
return Result.error("步数上传失败,请稍后重试,必要时请及时联系管理员");
}
}
/**
* 小程序获取开始时间至今的步数
*
* @param activityId
* @param userId
* @return
*/
@At
@Ok("json:full")
@ApiOperation("小程序获取开始时间至今的步数")
public Result getActivityDateStep(String activityId, String userId) {
try {
Cnd cnd = Cnd.NEW();
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
DateTime startTime = DateUtil.date(activity.getStartTime());
DateTime endTime = DateUtil.date(activity.getEndTime());
cnd.and("activityId", "=", activityId);
cnd.and("userId", "=", userId);
cnd.and("applyDate", ">=", startTime);
cnd.and("applyDate", "<=", endTime);
cnd.asc("applyDate");
cnd.groupBy("applyDate");
List<FitnessWalkStep> stepList = baseService.dao().query(FitnessWalkStep.class, cnd);
List<Map<String, ? extends Number>> collect = stepList.stream().map(v -> {
return Map.of("step", v.getStep(), "timestamp", v.getApplyDate().getTime());
}).collect(Collectors.toList());
return Result.success().addData(collect);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
@At
@Ok("json:full")
@ApiOperation("获取活动达标的进度条")
public Result getActivityQualifyProgressBar(String activityId, String userId) {
NutMap resultMap = NutMap.NEW();
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
//计步的抽奖模式 everyday custom
String lotteryMode = activity.getLotteryMode();
if ("everyday".equals(lotteryMode)) {
FitnessWalkActivity.DayLotteryRule dayLotteryRule = activity.getDayLotteryRule();
//每日抽奖资格步数
Integer lotteryQualificationStep = dayLotteryRule.getLotteryQualificationStep();
FitnessWalkStep userWalkStep = baseService.dao().fetch(FitnessWalkStep.class, Cnd.where("userId", "=", userId)
.and("DATE( applyDate )", "=", DateUtil.today()).and("activityId", "=", activityId));
int complianceDay = baseService.dao().count(FitnessWalkStep.class, Cnd.where("userId", "=", userId)
.and("DATE( applyDate )", "=", DateUtil.today()).and("activityId", "=", activityId)
.and("step", ">", lotteryQualificationStep));
// 今天的步数
Integer thisDayStep = userWalkStep.getStep();
// 去计算达标的百分比
BigDecimal lotteryQualificationStepBig = new BigDecimal(lotteryQualificationStep);
BigDecimal thisDayStepBig = new BigDecimal(thisDayStep);
//达标的小数,保留四位
BigDecimal divide = thisDayStepBig.divide(lotteryQualificationStepBig, 4, RoundingMode.HALF_UP);
BigDecimal percentValue = divide.multiply(new BigDecimal("100"));
// 格式化为两位小数
DecimalFormat decimalFormat = new DecimalFormat("#.##");
//百分数
String formattedPercent = decimalFormat.format(percentValue);
long betweenDay = DateUtil.date(activity.getStartTime()).between(DateUtil.date(activity.getEndTime()), DateUnit.DAY);
NutMap map = new NutMap();
map.setv("mode", "everyDayLottery");
//当前达标步数
map.setv("userStep", thisDayStep);
//达标总步数
map.setv("complianceSumStep", lotteryQualificationStep);
//达标比例
map.setv("complianceProportion", Integer.parseInt(formattedPercent));
//活动天数
map.setv("betweenDay", betweenDay);
//达标天数
map.setv("complianceDay", complianceDay);
resultMap.addv("everyDayLotteryMode", map);
} else if ("custom".equals(lotteryMode)) {
List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = activity.getCustomLotteryRules();
List<FitnessWalkStep> userWalkSteps = baseService.dao().
query(FitnessWalkStep.class, Cnd.where("userId", "=", userId)
.and("activityId", "=", activityId)
.and("DATE(applyDate)", ">=", DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"))
.and("DATE(applyDate)", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"))
);
List<NutMap> result = new ArrayList<>();
for (FitnessWalkActivity.CustomLotteryRule rule : customLotteryRules) {
NutMap nutMap = NutMap.NEW();
List<FitnessWalkStep> partSteps = userWalkSteps.stream()
.filter(s -> (DateUtil.compare(s.getApplyDate(), rule.getStartDate()) >= 0 && DateUtil.compare(s.getApplyDate(), rule.getEndDate()) <= 0))
.toList();
Integer lotteryQualificationDay = rule.getLotteryQualificationDay();
Integer lotteryQualificationStep = rule.getLotteryQualificationStep();
if (lotteryQualificationDay != null && lotteryQualificationStep != null) {
//每天步数
nutMap.put("mode", "customLotteryEveryDayStepMode");
//用户总达标步数
nutMap.put("userSumStep", partSteps.stream().filter(s -> DateUtil.compare(s.getApplyDate(), new Date(), "yyyy-MM-dd") == 0).findFirst().map(s -> s.getStep()).orElse(0));
//今天达标步数
nutMap.put("complianceStep", lotteryQualificationStep);
//总达标步数
nutMap.put("complianceSumStep", lotteryQualificationDay * lotteryQualificationStep);
//用户当前达标总天数
nutMap.put("userComplianceSumDay", partSteps.stream().filter(s -> s.getStep() > lotteryQualificationStep).count());
//总达标天数
nutMap.put("complianceSumDay", lotteryQualificationDay);
} else if (lotteryQualificationDay == null && lotteryQualificationStep != null) {
//总步数
nutMap.put("mode", "customLotterySumStepMode");
//用户总达标步数
nutMap.put("userSumStep", partSteps.stream().mapToInt(FitnessWalkStep::getStep).sum());
//总达标步数
nutMap.put("complianceSumStep", lotteryQualificationStep);
nutMap.put("title", DateUtil.format(rule.getStartDate(), "MM月dd日") + "" + DateUtil.format(rule.getEndDate(), "MM月dd日"));
}
result.add(nutMap);
}
resultMap.addv("customLotteryMode", result);
}
return Result.success().addData(resultMap);
}
/**
* 获取用户未读的奖
*
* @param activityId
* @param userId
* @return
*/
@At
@Ok("json:full")
@ApiOperation("获取用户未读的奖")
public Result winningRecord(String activityId, String userId) {
Sql sql = Sqls.create("""
select awardName,startDate,endDate from fitness_walk_award_user where activityId=@activityId and userId=@userId and isRead=@isRead
""").setParam("activityId",activityId).setParam("userId", userId).setParam("isRead",true);
/* List<FitnessWalkAwardUser> awardUsers = baseService.dao().query(FitnessWalkAwardUser.class,
Cnd.where("activityId", "=", activityId)
.and("userId", "=", userId).and("isRead", "=", true));*/
return Result.success(baseService.listMap(sql));
}
/**
* 计算积分
* @param isPointsEnabled
* @param standSteps
* @param standPoints
* @param otherSteps
* @param otherPoints
* @param maxPoints
* @param actualSteps
* @return
*/
private int calculatePoints(boolean isPointsEnabled,
Integer standSteps, Integer standPoints,
Integer otherSteps, Integer otherPoints,
Integer maxPoints, int actualSteps) {
// 基础条件检查
if (!isPointsEnabled || standSteps == null || standPoints == null || actualSteps < standSteps) {
return 0;
}
// 计算基础积分
int totalPoints = standPoints;
// 计算额外积分
if (hasExtraPoints(otherSteps, otherPoints)) {
int extraSteps = actualSteps - standSteps;
int extraPoints = (extraSteps / otherSteps) * otherPoints;
totalPoints += extraPoints;
}
// 应用积分上限
if (hasMaxPointsLimit(maxPoints)) {
return Math.min(totalPoints, maxPoints);
}
return totalPoints;
}
/**
* 检查是否有额外积分规则
*/
private boolean hasExtraPoints(Integer otherSteps, Integer otherPoints) {
return otherSteps != null && otherPoints != null && otherSteps > 0 && otherPoints > 0;
}
/**
* 检查是否有积分上限
*/
private boolean hasMaxPointsLimit(Integer maxPoints) {
return maxPoints != null && maxPoints > 0;
}
}
@@ -0,0 +1,285 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleRules;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleUser;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkStepRaffleService;
import com.budwk.app.zhgh.integral.model.IntegralDetail;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameFitnessWalkStepRaffleController
* @Date 2024/12/27 14:43
* @注释 健步走抽奖控制器
*/
@IocBean
@Ok("json")
@ApiOperation("健步走手动抽奖")
@At("/platform/fitnessWalk/stepRaffle")
public class FitnessWalkStepRaffleController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@Inject
private FitnessWalkStepRaffleService fitnessWalkStepRaffleService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepRaffle.html")
@SaCheckPermission("fitnessWalk.stepRaffle")
public void index() {
}
@At
@ApiOperation("获取抽奖列表")
@SaCheckPermission("fitnessWalk.stepRaffle")
public Result pageData(PageForm pageForm,
@Param("activityId") String activityId,
@Param("unionId") String unionId,
@Param("unitId") String unitId){
Sql sql = fitnessWalkStepRaffleService.getRaffleSql(pageForm, activityId, unionId, unitId);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("获取活动级联数据")
@SaCheckPermission("fitnessWalk.stepRaffle")
public Result getCascadersActivity(@Param("year") int year) {
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("设置抽奖规则,并抽奖")
@SLog(tag = "健步走手动抽奖", msg = "设置抽奖规则并抽奖")
@SaCheckPermission("fitnessWalk.stepRaffle")
public Result saveRaffle(FitnessWalkRaffleRules fitnessWalkRaffleRules){
baseService.dao().insertOrUpdate(fitnessWalkRaffleRules);
fitnessWalkStepRaffleService.manualLottery(fitnessWalkRaffleRules.getActivityId());
return null;
}
@At
@ApiOperation("获取抽奖规则")
@SaCheckPermission("fitnessWalk.stepRaffle")
public Result getRaffle(String activityId){
FitnessWalkRaffleRules raffleRules = baseService.dao().fetch(FitnessWalkRaffleRules.class, Cnd.where("activityId", "=", activityId));
return Result.success().addData(raffleRules);
}
/**
* 小程序获取奖项信息
* @param activityId
* @return
*/
@At
@ApiOperation("小程序获取奖项信息")
public Result getAwardList(String activityId){
List<NutMap> activityAwardList = fitnessWalkStepRaffleService.getActivityAwardList(activityId);
return Result.success().addData(activityAwardList);
}
/**
* 小程序获取自己的中奖信息
* @return
*/
@At
@ApiOperation("小程序获取自己的中奖信息")
public Result getAwardInfo(String activityId, String userId){
Dao dao = fitnessWalkStepRaffleService.dao();
FitnessWalkAwardUser awardUser = dao.fetch(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
FitnessWalkRaffleUser raffleUser = dao.fetch(FitnessWalkRaffleUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
NutMap map = NutMap.NEW();
if (Lang.isNotEmpty(raffleUser) && !raffleUser.getIsRaffle()) {
if (Lang.isNotEmpty(awardUser)) {
map.put("awardName", awardUser.getAwardName());
} else {
map.put("awardName", "没有中奖");
}
map.put("raffleNum", 1);
} else {
map.put("raffleNum", 0);
}
return Result.success().addData(map);
}
/**
* 小程序获取查询是否可以抽奖
* @return
*/
@At
@ApiOperation("小程序获取查询是否可以抽奖")
public Result checkRaffle(String activityId, String userId){
Dao dao = fitnessWalkStepRaffleService.dao();
FitnessWalkRaffleUser raffleUser = dao.fetch(FitnessWalkRaffleUser.class,
Cnd.where("activityId", "=", activityId)
.and("userId", "=", userId));
if (Lang.isNotEmpty(raffleUser)) {
return raffleUser.getIsRaffle() ? Result.error() : Result.success();
} else {
return Result.error();
}
}
/**
* 抽奖成功后,修改数据库状态
* @param activityId
* @param userId
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("抽奖成功后,修改数据库状态")
@SLog(tag = "健步走手动抽奖", msg = "抽奖成功后,修改数据库状态")
public Result updateUserAward(String activityId, String userId) {
fitnessWalkStepRaffleService.dao().update(FitnessWalkAwardUser.class,
Chain.make("isRead", true).add("applyDate", DateUtil.date()),
Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
fitnessWalkStepRaffleService.dao().update(FitnessWalkRaffleUser.class,
Chain.make("isRaffle", true),
Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
// 增加积分
FitnessWalkAwardUser awardUser = dao.fetch(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId));
IntegralDetail detail = new IntegralDetail();
detail.setId(awardUser.getId());
detail.setYear(String.valueOf(DateUtil.thisYear()));
detail.setUserId(awardUser.getUserId());
detail.setIntegral(String.valueOf(awardUser.getPoints()));
detail.setIntegralNotes(awardUser.getAwardName());
detail.setBizId(awardUser.getId());
detail.setIntegralTime(DateUtil.date());
dao.insert(detail);
return null;
}
@At
@Ok("void")
@ApiOperation("导出中奖名单")
@SaCheckPermission("fitnessWalk.stepRaffle")
public void exportAwardExcel(String searchKeyword, String activityId,
String lotteryTime, HttpServletResponse response) {
Cnd cnd = Cnd.NEW();
cnd.andEX("activityId", "=", activityId);
cnd.andEX("awardName", "=", lotteryTime);
if (StrUtil.isNotBlank(searchKeyword)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username", searchKeyword);
seg.orLike("loginName", searchKeyword);
cnd.and(seg);
}
cnd.and("isRead", "=", true);
List<FitnessWalkAwardUser> list = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, cnd);
for (FitnessWalkAwardUser awardUser : list) {
awardUser.setApplyDate(awardUser.getApplyDate());
}
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("分工会", "unionName", 20));
entityList.add(new ExcelExportEntity("单位", "unitName", 40));
entityList.add(new ExcelExportEntity("奖项名称", "awardName", 20));
entityList.add(new ExcelExportEntity("中奖时间", "applyDate2", 20));
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("健步走中奖人员名单.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@Ok("void")
@ApiOperation("导出健步走达标人员名单")
@SaCheckPermission("fitnessWalk.stepRaffle")
public void exportExcel(String searchKeyword, String activityId, String unionId,
String unitId, HttpServletResponse response) {
PageForm pageForm = new PageForm();
pageForm.setSearchKeyword(searchKeyword);
Sql sql = fitnessWalkStepRaffleService.getRaffleSql(pageForm, activityId, unionId, unitId);
List<NutMap> list = fitnessWalkStepRaffleService.listMap(sql);
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("分工会", "unionname", 20));
entityList.add(new ExcelExportEntity("单位", "unitname", 40));
entityList.add(new ExcelExportEntity("达标天数", "standardsDays", 20));
entityList.add(new ExcelExportEntity("步数", "total_steps", 20));
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("健步走达标人员名单.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,274 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 步数排行榜
*/
@Slf4j
@IocBean
@Ok("json")
@ApiOperation("健步走步数排行榜")
@At("/platform/fitnessWalk/stepRanking")
public class FitnessWalkStepRankingController {
@Inject
private BaseService baseService;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepRanking.html")
@SaCheckPermission("fitnessWalk.stepRanking")
public void index() {
}
@At
@ApiOperation("获取步数排行榜")
@SaCheckPermission("fitnessWalk.stepRanking")
public Result pageData(PageForm pageForm,
@Param("activityId") String activityId,
@Param("unionId") String unionId,
@Param("unitId") String unitId,
@Param("mode") String mode) {
Pagination pagination = fitnessWalkCommonService.getStepRankingPagination(pageForm, activityId, unionId, unitId, mode);
return Result.success().addData(pagination);
}
/**
* 获取所有教工 今天的步数及活动时间范围内的步数
*
* @param activityId
* @param mode day:今天 all:所有
* @return {@link Object}
*/
@At
@Ok("json:full")
@ApiOperation("获取今日步数及活动范围内步数")
@SLog(type = "校工会特色活动", tag = "健身走-计步步数排行榜", msg = "小程序接口(获取今日步数及活动范围内步数)")
public Result getUserStepRanking(String activityId, String mode, Integer pageNumber, Integer pageSize) {
if ("day".equals(mode)) {
Sql sql = Sqls.create("""
SELECT
t.step,
t.applyDate,
u.username
FROM
`fitness_walk_step` t
LEFT JOIN sys_user u ON u.id = t.userId
WHERE
t.activityId = @activityId
AND t.applyDate = @today
GROUP BY u.id
ORDER BY t.step DESC
""");
sql.setParam("activityId", activityId);
sql.setParam("today", DateUtil.today());
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
return Result.success().addData(pagination);
} else if ("week".equals(mode)) {
// 周榜
Date startOfWeek = DateUtil.beginOfWeek(new Date());
Date endOfWeek = DateUtil.endOfWeek(new Date());
Sql sql = Sqls.create("""
SELECT
t.userId,
sum( t.step ) AS step,
u.username
FROM
`fitness_walk_step` t
LEFT JOIN sys_user u ON u.id = t.userId
WHERE
t.activityId = @activityId
AND t.applyDate >= @startTime
AND t.applyDate <= @endTime
GROUP BY
t.userId
ORDER BY
step DESC
""");
sql.setParam("activityId", activityId);
sql.setParam("startTime", startOfWeek);
sql.setParam("endTime", endOfWeek);
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
return Result.success().addData(pagination);
} else if ("month".equals(mode)) {
// 月榜
Date firstDayOfMonth = DateUtil.beginOfMonth(new Date());
Date lastDayOfMonth = DateUtil.endOfMonth(new Date());
Sql sql = Sqls.create("""
SELECT
t.userId,
sum( t.step ) AS step,
u.username
FROM
`fitness_walk_step` t
LEFT JOIN sys_user u ON u.id = t.userId
WHERE
t.activityId = @activityId
AND t.applyDate >= @startTime
AND t.applyDate <= @endTime
GROUP BY
t.userId
ORDER BY
step DESC
""");
sql.setParam("activityId", activityId);
sql.setParam("startTime", firstDayOfMonth);
sql.setParam("endTime", lastDayOfMonth);
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
return Result.success().addData(pagination);
} else if ("all".equals(mode)) {
// 总达标榜
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
DateTime startTime = DateUtil.date(activity.getStartTime());
DateTime endTime = DateUtil.date(activity.getEndTime());
Sql sql = Sqls.create("""
SELECT
SUM(sub.max_step) AS step,
u.username
FROM (
SELECT
userId,
activityId,
applyDate,
MAX(step) AS max_step
FROM
fitness_walk_step
WHERE
activityId = @activityId
AND applyDate >= @startTime AND applyDate <= @endTime
GROUP BY
userId,
activityId,
applyDate
) sub
left join `user` u ON u.id = sub.userId
GROUP BY
userId
ORDER BY
step desc
""");
sql.setParam("activityId", activityId);
sql.setParam("startTime", startTime);
sql.setParam("endTime", endTime);
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
return Result.success().addData(pagination);
} else if ("points".equals(mode)) {
// 积分榜
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
DateTime startTime = DateUtil.date(activity.getStartTime());
DateTime endTime = DateUtil.date(activity.getEndTime());
Sql sql = Sqls.create("""
SELECT
SUM(sub.max_step) AS step,
u.username
FROM (
SELECT
userId,
activityId,
applyDate,
MAX(points) AS max_step
FROM
fitness_walk_step
WHERE
activityId = @activityId
AND applyDate >= @startTime AND applyDate <= @endTime
GROUP BY
userId,
activityId,
applyDate
) sub
left join `user` u ON u.id = sub.userId
GROUP BY
userId
ORDER BY
step desc
""");
sql.setParam("activityId", activityId);
sql.setParam("startTime", startTime);
sql.setParam("endTime", endTime);
Pagination pagination = baseService.listPageMap(pageNumber, 50, sql);
return Result.success().addData(pagination);
} else {
return null;
}
}
@At
@Ok("void")
@ApiOperation("步数排行榜导出")
@SaCheckPermission("fitnessWalk.stepRanking")
@SLog(type = "校工会特色活动", tag = "健身走-计步步数排行榜", msg = "步数排行榜导出", param = true, result = true)
public void exportExcel(@Param("searchName") String searchName,
@Param("searchKeyword") String searchKeyword,
@Param("activityId") String activityId,
@Param("unionId") String unionId,
@Param("unitId") String unitId,
@Param("mode") String mode,
HttpServletResponse response) {
List<NutMap> stepRankingList = fitnessWalkCommonService.getStepRankingList(searchName, searchKeyword, activityId, unionId, unitId, mode);
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("分工会", "unionname", 20));
entityList.add(new ExcelExportEntity("单位", "unitname", 20));
entityList.add(new ExcelExportEntity("today".equals(mode) ? "今日步数" : "活动期间总步数", "total_steps", 20));
try {
String title = ("today".equals(mode) ? DateUtil.format(new Date(), "yyyy年MM月dd日") : "活动期间总") + "步数榜.xlsx";
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, stepRankingList);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download(title, workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@ApiOperation("获取联级活动")
@SaCheckPermission("fitnessWalk.stepRanking")
public Result getCascadersActivity(@Param("year") int year) {
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
}
}
@@ -0,0 +1,165 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
@IocBean
@Ok("json")
@ApiOperation("计步步数统计")
@At("/platform/fitnessWalk/stepStatistics")
public class FitnessWalkStepStatisticsController {
@Inject
private BaseService baseService;
@Inject
private RedisService redisService;
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepStatistics.html")
@SaCheckPermission("fitnessWalk.stepStatistics")
public void index() {
}
/**
* 公共sql
* @return
*/
private String getSql() {
return """
SELECT
u.loginname,
u.username,
u.unionName AS unionname,
u.unitName AS unitname,
al.applyDate,
al.step,
date_format(al.applyDate,'%Y-%m-%d') as prizeData
FROM
`fitness_walk_step` al
LEFT JOIN `vw_user` u ON u.id = al.userId
$condition
""";
}
@At
@Ok("json:full")
@ApiOperation("计步步数统计")
@SaCheckPermission("fitnessWalk.stepStatistics")
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("activityId") String activityId,
@Param("activityDate") String[] activityDate,
@Param("unionId") String unionId,
@Param("unitId") String unitId) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create(getSql());
if (Lang.isNotEmpty(activityDate)) {
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", ">=", activityDate[0]);
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", "<=", activityDate[1]);
}
if(StrUtil.isNotBlank(pageForm.getSearchKeyword())){
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("u.username",pageForm.getSearchKeyword());
seg.orLike("u.loginname",pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.andEX("YEAR(al.applyDate)", "=", year);
cnd.andEX("al.activityId", "=", activityId);
cnd.andEX("u.unionid", "=", unionId);
cnd.andEX("u.unitId", "=", unitId);
cnd.desc("al.applyDate");
cnd.desc("u.unioncode");
cnd.groupBy("al.applyDate", "al.userId");
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("获取联级活动")
@SaCheckPermission("fitnessWalk.stepStatistics")
public Result getCascadersActivity(@Param("year") int year) {
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
}
@Ok("void")
@At("/exportExcel")
@ApiOperation("计步步数统计表导出")
@SaCheckPermission("fitnessWalk.stepStatistics")
public void exportExcel(@Param("activityId") String activityId,
@Param("activityDate") String[] activityDate,
@Param("unionId") String unionId,
@Param("unitId") String unitId, HttpServletResponse response) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create(getSql());
if (activityDate.length > 0) {
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", ">=", activityDate[0]);
cnd.and("date_format(al.applyDate,'%Y-%m-%d')", "<=", activityDate[1]);
}
cnd.andEX("al.activityId", "=", activityId);
cnd.andEX("u.unionid", "=", unionId);
cnd.andEX("u.unitId", "=", unitId);
cnd.desc("al.applyDate");
cnd.desc("u.unioncode");
sql.setCondition(cnd);
List<NutMap> exportList = baseService.listMap(sql);
List<ExcelExportEntity> entityList = new ArrayList<>() {{
add(new ExcelExportEntity("姓名", "username", 20));
add(new ExcelExportEntity("工号", "loginname", 20));
add(new ExcelExportEntity("单位", "unitname", 20));
add(new ExcelExportEntity("分工会", "unionname", 20));
add(new ExcelExportEntity("当前步数", "step", 20));
add(new ExcelExportEntity("日期", "prizeData", 20));
}};
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, exportList);
workbook.write(response.getOutputStream());
CommonDownloadUtil.download("计步步数统计表.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,155 @@
package com.budwk.app.zhgh.activity.fitnesswalk.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 用户中奖榜
*/
@IocBean
@Ok("json")
@ApiOperation("小程序计步步数中奖榜")
@At("/platform/fitnessWalk/stepWining")
public class FitnessWalkStepWiningController {
@Inject
private BaseService baseService;
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
@At("")
@Ok("beetl:/platform/zhgh/activity/fitnesswalk/stepWining.html")
@SaCheckPermission("fitnessWalk.stepWining")
public void index() {
}
/**
* 获取中奖榜
*
* @param activityId
* @return {@link Object}
*/
@At
@Ok("json:full")
@ApiOperation("小程序获取中奖榜")
@SLog(type = "校工会特色活动",tag = "健身走-计步步数中奖榜",msg = "获取中奖榜")
public Result getUserStepWining(String activityId) {
return Result.success().addData(fitnessWalkCommonService.getWiningRankingUserList(activityId));
}
@At
@ApiOperation("获取联级活动")
@SaCheckPermission("fitnessWalk.stepWining")
public Result getCascadersActivity(@Param("year") int year) {
return Result.success().addData(fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT));
}
@At
@Ok("void")
@ApiOperation("小程序中奖榜导出")
@SaCheckPermission("fitnessWalk.stepWining")
@SLog(type = "校工会特色活动",tag = "健身走-计步步数中奖榜",msg = "导出中奖榜")
public void exportUserStepWining(String activityId, HttpServletResponse response){
List<NutMap> winingRankingUserList = fitnessWalkCommonService.getWiningRankingUserList(activityId);
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("工号", "loginName", 20));
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("分工会", "unionName", 20));
entityList.add(new ExcelExportEntity("单位", "unitName", 40));
entityList.add(new ExcelExportEntity("奖项名称", "awardName", 20));
entityList.add(new ExcelExportEntity("步数", "awardSteps", 20));
entityList.add(new ExcelExportEntity("中奖时间", "applyDate", 20));
try {
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode("中奖明细.zip", "UTF-8"));
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
for (NutMap map : winingRankingUserList) {
List<NutMap> awardList = map.getAsList("awardList", NutMap.class);
awardList.forEach(v->v.setv("applyDate",DateUtil.format(v.getTime("applyDate"),"yyyy-MM-dd")));
zipOutputStream.putNextEntry(new ZipEntry(map.getString("title") + ".xlsx"));
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, awardList);
workbook.write(zipOutputStream);
zipOutputStream.closeEntry();
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 中奖奖项列表
*
* @param activityId
* @return
*/
@At
@ApiOperation("小程序获取中奖奖项列表")
public Result prizeOption(String activityId) {
List<NutMap> list = fitnessWalkCommonService.prizeOption(activityId);
return Result.success(list);
}
/**
* 中奖用户
* @param lotteryTime
* @param activityId
* @return
*/
@At
@ApiOperation("小程序获取中奖用户")
public Result prizeUsers(String lotteryTime, String activityId, String searchKeyword) {
Cnd cnd = Cnd.NEW();
cnd.andEX("activityId", "=", activityId);
cnd.andEX("awardName", "=", lotteryTime);
if (StrUtil.isNotBlank(searchKeyword)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("username", searchKeyword);
seg.orLike("loginName", searchKeyword);
cnd.and(seg);
}
cnd.and("isRead", "=", true);
List<FitnessWalkAwardUser> awardUserList = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, cnd);
return Result.success(awardUserList);
}
}
@@ -0,0 +1,235 @@
package com.budwk.app.zhgh.activity.fitnesswalk.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class FitnessWalkActivity {
@ApiModelProperty(value = "小程序活动Id")
private String _id;
// 主活动名称
@ApiModelProperty(value = "主活动名称")
private String masterActivityName;
// 分支活动名称
@ApiModelProperty(value = "分支活动名称")
private String branchActivityName;
// 活动地址
@ApiModelProperty(value = "活动地址")
private String address;
@ApiModelProperty(value = "活动礼品")
private String giftName;
@ApiModelProperty(value = "活动分组Id")
private String groupId;
@ApiModelProperty(value = "创建分工会Id")
private String unionId;
@ApiModelProperty(value = "活动模式")
private String activityModel;
@ApiModelProperty(value = "活动报名时间范围,时间戳模式")
private Long[] applyTime;
@ApiModelProperty(value = "活动报名开始时间")
private Long applyStartTime;
@ApiModelProperty(value = "活动报名结束时间")
private Long applyEndTime;
@ApiModelProperty(value = "活动时间范围,时间戳模式")
private Long[] time;
@ApiModelProperty(value = "活动开始时间")
private Long startTime;
@ApiModelProperty(value = "活动结束时间")
private Long endTime;
@ApiModelProperty(value = "活动描述")
private String note;
@ApiModelProperty(value = "活动封面")
private String cover;
@ApiModelProperty(value = "活动临时封面")
private String tempCover;
@ApiModelProperty(value = "是否需要答题")
private Boolean isQuestion;
@ApiModelProperty(value = "答题活动Id")
private String questionId;
@ApiModelProperty(value = "步数模式")
private String speedControlMode;
//打卡完成之后 gift_voucher:礼品券 cert:完赛证书 null啥也不干
@ApiModelProperty(value = "打卡完成之后操作")
private String punchFinishAfter;
//完赛证书
@ApiModelProperty(value = "完赛证书")
private String completionCertificateCover;
//完赛证书临时url
@ApiModelProperty(value = "完赛证书临时url")
private String tempCompletionCertificateCover;
//是否抽奖
@ApiModelProperty(value = "是否抽奖")
private Boolean isLottery;
//打卡模式奖品列表
@ApiModelProperty(value = "打卡完成之后抽奖信息")
private List<PunchLotteryPrize> punchLotteryPrizes;
@ApiModelProperty(value = "是否显示礼品券")
private Boolean showGiftTicket;
@ApiModelProperty(value = "知识卡的图片")
private List<Pts> pts;
@ApiModelProperty(value = "打开点位,线路")
private List<Point> linePoints;
@ApiModelProperty(value = "打开点位,线路2")
private List<Point> linePoints2;
//是否按顺序签到
@ApiModelProperty(value = "是否按顺序签到")
private Boolean isOrderSignIn;
//是否多条线路
@ApiModelProperty(value = "是否多条线路")
private Boolean isMultipleLines;
//抽奖模式 none无 everyday每天 monthly每月 custom自定义
@ApiModelProperty(value = "抽奖模式")
private String lotteryMode;
//每月抽奖模式抽奖时间
@ApiModelProperty(value = "每月抽奖模式抽奖时间")
private List<Date> everyMonthLotteryTime;
@ApiModelProperty(value = "自定义模式抽奖抽奖时间规则")
private List<CustomLotteryRule> customLotteryRules;
@ApiModelProperty(value = "每日模式抽奖抽奖时间规则")
private DayLotteryRule dayLotteryRule;
@ApiModelProperty(value = "随机图片数组")
private List<String> randomPics;
@ApiModelProperty(value = "模板随机图片数组")
private List<String> templateRandomPics;
@ApiModelProperty(value = "外链地址")
private String externalLinkAddress;
@ApiModelProperty(value = "是否开启距离限制")
private Boolean enableDistance;
@ApiModelProperty(value = "签到几个点位算完成")
private Integer finishPointNum;
@ApiModelProperty(value = "是否自动抽奖")
private Boolean isAutoLottery;
@ApiModelProperty(value = "手动抽奖,抽奖资格天数")
private Integer lotteryQualificationDays;
@ApiModelProperty(value = "手动抽奖,抽奖资格步数")
private Integer lotteryQualificationSteps;
@ApiModelProperty(value = "是否启用积分")
private Boolean isPoints;
@ApiModelProperty(value = "达标获得积分")
private Integer lotteryQualificationPoints;
@ApiModelProperty(value = "额外积分的达标步数")
private Integer otherSteps;
@ApiModelProperty(value = "根据额外步数来计算的额外积分")
private Integer otherPoints;
@ApiModelProperty(value = "封顶积分")
private Integer maxPoints;
@Data
public static class Point implements Serializable {
private String type;
private Double[] coordinates;
}
@Data
public static class Pts implements Serializable {
private int code;
private String name;
private int interval;
private List<String> issueIds;
private Point location;
private int radius;
private String tip;
}
/**
* 自定义抽奖规则
*/
@Data
public static class CustomLotteryRule implements Serializable {
//抽奖时间
private Date lotteryTime;
//抽奖从那天开始计算
private Date startDate;
//抽奖截至到哪天
private Date endDate;
//奖项名称
private String awardName;
//抽奖人数
private Integer lotteryUserNum;
//抽奖资格步数
private Integer lotteryQualificationStep;
//抽奖资格天数
private Integer lotteryQualificationDay;
}
/**
* 每日抽奖规则
*/
@Data
public static class DayLotteryRule implements Serializable {
//抽奖资格步数
private Integer lotteryQualificationStep;
//抽奖资格天数
private Integer lotteryQualificationDay;
//抽奖人数
private Integer lotteryUserNum;
//是否可以重复抽奖
private Boolean repeatLottery;
//是否可以增加抽奖机会
private Boolean addLotteryChance;
//每日抽奖模式抽奖时间
private String everyDayLotteryTime;
}
/**
* 打卡抽奖奖品列表
*/
@Data
public static class PunchLotteryPrize implements Serializable{
private String name;
private String value;
private String url;
//份数
private String num;
}
}
@@ -0,0 +1,101 @@
package com.budwk.app.zhgh.activity.fitnesswalk.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class FitnessWalkAwardUser extends BaseModel {
@Column
@Name
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@ColDefine(type = ColType.VARCHAR)
@Comment("活动")
private String activityId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("用户Id")
private String userId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("工号")
private String loginName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("姓名")
private String username;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("奖项名称")
private String awardName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("工会id")
private String unionId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("工会名称")
private String unionName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("单位id")
private String unitId;
@Column
@ColDefine(type = ColType.INT)
@Comment("达标天数")
private Integer standardsDays;
@Column
@ColDefine(type = ColType.VARCHAR, width = 20)
@Comment("中奖步数")
private String awardSteps;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("单位名称")
private String unitName;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("中奖时间")
private Date applyDate;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否已读")
private Boolean isRead;
@Column
@ColDefine(type = ColType.DATE)
@Comment("开始时间")
private Date startDate;
@Column
@ColDefine(type = ColType.DATE)
@Comment("结束时间")
private Date endDate;
@Column
@ColDefine(type = ColType.INT)
@Comment("积分")
private Integer points;
}
@@ -0,0 +1,78 @@
package com.budwk.app.zhgh.activity.fitnesswalk.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Table
@Data
@Comment("打卡模式抽奖记录")
public class FitnessWalkPunchLottery extends BaseModel {
@Column
@Name
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("活动Id")
private String activityId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("用户Id")
private String userId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("用户工号")
private String loginName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("中奖用户")
private String userName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 20)
@Comment("奖品名称")
private String prizeName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("奖品")
private String prizeId;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否中奖")
private Boolean isWin;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("中奖时间")
private Date winDate;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否已读")
private Boolean isRead;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("兑奖时间")
private Date exchangeDate;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否兑换")
private Boolean isExchange;
}
@@ -0,0 +1,55 @@
package com.budwk.app.zhgh.activity.fitnesswalk.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.io.Serializable;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameFitenssWalkRaffleRules
* @Date 2024/12/28 10:05
* @注释
*/
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class FitnessWalkRaffleRules extends BaseModel {
@Column
@Name
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@ColDefine(type = ColType.VARCHAR)
@Comment("活动id")
private String activityId;
@Column
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("手动抽奖规则")
private List<ManualLotteryRules> manualLotteryRules;
@Data
public static class ManualLotteryRules implements Serializable {
// 奖项名称
private String awardName;
// 奖项积分
private Integer points;
// 抽奖人数
private Integer lotteryUserNum;
// 抽奖类型
private String raffleType;
// 排名位次
private Integer rankingPosition;
// 是否兼得
private Boolean isSimultaneously;
}
}
@@ -0,0 +1,61 @@
package com.budwk.app.zhgh.activity.fitnesswalk.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
/**
* @version 1.0
* @Author zzr
* @nameFitnessWalkRaffleUser
* @Date 2024/12/28 17:10
* @注释
*/
@Data
@Table
@EqualsAndHashCode(callSuper = true)
public class FitnessWalkRaffleUser extends BaseModel {
@Column
@Name
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("活动id")
private String activityId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("用户id")
private String userId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("用户工号")
private String loginName;
@Column
@ColDefine(type = ColType.VARCHAR, width = 50)
@Comment("用户姓名")
private String username;
@Column
@ColDefine(type = ColType.INT)
@Comment("达标天数")
private Integer standardsDays;
@Column
@ColDefine(type = ColType.VARCHAR, width = 20)
@Comment("中奖步数")
private String awardSteps;
@Column
@ColDefine(type = ColType.BOOLEAN)
@Comment("是否已抽奖")
private Boolean isRaffle;
}
@@ -0,0 +1,50 @@
package com.budwk.app.zhgh.activity.fitnesswalk.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.io.Serializable;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
//@Table("fitness_walk_step_${month}")
@Table
public class FitnessWalkStep extends BaseModel implements Serializable {
private static final long serialVersionUID = 1L;
@Column
@Name
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@ColDefine(type = ColType.VARCHAR)
@Comment("活动id")
private String activityId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("姓名Id")
private String userId;
@Column
@ColDefine(customType = "int")
@Comment("步数")
private Integer step;
@Column
@ColDefine(type = ColType.INT)
@Comment("积分")
private Integer points;
@Column
@ColDefine(type = ColType.DATE)
@Comment("时间")
private Date applyDate;
}
@@ -0,0 +1,86 @@
package com.budwk.app.zhgh.activity.fitnesswalk.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.Cascader;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface FitnessWalkCommonService extends BaseService<FitnessWalkAwardUser> {
//活动缓存时间
int CACHE_TIME = 7200;
/**
* 活动,从Redis中取
*
* @param activityId 活动id
* @return
*/
FitnessWalkActivity getActivity(String activityId);
/**
* 获取所有活动
*
* @return
*/
List<FitnessWalkActivity> getAllActivity();
/**
* 级联活动
*/
List<Cascader> cascaderActivity(int year, FitnessWalkMode mode);
/**
* 添加活动或修改活动,存放至redis
*
* @param activity 活动
*/
void addOrEditDoSaveRedis(FitnessWalkActivity activity);
/**
* 健身走抽奖模式添加定时抽奖任务
*
* @param fitnessWalkActivity 活动
*/
void addLotteryTask(FitnessWalkActivity fitnessWalkActivity);
/**
* 获取步数排行榜
*
* @param activityId 活动id
* @param unionId 工会id
* @param unitId 单位id
* @param mode today all
* @return
*/
Pagination getStepRankingPagination(PageForm pageForm, String activityId, String unionId, String unitId, String mode);
List<NutMap> getStepRankingList(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode);
/**
* 获取中奖榜
*
* @param activityId 活动id
* @return
*/
List<NutMap> getWiningRankingUserList(String activityId);
/**
* 中奖奖项列表
* @param activityId
* @return
*/
List<NutMap> prizeOption(String activityId);
}
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.activity.fitnesswalk.service;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import org.nutz.lang.util.NutMap;
import java.util.List;
public interface FitnessWalkPunchStatisticsService extends BaseService<FitnessWalkAwardUser> {
List<NutMap> unionRegCheckInNum(String activityId, String unionId);
List<JSONObject> unionRegistrationData(String activityId, String unionId);
List<JSONObject> unionCheckInData(String activityId, String unionId);
List<JSONObject> exportNotGetGiftVoucherUsers(String activityId);
List<JSONObject> exportNotUseGiftVoucherUsers(String activityId);
}
@@ -0,0 +1,34 @@
package com.budwk.app.zhgh.activity.fitnesswalk.service;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleRules;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameFitnessWalkStepRaffleService
* @Date 2024/12/28 11:13
* @注释
*/
public interface FitnessWalkStepRaffleService extends BaseService<FitnessWalkRaffleRules> {
Sql getRaffleSql(PageForm pageForm, String activityId, String unionId, String unitId);
/**
* 获取活动的奖项
* @param activityId
* @return
*/
List<NutMap> getActivityAwardList(String activityId);
/**
* 手动抽奖
* @param activityId 活动id
*/
void manualLottery(String activityId);
}
@@ -0,0 +1,492 @@
package com.budwk.app.zhgh.activity.fitnesswalk.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_task;
import com.budwk.app.sys.services.SysTaskService;
import com.budwk.app.task.services.TaskPlatformService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.Cascader;
import com.budwk.app.zhgh.activity.fitnesswalk.contants.FitnessWalkMode;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@IocBean(args = {"refer:dao"})
public class FitnessWalkCommonServiceImpl extends BaseServiceImpl<FitnessWalkAwardUser> implements FitnessWalkCommonService {
@Inject
private RedisService redisService;
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Inject
private SysTaskService sysTaskService;
@Inject
private TaskPlatformService taskPlatformService;
public FitnessWalkCommonServiceImpl(Dao dao) {
super(dao);
}
/**
* 活动,从Redis中取
*
* @param activityId 活动id
* @return
*/
@Override
public FitnessWalkActivity getActivity(String activityId) {
if (StrUtil.isBlank(activityId)) {
throw new BaseException("请传递活动");
}
String redisKey = "FitnessWalk:" + activityId;
Boolean exists = redisService.exists("FitnessWalk:" + activityId);
FitnessWalkActivity activity = null;
exists = false;
if (exists) {
String string = redisService.get(redisKey);
activity = JSONUtil.toBean(string, FitnessWalkActivity.class);
if (Lang.isNotEmpty(activity.getRandomPics())) {
List<String> urlStr = new ArrayList<>();
for (String url : activity.getRandomPics()) {
String tempUrl = weAppCloudUtil.httpFile(url);
urlStr.add(tempUrl);
}
activity.setTemplateRandomPics(urlStr);
redisService.set(redisKey, JSONUtil.toJsonStr(activity));
}
if (Strings.isNotBlank(activity.getCover())) {
String tempUrl = weAppCloudUtil.httpFile(activity.getCover());
activity.setTempCover(tempUrl);
}
if(Strings.isNotBlank(activity.getCompletionCertificateCover())){
String tempUrl = weAppCloudUtil.httpFile(activity.getCompletionCertificateCover());
activity.setTempCompletionCertificateCover(tempUrl);
}
} else {
StringBuilder sql = new StringBuilder();
sql.append("db.collection('activity').doc('").append(activityId).append("').get()");
try {
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
activity = jsonObject.getJSONArray("data").stream()
.map(v -> JSONUtil.toBean((String) v, FitnessWalkActivity.class))
.findFirst().orElse(null);
if (Lang.isNotEmpty(activity.getRandomPics())) {
List<String> urlStr = new ArrayList<>();
for (String url : activity.getRandomPics()) {
String tempUrl = weAppCloudUtil.httpFile(url);
urlStr.add(tempUrl);
}
activity.setTemplateRandomPics(urlStr);
}
if (Strings.isNotBlank(activity.getCover())) {
String tempCover = weAppCloudUtil.httpFile(activity.getCover());
activity.setTempCover(tempCover);
}
if(Strings.isNotBlank(activity.getCompletionCertificateCover())){
String tempUrl = weAppCloudUtil.httpFile(activity.getCompletionCertificateCover());
activity.setTempCompletionCertificateCover(tempUrl);
}
redisService.setex(redisKey, CACHE_TIME, JSONUtil.toJsonStr(activity));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("获取数据异常!");
}
}
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
return SecurityUtil.getUnionId().equals(activity.getUnionId()) ? activity : null;
}
return activity;
}
@Override
public List<FitnessWalkActivity> getAllActivity() {
List<FitnessWalkActivity> fitnessWalkActivities;
if (redisService.exists("FitnessWalk:ActivityList")) {
String dataString = redisService.get("FitnessWalk:ActivityList");
fitnessWalkActivities = JSONUtil.toList(dataString, FitnessWalkActivity.class);
} else {
StringBuilder sql = new StringBuilder();
sql.append("db.collection('activity').field({")
.append("masterActivityName:true,")
.append("branchActivityName:true,")
.append("activityModel:true,")
.append("endTime:true,")
.append("startTime:true,")
.append("unionId:true")
.append("}).orderBy('startTime', 'desc').get()");
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString());
fitnessWalkActivities = jsonObject.getJSONArray("data").stream()
.map(v -> JSONUtil.toBean((String) v, FitnessWalkActivity.class)).collect(Collectors.toList());
}
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name(), RoleConstant.BRANCH_UNION_ADMIN.name())
&& !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
fitnessWalkActivities = fitnessWalkActivities.stream()
.filter(v -> SecurityUtil.getUnionId().equals(v.getUnionId()))
.collect(Collectors.toList());
}
redisService.set("FitnessWalk:ActivityList", JSONUtil.toJsonStr(fitnessWalkActivities));
return fitnessWalkActivities;
}
@Override
public List<Cascader> cascaderActivity(int year, FitnessWalkMode mode) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
long startTs = DateUtil.beginOfYear(calendar.getTime()).getTime();
long endTs = DateUtil.endOfYear(calendar.getTime()).getTime();
List<Cascader> cascaders = this.getAllActivity().stream()
.filter(v -> v.getActivityModel().equals(mode.getValue()) && v.getStartTime() >= startTs && v.getStartTime() <= endTs)
.collect(Collectors.groupingBy(FitnessWalkActivity::getMasterActivityName))
.entrySet().stream()
.map(entry -> {
Cascader cascader = new Cascader();
cascader.setValue(entry.getValue().stream().findFirst().map(FitnessWalkActivity::get_id).orElse(null));
cascader.setLabel(entry.getKey());
if (entry.getValue().size() > 1) {
List<Cascader> children = entry.getValue().stream().map(z -> {
Cascader cascader2 = new Cascader();
cascader2.setLabel(z.getBranchActivityName());
cascader2.setValue(z.get_id());
return cascader2;
}).collect(Collectors.toList());
cascader.setChildren(children);
}
return cascader;
})
.collect(Collectors.toList());
return cascaders;
}
@Override
public void addOrEditDoSaveRedis(FitnessWalkActivity activity) {
redisService.del("FitnessWalk:" + activity.get_id());
redisService.del("FitnessWalk:ActivityList");
redisService.set("FitnessWalk:" + activity.get_id(), JSONUtil.toJsonStr(activity));
}
@Override
public void addLotteryTask(FitnessWalkActivity fitnessWalkActivity) {
//删除和该活动关联的定时任务
List<Sys_task> oldTasks = sysTaskService.dao().query(Sys_task.class, Cnd.where("data", "like", "%" + fitnessWalkActivity.get_id() + "%"));
for (Sys_task task : oldTasks) {
taskPlatformService.delete(task.getId(), task.getId());
sysTaskService.delete(task.getId());
}
if ("everyday".equals(fitnessWalkActivity.getLotteryMode())) {
FitnessWalkActivity.DayLotteryRule dayLotteryRule = fitnessWalkActivity.getDayLotteryRule();
if (Lang.isNotEmpty(dayLotteryRule)) {
//每日抽奖时间
String lotteryTime = dayLotteryRule.getEveryDayLotteryTime();
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
Date timeDate = null;
try {
timeDate = timeFormat.parse(lotteryTime);
} catch (ParseException e) {
throw new RuntimeException(e);
}
String cron = timeDate.getSeconds() + " " + timeDate.getMinutes() + " " + timeDate.getHours() + " * * ?";
try {
List<String> cronExeTimes = taskPlatformService.getCronExeTimesPlus(cron);
if (CollectionUtil.isNotEmpty(cronExeTimes)) {
//调用类
String jobClass = "io.v.nutz.task.job.fitnessWalk.FitnessWalkLotteryJob";
HashMap<String, Object> map = new HashMap<>(5);
map.put("id", fitnessWalkActivity.get_id());
// 唯一标识的删除id,用于执行定时任务完成后,将此定时任务禁用
map.put("deleteId", R.UU32());
//每天抽奖达标步数
map.put("lotteryQualificationStep", dayLotteryRule.getLotteryQualificationStep().toString());
//每天抽奖人数
map.put("lotteryUserNum", dayLotteryRule.getLotteryUserNum().toString());
//抽奖模式
map.put("mode", "everyday");
// 设置定时任务
Sys_task task = new Sys_task();
task.setName(fitnessWalkActivity.getMasterActivityName() + "健步走计步模式每日抽奖任务");
task.setJobClass(jobClass);
task.setNote("健步走计步模式每日抽奖任务");
task.setCron(cron);
task.setData(Json.toJson(map));
task.setDisabled(false);
sysTaskService.insert(task);
taskPlatformService.add(task.getId(), task.getId(), task.getJobClass(), task.getCron(), task.getNote(), task.getData());
}
} catch (Exception e) {
e.printStackTrace();
}
}
} else if ("custom".equals(fitnessWalkActivity.getLotteryMode())) {
List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = fitnessWalkActivity.getCustomLotteryRules();
customLotteryRules.removeIf(Lang::isEmpty);
for (FitnessWalkActivity.CustomLotteryRule rule : customLotteryRules) {
Date lotteryTime = rule.getLotteryTime();
SimpleDateFormat dateFormatCron = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
// 设置定时任务执行时间
String cron = dateFormatCron.format(lotteryTime);
try {
//调用类
String jobClass = "io.v.nutz.task.job.fitnessWalk.FitnessWalkLotteryJob";
HashMap<String, Object> map = new HashMap<>(8);
map.put("id", fitnessWalkActivity.get_id());
// 唯一标识的删除id,用于执行定时任务完成后,将此定时任务禁用
map.put("deleteId", R.UU32());
//月抽奖达标步数
map.put("lotteryQualificationStep", rule.getLotteryQualificationStep().toString());
//月抽奖人数
map.put("lotteryUserNum", rule.getLotteryUserNum().toString());
//查询开始时间
map.put("startDate", rule.getStartDate());
//查询结束时间
map.put("endDate", rule.getEndDate());
//抽奖天数
map.put("lotteryQualificationDay", rule.getLotteryQualificationDay());
//获奖名称
map.put("awardName", rule.getAwardName());
//抽奖模式
map.put("mode", "custom");
Sys_task task = new Sys_task();
task.setName(fitnessWalkActivity.getMasterActivityName() + "健步走计步模式自定义抽奖任务");
task.setJobClass(jobClass);
task.setNote("健步走计步模式自定义抽奖任务");
task.setCron(cron);
task.setData(Json.toJson(map));
task.setDisabled(false);
sysTaskService.insert(task);
taskPlatformService.add(task.getId(), task.getId(), task.getJobClass(), task.getCron(), task.getNote(), task.getData());
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}
}
@Override
public Pagination getStepRankingPagination(PageForm pageForm, String activityId, String unionId, String unitId, String mode) {
Sql sql = rankingListSql(pageForm.getSearchName(), pageForm.getSearchKeyword(), activityId, unionId, unitId, mode);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
public List<NutMap> getStepRankingList(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode) {
Sql sql = rankingListSql(searchName, searchKeyword, activityId, unionId, unitId, mode);
return listMap(sql);
}
/**
* 获取中奖榜
*
* @param activityId 活动id
* @return
*/
@Override
public List<NutMap> getWiningRankingUserList(String activityId) {
FitnessWalkActivity activity = getActivity(activityId);
List<NutMap> resultMapList = new ArrayList<>();
if ("everyday".equals(activity.getLotteryMode())) {
String lastDayFormat = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd");
List<FitnessWalkAwardUser> awardUserList = dao().query(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId)
.and("DATE( applyDate )", ">=", lastDayFormat));
//昨天的中奖榜
List<FitnessWalkAwardUser> lastDayAwardUserList = awardUserList.stream().filter(v -> DateUtil.compare(v.getApplyDate(),
DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") == 0).collect(Collectors.toList());
NutMap lastDayAwardMap = new NutMap();
//昨日中奖时间
lastDayAwardMap.put("title", "昨日中奖榜");
lastDayAwardMap.put("lotteryTime", lastDayFormat);
lastDayAwardMap.put("awardName", "幸运奖");
lastDayAwardMap.put("awardList", lastDayAwardUserList);
resultMapList.add(lastDayAwardMap);
//今天的中奖榜
List<FitnessWalkAwardUser> thisDayAwardUserList = (List<FitnessWalkAwardUser>) CollectionUtil.subtract(awardUserList, lastDayAwardUserList);
NutMap thisDayAwardMap = new NutMap();
//今日中奖时间
lastDayAwardMap.put("title", "今日中奖榜");
thisDayAwardMap.put("lotteryTime", DateUtil.today());
thisDayAwardMap.put("awardName", "幸运奖");
thisDayAwardMap.put("awardList", thisDayAwardUserList);
resultMapList.add(thisDayAwardMap);
} else if ("custom".equals(activity.getLotteryMode())) {
List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = activity.getCustomLotteryRules();
//当前活动中奖榜单
List<FitnessWalkAwardUser> awardUserList = dao().query(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId));
for (FitnessWalkActivity.CustomLotteryRule rule : customLotteryRules) {
NutMap map = new NutMap();
List<FitnessWalkAwardUser> customAwardList = awardUserList.stream().filter(v -> DateUtil.compare(v.getApplyDate(), DateUtil.date(rule.getLotteryTime()), "yyyy-MM-dd") == 0).collect(Collectors.toList());
//自定义抽奖时间范围
map.put("title", DateUtil.format(DateUtil.date(rule.getStartDate()), "MM-dd") + "" + DateUtil.format(DateUtil.date(rule.getEndDate()), "MM-dd") + rule.getAwardName() + "中奖榜");
// map.put("customTimeRange", DateUtil.format(DateUtil.date(rule.getStartDate()), "yyyy-MM-dd") + "——" + DateUtil.format(DateUtil.date(rule.getEndDate()), "yyyy-MM-dd"));
//抽奖时间
map.put("lotteryTime", DateUtil.format(rule.getLotteryTime(), "yyyy-MM-dd"));
//奖项名称
map.put("awardName", rule.getAwardName());
//中奖人员
map.put("awardList", customAwardList);
resultMapList.add(map);
}
}
return resultMapList;
}
@Override
public List<NutMap> prizeOption(String activityId) {
List<FitnessWalkAwardUser> list = dao().query(FitnessWalkAwardUser.class,
Cnd.where("activityId", "=", activityId).groupBy("awardName").asc("awardName"));
List<NutMap> collect = list.stream().map(v -> {
NutMap map = new NutMap();
map.put("text", v.getAwardName());
map.put("value", v.getAwardName());
return map;
}).collect(Collectors.toList());
// FitnessWalkActivity activity = getActivity(activityId);
// if ("custom".equals(activity.getLotteryMode())) {
// List<FitnessWalkActivity.CustomLotteryRule> customLotteryRules = activity.getCustomLotteryRules();
// return customLotteryRules.stream().map(rule -> {
// NutMap map = new NutMap();
// map.put("text", DateUtil.format(DateUtil.date(rule.getStartDate()), "MM-dd") + "至" + DateUtil.format(DateUtil.date(rule.getEndDate()), "MM-dd") + rule.getAwardName() + "中奖榜");
// map.put("value", rule.getLotteryTime());
// return map;
// }).collect(Collectors.toList());
// }
return collect;
}
private Sql rankingListSql(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode) {
FitnessWalkActivity activity = getActivity(activityId);
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
u.id,
COALESCE(SUM(sub.step), 0) AS total_steps,
u.username,
u.loginname,
u.unionName,
u.unitName,
over3k.standardsDays
FROM
`vw_user` u
LEFT JOIN (
SELECT
userId,
applyDate,
step
FROM
`fitness_walk_step`
WHERE
step >= @step
AND activityId=@activityId
AND $dateSql
GROUP BY
userId,
applyDate
) AS sub ON u.id = sub.userId
LEFT JOIN (
SELECT
userId,
COUNT(DISTINCT DATE(applyDate)) AS standardsDays
FROM
`fitness_walk_step`
WHERE
step >= @step
AND activityId=@activityId
AND $dateSql
GROUP BY
userId
) AS over3k ON u.id = over3k.userId
$condition
""").setParam("activityId",activityId).setParam("step",0);
if ("today".equals(mode)) {
sql.setVar("dateSql",new Static("DATE(applyDate) = '"+DateUtil.today()+"'"));
// cnd.and("DATE( s.applyDate )", "=", DateUtil.today());
} else {
sql.setVar("dateSql",new Static("DATE(applyDate) >= '"
+DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd")+"' and DATE(applyDate) <= '"
+DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd")+"'"));
// cnd.and("DATE( s.applyDate )", ">=", DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"));
// cnd.and("DATE( s.applyDate )", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"));
}
if (Strings.isNotBlank(unitId)) {
cnd.and("u.unitId", "=", unitId);
}
if (Strings.isNotBlank(unionId)) {
cnd.and("u.unionId", "=", unionId);
}
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
cnd.and(searchName, "LIKE", "%" + searchKeyword + "%");
}
// cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId()));
cnd.groupBy("u.id","u.username","u.loginname","u.unionName","u.unitName","over3k.standardsDays");
cnd.desc("total_steps");
cnd.having(Cnd.NEW().and("COALESCE(SUM(sub.step), 0)",">",0));
sql.setCondition(cnd);
return sql;
}
}
@@ -0,0 +1,247 @@
package com.budwk.app.zhgh.activity.fitnesswalk.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkPunchStatisticsService;
import com.budwk.app.zhgh.activity.fitnesswalk.utils.WeAppCloudUtil;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@IocBean(args = {"refer:dao"})
public class FitnessWalkPunchStatisticsServiceImpl extends BaseServiceImpl<FitnessWalkAwardUser> implements FitnessWalkPunchStatisticsService {
public FitnessWalkPunchStatisticsServiceImpl(Dao dao) {
super(dao);
}
@Inject
private WeAppCloudUtil weAppCloudUtil;
@Override
public List<NutMap> unionRegCheckInNum(String activityId, String unionId) {
List<Sys_union> unions = dao().query(Sys_union.class, Cnd.NEW().desc("unioncode"));
//查询报名的数据
StringBuffer regCountSql = new StringBuffer();
regCountSql.append("db.collection('register').aggregate()");
regCountSql.append(".match({");
regCountSql.append("activity_id:'").append(activityId).append("'");
if (StrUtil.isNotBlank(unionId)) {
regCountSql.append(",unionid:'").append(unionId).append("'");
}
regCountSql.append("})");
regCountSql.append(".group({_id:'$unionid',count:$.sum(1)}).end()");
JSONObject regCountJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, regCountSql.toString());
Map<String, Integer> regCountData = regCountJsonObject.getJSONArray("data").stream().map(v -> {
JSONObject rowData = JSONUtil.parseObj((String) v);
String id = rowData.getStr("_id");
int count = rowData.getJSONObject("count").getInt("$numberInt");
return NutMap.NEW().addv("id", id).addv("count", count);
}).collect(Collectors.toMap(v -> v.getString("id"), v -> v.getInt("count")));
//查询打卡的数据
StringBuffer checkInCountSql = new StringBuffer();
checkInCountSql.append("db.collection('sign').aggregate()");
checkInCountSql.append(".match({");
checkInCountSql.append("activity_id:'").append(activityId).append("'");
if (StrUtil.isNotBlank(unionId)) {
checkInCountSql.append(",unionid:'").append(unionId).append("'");
}
checkInCountSql.append("})");
checkInCountSql.append(".group({_id:'$unionid',count: $.addToSet('$userid')})");
checkInCountSql.append(".project({_id: 0,unionid:'$_id',count:$.size('$count')})");
checkInCountSql.append(".end()");
JSONObject checkInCountJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, checkInCountSql.toString());
Map<String, Integer> checkInCountData = checkInCountJsonObject.getJSONArray("data").stream().map(v -> {
JSONObject rowData = JSONUtil.parseObj((String) v);
String id = rowData.getStr("unionid");
int count = rowData.getJSONObject("count").getInt("$numberInt");
return NutMap.NEW().addv("id", id).addv("count", count);
}).collect(Collectors.toMap(v -> v.getString("id"), v -> v.getInt("count")));
List<NutMap> list = unions.stream().map(v -> {
String id = v.getId();
String unionname = v.getName();
String unioncode = v.getUnionCode();
NutMap map = NutMap.NEW();
map.put("id", id);
map.put("unionname", unionname);
map.put("unioncode", unioncode);
map.put("regCount", regCountData.getOrDefault(id, 0));
map.put("checkInCount", checkInCountData.getOrDefault(id, 0));
return map;
}).collect(Collectors.toList());
return list;
}
@Override
public List<JSONObject> unionRegistrationData(String activityId, String unionId) {
StringBuffer sql = new StringBuffer("db.collection('register').aggregate()");
sql.append(".match({");
sql.append("activity_id:'").append(activityId).append("',unionid:'").append(unionId).append("'");
sql.append("})");
sql.append(".addFields({register_time_date:$.toDate('$register_time')})");
sql.append("""
.project({
_id:true,
loginname:true,
username:true,
unitname:true,
mobile:true,
sex:true,
register_time:true,
register_time_str: $.dateToString({
date: '$register_time_date',
format: '%Y-%m-%d %H:%M:%S',
timezone: 'Asia/Shanghai'
})
})
.sort({ unitname: 1 })
.end()
""");
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, sql.toString());
List<JSONObject> list = jsonObject.getJSONArray("data").stream().map(v -> JSONUtil.parseObj((String) v)).collect(Collectors.toList());
return list;
}
@Override
public List<JSONObject> unionCheckInData(String activityId, String unionId) {
// 查询打卡的数据,根据分工会来
String sql = """
db.collection('sign').aggregate()
.match({
activity_id: '%s',
unionid: '%s'
})
.lookup({
from: 'activity',
localField: 'activity_id',
foreignField: '_id',
as: 'activity'
})
.lookup({
from: 'gift_voucher',
let: {
signActivityId: '$activity_id',
signLoginName: '$loginname'
},
pipeline: $.pipeline()
.match({
$expr: {
$and: [
{ $eq: ['$activity_id', '$$signActivityId'] },
{ $eq: ['$loginname', '$$signLoginName'] }
]
}
})
.project({
used: 1,
_id: 0
})
.done(),
as: 'gift_voucher'
})
.addFields({
used: { $arrayElemAt: ['$gift_voucher.used', 0] },
masterActivityName: { $arrayElemAt: ['$activity.masterActivityName', 0] },
pts: { $arrayElemAt: ['$activity.pts', 0] },
})
.group({
_id: {
activity_id: '$activity_id',
loginname: '$loginname'
},
loginname: { $first: '$loginname' },
sex: { $first: '$sex' },
username: { $first: '$username' },
unitname: { $first: '$unitname' },
unionname: { $first: '$unionname' },
used: { $first: '$used' },
sign_size: { $sum: 1 },
masterActivityName: { $first: '$masterActivityName' },
pts_size: { $first: { $size: '$pts' } },
})
.project({
_id: 0,
loginname: 1,
sex: 1,
username: 1,
unitname: 1,
unionname: 1,
used: 1,
sign_size: { $toString: '$sign_size' },
masterActivityName: 1,
pts_size: { $toString: '$pts_size' }
})
.sort({ unitname: 1 })
.end()
""";
sql = sql.formatted(activityId, unionId);
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, sql);
List<JSONObject> list = jsonObject.getJSONArray("data").stream().map(v -> {
JSONObject jo = JSONUtil.parseObj((String) v);
if (jo.getInt("sign_size") > jo.getInt("pts_size")) {
jo.put("sign_size", jo.getInt("pts_size"));
}
return jo;
}).collect(Collectors.toList());
return list;
}
@Override
public List<JSONObject> exportNotGetGiftVoucherUsers(String activityId) {
//查询报名的人员
JSONObject regJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, """
db.collection('register').aggregate([
{ $match: { activity_id: '%s' } }
])
.sort({ unitname: 1 })
.end()
""".formatted(activityId));
//查询打完卡获得礼品券的人员
JSONObject giftUserJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, """
db.collection('gift_voucher').aggregate()
.match({ activity_id: '%s' })
.group({ _id: '$loginname' })
.project({ _id: 0, loginname: '$_id' })
.end()
""".formatted(activityId));
List<String> giftUserLoginNames = giftUserJsonObject.getJSONArray("data").stream().map(v -> {
JSONObject jo = JSONUtil.parseObj((String) v);
return jo.getStr("loginname");
}).toList();
List<JSONObject> list = regJsonObject.getJSONArray("data").stream()
.map(v -> JSONUtil.parseObj((String) v))
.filter(v -> !giftUserLoginNames.contains(v.getStr("loginname"))).collect(Collectors.toList());
return list;
}
@Override
public List<JSONObject> exportNotUseGiftVoucherUsers(String activityId) {
//查询未使用礼品券的人员
JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.AGGREGATE, """
db.collection('gift_voucher').aggregate()
.match({ activity_id: '%s', used: false })
.sort({ unitname: 1 })
.end()
""".formatted(activityId));
return jsonObject.getJSONArray("data").stream()
.map(v -> JSONUtil.parseObj((String) v)).collect(Collectors.toList());
}
}
@@ -0,0 +1,360 @@
package com.budwk.app.zhgh.activity.fitnesswalk.service.impl;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkActivity;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkAwardUser;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleRules;
import com.budwk.app.zhgh.activity.fitnesswalk.model.FitnessWalkRaffleUser;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkCommonService;
import com.budwk.app.zhgh.activity.fitnesswalk.service.FitnessWalkStepRaffleService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @version 1.0
* @Author zzr
* @nameFitnessWalkStepRaffleServiceImpl
* @Date 2024/12/28 11:17
* @注释
*/
@IocBean(args = {"refer:dao"})
public class FitnessWalkStepRaffleServiceImpl extends BaseServiceImpl<FitnessWalkRaffleRules> implements FitnessWalkStepRaffleService {
public FitnessWalkStepRaffleServiceImpl(Dao dao) {
super(dao);
}
@Inject
private FitnessWalkCommonService fitnessWalkCommonService;
/**
* 获取可抽奖用户,那就是达标用户
* @param pageForm
* @param activityId
* @param unionId
* @param unitId
* @return
*/
@Override
public Sql getRaffleSql(PageForm pageForm, String activityId, String unionId, String unitId) {
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
Integer lotteryQualificationDays = activity.getLotteryQualificationDays();
Integer lotteryQualificationSteps = activity.getLotteryQualificationSteps();
Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
u.id,
COALESCE(SUM(sub.step), 0) AS total_steps,
u.loginname,
u.username,
u.unionId,
u.unionName,
u.unitId,
u.unitName,
over3k.standardsDays
FROM
`vw_user` u
LEFT JOIN (
SELECT
userId,
applyDate,
step
FROM
`fitness_walk_step`
WHERE
activityId = @activityId
AND DATE(applyDate) >= @startDate
AND DATE(applyDate) <= @endDate
$lotteryQualificationDaySql
GROUP BY
userId,
applyDate
) AS sub ON u.id = sub.userId
LEFT JOIN (
SELECT
userId,
COUNT(DISTINCT DATE(applyDate)) AS standardsDays
FROM
`fitness_walk_step`
WHERE
activityId = @activityId
AND DATE(applyDate) >= @startDate
AND DATE(applyDate) <= @endDate
$lotteryQualificationDaySql
GROUP BY
userId
) AS over3k ON u.id = over3k.userId
$condition
""");
if (lotteryQualificationDays != null) {
sql.setVar("lotteryQualificationDaySql", new Static(" AND step >= '%s' ".formatted(lotteryQualificationSteps)));
cnd.having(cnd.and(new Static(" over3k.standardsDays >= '%s' ".formatted(lotteryQualificationDays))));
// sql.setVar("stepHavingSql", new Static(" over3k.standardsDays >= '%s' ".formatted(lotteryQualificationDays)));
} else {
cnd.having(cnd.and(new Static(" COALESCE(SUM(sub.step), 0) >= '%s' ".formatted(lotteryQualificationSteps))));
// sql.setVar("stepHavingSql", new Static(" COALESCE(SUM(sub.step), 0) >= '%s' ".formatted(lotteryQualificationSteps)));
}
sql.setParam("activityId", activityId);
sql.setParam("step", lotteryQualificationSteps);
sql.setParam("startDate", startDate);
sql.setParam("endDate", endDate);
if (Strings.isNotBlank(unitId)) {
cnd.and("u.unitId", "=", unitId);
}
if (Strings.isNotBlank(unionId)) {
cnd.and("u.unionId", "=", unionId);
}
if (pageForm != null && Strings.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("u.loginname", pageForm.getSearchKeyword());
seg.orLike("u.username", pageForm.getSearchKeyword());
cnd.and(seg);
}
// cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId()));
cnd.groupBy("u.id", "u.username", "u.loginname", "u.unionName", "u.unitName");
cnd.desc("total_steps");
sql.setCondition(cnd);
return sql;
}
/**
* 获取活动的奖项,然后再将奖项去遍历出来
* @param activityId
* @return { index: 0, name: '奖项名称', type: 0 }
*/
@Override
public List<NutMap> getActivityAwardList(String activityId) {
FitnessWalkRaffleRules rules = fetch(Cnd.where("activityId", "=", activityId));
List<FitnessWalkRaffleRules.ManualLotteryRules> manualLotteryRules = rules.getManualLotteryRules();
// 存放奖品列表
List<String> ruleList = new ArrayList<>();
// 奖品数量
int size = manualLotteryRules.size();
if (size == 1) {
String prize = manualLotteryRules.get(0).getAwardName();
for (int i = 0; i < 8; i++) {
ruleList.add(prize);
if (ruleList.size() < 8) {
ruleList.add("没有中奖");
}
}
} else if (size == 2) {
for (int i = 0; i < 8; i++) {
String prize = manualLotteryRules.get(i % size).getAwardName();
ruleList.add(prize);
if (ruleList.size() < 8) {
ruleList.add("没有中奖");
}
}
} else if (size == 3) {
for (int i = 0; i < 8; ) {
for (int j = 0; j < size && i < 8; j++) {
String prize = manualLotteryRules.get(j).getAwardName();
ruleList.add(prize);
if (ruleList.size() < 8) {
ruleList.add("没有中奖");
i += 2;
}
}
}
} else if (size == 4) {
for (int i = 0; i < 8; ) {
for (int j = 0; j < size && i < 8; j++) {
String prize = manualLotteryRules.get(j).getAwardName();
ruleList.add(prize);
if (ruleList.size() < 8) {
ruleList.add("没有中奖");
i += 2;
}
}
}
} else if (size == 5) {
ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList());
ruleList.add(2, "没有中奖");
ruleList.add(4, "没有中奖");
ruleList.add(7, "没有中奖");
} else if (size == 6) {
ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList());
ruleList.add(2, "没有中奖");
ruleList.add(6, "没有中奖");
} else {
ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList());
ruleList.add("没有中奖");
}
List<String> finalRuleList = ruleList;
List<NutMap> awardList = IntStream.range(0, ruleList.size())
.mapToObj(index -> {
String awardName = finalRuleList.get(index);
NutMap map = NutMap.NEW();
map.put("index", index);
map.put("name", awardName);
map.put("type", "没有中奖".equals(awardName) ? 1 : 0);
return map;
}).collect(Collectors.toList());
return awardList;
}
/**
* 手动抽奖
*
* @param activityId 活动id
*/
@Override
@Aop(TransAop.READ_COMMITTED)
public void manualLottery(String activityId) {
// 删除此活动下的获奖记录
dao().clear(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId));
dao().clear(FitnessWalkRaffleUser.class, Cnd.where("activityId", "=", activityId));
FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId);
Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd");
// 获取达标的所有人,按照步数倒序
Sql sql = getRaffleSql(null, activityId, null, null);
List<NutMap> list = listMap(sql);
List<FitnessWalkRaffleUser> raffleUserList = list.stream().map(v -> {
FitnessWalkRaffleUser raffleUser = new FitnessWalkRaffleUser();
raffleUser.setId(R.UU32());
raffleUser.setActivityId(activityId);
raffleUser.setUserId(v.getString("id"));
raffleUser.setLoginName(v.getString("loginname"));
raffleUser.setUsername(v.getString("username"));
raffleUser.setAwardSteps(v.getString("total_steps"));
raffleUser.setStandardsDays(v.getInt("standardsDays"));
raffleUser.setIsRaffle(false);
return raffleUser;
}).collect(Collectors.toList());
dao().fastInsert(raffleUserList);
Set<String> winningRankLoginNames = new HashSet<>();
// 获奖人员
List<FitnessWalkAwardUser> winningUsers = new ArrayList<>();
// 获取抽奖规则
FitnessWalkRaffleRules rules = fetch(Cnd.where("activityId", "=", activityId));
List<FitnessWalkRaffleRules.ManualLotteryRules> manualLotteryRules = rules.getManualLotteryRules();
// 找出是按照排名来颁奖的奖项
List<FitnessWalkRaffleRules.ManualLotteryRules> ranks = manualLotteryRules.stream().filter(v -> "排名".equals(v.getRaffleType()))
.sorted(Comparator.comparing(FitnessWalkRaffleRules.ManualLotteryRules::getRankingPosition)).toList();
for (FitnessWalkRaffleRules.ManualLotteryRules rank : ranks) {
String awardName = rank.getAwardName();
Integer lotteryUserNum = rank.getLotteryUserNum();
// 排除之前获奖的人,再倒序排列
List<NutMap> canLotteryUsers = list.stream()
.filter(v -> !winningRankLoginNames.contains(v.getString("loginname")))
.sorted(Comparator.comparingInt((NutMap v) -> v.getInt("total_steps")).reversed())
.toList();
// 截取当前奖项的中奖人员
List<NutMap> rankNutMaps = canLotteryUsers.subList(0, lotteryUserNum);
// 收集成中奖人员存储
List<FitnessWalkAwardUser> collect = rankNutMaps.stream().map(v -> {
FitnessWalkAwardUser awardUser = new FitnessWalkAwardUser();
awardUser.setId(R.UU32());
awardUser.setActivityId(activityId);
awardUser.setUserId(v.getString("id"));
awardUser.setLoginName(v.getString("loginname"));
awardUser.setUsername(v.getString("username"));
awardUser.setAwardName(awardName);
awardUser.setStartDate(startDate);
awardUser.setEndDate(endDate);
awardUser.setUnionId(v.getString("unionid"));
awardUser.setUnionName(v.getString("unionName"));
awardUser.setUnitId(v.getString("unitId"));
awardUser.setUnitName(v.getString("unitName"));
awardUser.setStandardsDays(v.getInt("standardsDays"));
awardUser.setAwardSteps(v.getString("total_steps"));
awardUser.setPoints(rank.getPoints());
return awardUser;
}).toList();
winningRankLoginNames.addAll(collect.stream().map(FitnessWalkAwardUser::getLoginName).toList());
winningUsers.addAll(collect);
}
List<FitnessWalkRaffleRules.ManualLotteryRules> reachList = manualLotteryRules.stream().filter(v -> "达标".equals(v.getRaffleType()))
.sorted(Comparator.comparing(FitnessWalkRaffleRules.ManualLotteryRules::getRankingPosition)).toList();
for (FitnessWalkRaffleRules.ManualLotteryRules reach : reachList) {
List<NutMap> nutMaps;
if (reach.getIsSimultaneously() != null && reach.getIsSimultaneously()) {
// 可以兼得, 达标了的抽奖就是全部达标的人
nutMaps = list;
} else {
// 不可兼得, 这里要排除其他奖项的中奖人员
nutMaps = list.stream().filter(v -> !winningRankLoginNames.contains(v.getString("loginname"))).collect(Collectors.toList());
}
// 抽奖人数
Integer lotteryUserNum = reach.getLotteryUserNum();
// 奖项名称
String awardName = reach.getAwardName();
// 这里是随机打乱了再去抽奖
List<NutMap> reachNutMaps = nutMaps.stream().collect(Collectors.collectingAndThen(Collectors.toList(), collected -> {
int size = Math.min(lotteryUserNum, collected.size());
Collections.shuffle(collected);
return collected.subList(0, size);
}));
List<FitnessWalkAwardUser> collect = reachNutMaps.stream().map(v -> {
FitnessWalkAwardUser awardUser = new FitnessWalkAwardUser();
awardUser.setId(R.UU32());
awardUser.setActivityId(activityId);
awardUser.setUserId(v.getString("id"));
awardUser.setLoginName(v.getString("loginname"));
awardUser.setUsername(v.getString("username"));
awardUser.setAwardName(awardName);
awardUser.setStartDate(startDate);
awardUser.setEndDate(endDate);
awardUser.setUnionId(v.getString("unionid"));
awardUser.setUnionName(v.getString("unionName"));
awardUser.setUnitId(v.getString("unitId"));
awardUser.setUnitName(v.getString("unitName"));
awardUser.setStandardsDays(v.getInt("standardsDays"));
awardUser.setAwardSteps(v.getString("total_steps"));
awardUser.setPoints(reach.getPoints());
return awardUser;
}).toList();
winningRankLoginNames.addAll(collect.stream().map(FitnessWalkAwardUser::getLoginName).toList());
winningUsers.addAll(collect);
}
dao().fastInsert(winningUsers);
}
}
@@ -0,0 +1,170 @@
package com.budwk.app.zhgh.activity.fitnesswalk.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RedisConstant;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* 微信小程序云开发工具类
*/
@IocBean
public class WeAppCloudUtil {
public static String ENV = "zufe-6guuuwl17ba1b011";
private static final String APPID = "wx093225a38487550f";
private static final String APP_SECRET = "23e506ca150f342e9afdcd772cced34a";
@Inject
public RedisService redisService;
public JSONObject request(CRUD crud, String sql) {
String url = crud.url.replace("ACCESS_TOKEN", getAccessToken());
String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json")
.body(JSONUtil.toJsonStr(Map.of("env", ENV, "query", sql))).execute().body();
JSONObject response = JSONUtil.parseObj(responseJson);
if (response.getInt("errcode") == 42001) {
redisService.del(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN);
// request(crud, sql);
} else if (response.getInt("errcode") == 40001) {
redisService.del(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN);
} else if (response.getInt("errcode") != 0) {
throw new RuntimeException("小程序云函数接口调用失败,errcode:" + response.getStr("errcode") + ",errmsg:" + response.getStr("errmsg"));
}
return response;
}
/**
* 获取token
*
* @return
*/
private String getAccessToken() {
String token = redisService.get(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN);
if (StrUtil.isNotBlank(token)) {
return token;
}
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET".replace("APPID", APPID).replace("APPSECRET", APP_SECRET);
String responseJson = HttpUtil.createGet(url).execute().body();
TokenResponse tokenResponse = JSONUtil.toBean(responseJson, TokenResponse.class);
// 微信的Access_token,两个小时过期,也就是7200秒
redisService.setex(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN, 7000, tokenResponse.getAccess_token());
return tokenResponse.getAccess_token();
/*String result = Http.get(url).getContent();
HashMap<String, Object> tokenObject = Json.fromJson(HashMap.class, result);
if (tokenObject.containsKey("errcode")) {
log.error("获取token失败------" + tokenObject.get("errmsg"));
throw new RuntimeException("获取token失败------" + tokenObject.get("errmsg"));
}
redisService.setex(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN, 7200 - 200, (String) tokenObject.get("access_token"));
return (String) tokenObject.get("access_token");
return null;*/
}
@Getter
@AllArgsConstructor
public enum CRUD {
INSERT("https://api.weixin.qq.com/tcb/databaseadd?access_token=ACCESS_TOKEN"),
QUERY("https://api.weixin.qq.com/tcb/databasequery?access_token=ACCESS_TOKEN"),
DELETE("https://api.weixin.qq.com/tcb/databasedelete?access_token=ACCESS_TOKEN"),
UPDATE("https://api.weixin.qq.com/tcb/databaseupdate?access_token=ACCESS_TOKEN"),
AGGREGATE("https://api.weixin.qq.com/tcb/databaseaggregate?access_token=ACCESS_TOKEN"),
COUNT("https://api.weixin.qq.com/tcb/databasecount?access_token=ACCESS_TOKEN");
private final String url;
}
@Data
public static class Response {
private int errcode;
private String erremsg;
}
@EqualsAndHashCode(callSuper = true)
@Data
public static class TokenResponse extends Response {
private int expires_in;
private String access_token;
}
/**
* 上传文件返回cloud—url
*
* @param rootPath
* @param file
* @return
*/
public String uploadFile(String rootPath, File file) {
String path = rootPath + file.getName();
String url = "https://api.weixin.qq.com/tcb/uploadfile?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", getAccessToken());
String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json")
.body(JSONUtil.toJsonStr(Map.of("env", ENV, "path", path))).execute().body();
JSONObject jsonObject = JSONUtil.parseObj(responseJson);
if (jsonObject.getInt("errcode") != 0) {
throw new RuntimeException(jsonObject.getStr("errmsg"));
}
try{
HttpUtil.createPost(jsonObject.getStr("url"))
.form("key", path)
.form("Signature", jsonObject.getStr("authorization"))
.form("x-cos-security-token", jsonObject.getStr("token"))
.form("x-cos-meta-fileid", jsonObject.getStr("cos_file_id"))
.form("file", file)
.execute().body();
return jsonObject.getStr("file_id");
}catch (Exception e){
return jsonObject.getStr("file_id");
}
}
public String httpFile(String fileId) {
String url = "https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", getAccessToken());
HashMap<Object, Object> body = new HashMap<>(2) {{
put("env", ENV);
put("file_list", new ArrayList<>() {{
add(new HashMap<>() {{
put("fileid", fileId);
put("max_age", 7200);
}});
}});
}};
Map mf = new HashMap<String, String>();
mf.put("fileid", fileId);
mf.put("max_age", 7200);
ArrayList<Map> fm = new ArrayList<>();
fm.add(mf);
body.put("file_list", fm);
String responseJson = HttpUtil.createPost(url)
.header("Content-Type", "application/json")
.body(JSONUtil.toJsonStr(body))
.execute().body();
System.out.println(JSONUtil.toJsonStr(body));
JSONObject jsonObject = JSONUtil.parseObj(responseJson);
if (jsonObject.getInt("errcode") != 0) {
throw new RuntimeException(jsonObject.getStr("errmsg"));
}
return jsonObject.getJSONArray("file_list").toList(JSONObject.class).get(0).getStr("download_url");
}
}
@@ -0,0 +1,308 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.data;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_file;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeDataRevel;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.boot.starter.ftp.FtpService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Criteria;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeDataRevelController
* @Date 2024/7/30 15:48
* @注释 职工建家资料管理
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家资料管理")
@At("/platform/workershome/data/revel")
public class WorkersHomeDataRevelController {
@Inject
private Dao dao;
@Inject
private FtpService ftpsService;
@Inject
private WorkersHomeInfoService workersHomeInfoService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/data/revel.html")
@SaCheckPermission("workershome.data.revel")
public void index() {
}
@At
@ApiOperation("获取职工小家的树形数据,按分工会展示")
@SaCheckPermission("workershome.data.revel")
public Result getTreeData(@Param("year") String year,
@Param("revelName") String revelName,
@Param("typeId") String typeId) {
NutMap nutMap = NutMap.NEW();
nutMap.setv("unionname", "工会委员会");
Sql sql = Sqls.create("""
select
un.*,
un.name AS unionname,
(select count(*) from workers_home_data_revel whdr where whdr.belongToUnionId = un.id $revelCount) as revelCount
from
sys_union un
$condition
""");
Criteria criteria = Cnd.cri();
criteria.where().setTop(false);
if (StringUtils.isNotBlank(year)) {
criteria.where().and("year(whdr.time)", "=", year);
}
if (StringUtils.isNotBlank(revelName)) {
criteria.where().and(Cnd.likeEX("whdr.revelName", revelName));
}
if (StringUtils.isNotBlank(typeId)) {
criteria.where().and("whdr.typeId", "=", typeId);
}
if (!criteria.where().isEmpty()) {
sql.vars().set("revelCount", "and " + criteria.toSql(null));
}
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("un.id", "=", SecurityUtil.getUnionId());
}
cnd.asc("un.unioncode");
sql.setCondition(cnd);
nutMap.setv("child", workersHomeInfoService.listMap(sql));
return Result.success().addData(List.of(nutMap));
}
@At
@ApiOperation("按照工会查询职工小家资料列表")
@SaCheckPermission("workershome.data.revel")
public Object pageData(PageForm pageForm,
@Param("year") String year,
@Param("revelName") String revelName,
@Param("typeId") String typeId,
@Param("unionId") String unionId) {
try {
Sql sql = Sqls.create("""
SELECT
whdr.*,
whdt.typeName
FROM
workers_home_data_revel whdr
LEFT JOIN workers_home_data_type whdt ON whdr.typeId = whdt.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("year(whdr.time)", "=", year);
if (StrUtil.isNotBlank(revelName)) {
cnd.and(Cnd.likeEX("whdr.revelName", revelName));
}
cnd.andEX("whdr.typeId", "=", typeId);
cnd.andEX("whdr.unionId", "=", unionId);
cnd.desc("whdr.time");
sql.setCondition(cnd);
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
} catch (Exception e) {
e.printStackTrace();
return Result.error();
}
}
@At
@ApiOperation("职工小家资料添加")
@SaCheckPermission("workershome.data.revel")
@SLog(tag = "职工小家资料添加", msg = "职工小家资料名称: ${args[0].revelName}")
public Result doAdd(WorkersHomeDataRevel workersHomeDataRevel) {
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
workersHomeDataRevel.setId(R.UU32());
workersHomeDataRevel.setUserId(user.getId());
workersHomeDataRevel.setUsername(user.getUsername());
workersHomeDataRevel.setLoginName(user.getLoginname());
workersHomeDataRevel.setUnitId(user.getUnitId());
workersHomeDataRevel.setUnitName(user.getUnitName());
workersHomeDataRevel.setUnionId(user.getUnionId());
workersHomeDataRevel.setUnionName(user.getUnionName());
workersHomeDataRevel.setTime(DateUtil.now());
if (StrUtil.isNotBlank(workersHomeDataRevel.getBelongToUnionId())) {
Sys_union union = dao.fetch(Sys_union.class, workersHomeDataRevel.getBelongToUnionId());
workersHomeDataRevel.setBelongToUnionName(union.getName());
} else {
workersHomeDataRevel.setBelongToUnionId(user.getUnionId());
workersHomeDataRevel.setBelongToUnionName(user.getUnionName());
}
dao.fastInsert(workersHomeDataRevel);
return Result.success();
}
@At
@ApiOperation("职工小家资料修改")
@SaCheckPermission("workershome.data.revel")
@SLog(tag = "职工小家资料修改", msg = "职工小家资料名称: ${args[0].revelName}")
public Result doEdit(WorkersHomeDataRevel workersHomeDataRevel) {
dao.update(workersHomeDataRevel);
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工小家资料删除")
@SaCheckPermission("workershome.data.revel")
@SLog(tag = "职工小家资料删除", msg = "职工小家资料id: ${args[0]}")
public Result doDelete(String id) {
WorkersHomeDataRevel revel = dao.fetch(WorkersHomeDataRevel.class, id);
if (revel != null) {
if (revel.getFiles() != null && !revel.getFiles().isEmpty()) {
Set<String> fileIds = revel.getFiles().stream().map(Sys_file::getId).collect(Collectors.toSet());
dao.clear(Sys_file.class, Cnd.where("id", "in", fileIds));
}
dao.clear(WorkersHomeDataRevel.class, Cnd.where("id", "=", id));
}
return Result.success();
}
@At
@Ok("void")
@ApiOperation("按工会导出所有资料")
@SaCheckPermission("workershome.data.revel")
public void exportAllFileByUnionId(String unionId, String unionName, HttpServletResponse response) {
response.reset();
response.setContentType("application/x-msdownload;charset=utf-8");
// 创建临时文件夹
String tmpPath = "tmp/" + R.UU32();
File tmpDir = new File(tmpPath + "/" + unionName + "附件汇总");
tmpDir.mkdirs();
List<WorkersHomeDataRevel> query = dao.query(WorkersHomeDataRevel.class, Cnd.where("belongToUnionId", "=", unionId));
try {
if (Lang.isNotEmpty(query)) {
for (WorkersHomeDataRevel revel : query) {
// 创建资料名称的文件夹
String fileName = revel.getRevelName();
File tDir = new File(tmpDir + "/" + fileName);
tDir.mkdirs();
// if (Lang.isNotEmpty(revel.getFiles())) {
// for (Sys_file file : revel.getFiles()) {
// FileOutputStream outputStream = new FileOutputStream(tDir.getPath() + "/" + file.getFilename());
// ftpsService.download(file.getFilepath(), outputStream);
// outputStream.close();
// }
// }
}
String aimsDir = "zipTmp/" + R.UU32();
String aimsName = unionName + "附件汇总.zip";
String aimsPath = aimsDir + "/" + aimsName;
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
File aimsFile = new File(aimsPath);
FileInputStream inputStream = new FileInputStream(aimsFile);
IOUtils.copy(inputStream, response.getOutputStream());
inputStream.close();
aimsFile.delete();
// FileUtil.deleteDir(new File(tmpPath));
// FileUtil.deleteDir(new File(aimsDir));
}
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@Ok("void")
@ApiOperation("导出单个资料")
@SaCheckPermission("workershome.data.revel")
public void exportAllFileById(String id, HttpServletResponse response) {
response.reset();
response.setContentType("application/x-msdownload;charset=utf-8");
WorkersHomeDataRevel dataRevel = dao.fetch(WorkersHomeDataRevel.class, Cnd.where("id", "=", id));
// 创建临时文件夹
String tmpPath = "tmp/" + R.UU32();
File tmpDir = new File(tmpPath + "/" + dataRevel.getBelongToUnionName() + dataRevel.getRevelName() + "附件汇总");
tmpDir.mkdirs();
try {
if (Lang.isNotEmpty(dataRevel.getFiles())) {
// for (Sys_file file : dataRevel.getFiles()) {
// FileOutputStream outputStream = new FileOutputStream(tmpDir.getPath() + "/" + file.getFilename());
// ftpsService.download(file.getFilepath(), outputStream);
// outputStream.close();
// }
}
String aimsDir = "zipTmp/" + R.UU32();
String aimsName = dataRevel.getBelongToUnionName() + dataRevel.getRevelName() + "附件汇总.zip";
String aimsPath = aimsDir + "/" + aimsName;
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
File aimsFile = new File(aimsPath);
FileInputStream inputStream = new FileInputStream(aimsFile);
IOUtils.copy(inputStream, response.getOutputStream());
inputStream.close();
aimsFile.delete();
// FileUtil.deleteDir(new File(tmpPath));
// FileUtil.deleteDir(new File(aimsDir));
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,134 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.data;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeDataType;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.random.R;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeDataTypeController
* @Date 2024/7/30 15:48
* @注释
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家资料类型管理")
@At("/platform/workershome/data/type")
public class WorkersHomeDataTypeController {
@Inject
private WorkersHomeInfoService workersHomeInfoService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/data/type.html")
@SaCheckPermission("workershome.data.type")
public void index() {
}
@At
@ApiOperation("资料类型数据展示")
@SaCheckPermission("workershome.data.type")
public Result pageData(PageForm pageForm,
@Param("typeName") String typeName) {
Sql sql = Sqls.create("select * from workers_home_data_type $condition");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(typeName)) {
cnd.and(Cnd.likeEX("typeName", typeName));
}
cnd.asc("serialNum");
sql.setCondition(cnd);
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("新增资料类型")
@SaCheckPermission("workershome.data.type")
@SLog(tag = "职工小家资料类型添加", msg = "职工小家资料类型名称: ${args[0].typeName}")
public Result doAdd(WorkersHomeDataType workersHomeDataType) {
int count = workersHomeInfoService.dao().count("workers_home_data_type", Cnd.where("code", "=", workersHomeDataType.getCode()));
if (count > 0) {
return Result.error("编码重复");
}
workersHomeDataType.setId(R.UU32());
int totalCount = workersHomeInfoService.count("workers_home_data_type");
workersHomeDataType.setSerialNum(totalCount + 1);
workersHomeInfoService.insert("workers_home_data_type", Chain.from(workersHomeDataType));
return Result.success();
}
@At
@ApiOperation("修改资料类型")
@SaCheckPermission("workershome.data.type")
@SLog(tag = "职工小家资料类型修改", msg = "职工小家资料类型名称: ${args[0].typeName}")
public Result doEdit(WorkersHomeDataType workersHomeDataType) {
int count = workersHomeInfoService.count("workers_home_data_type", Cnd.where("code", "=", workersHomeDataType.getCode()).and("id", "!=", workersHomeDataType.getId()));
if (count > 0) {
return Result.error("编码重复");
}
workersHomeInfoService.update("workers_home_data_type", Chain.from(workersHomeDataType), Cnd.where("id", "=", workersHomeDataType.getId()));
return Result.success();
}
@At
@ApiOperation("删除资料类型")
@SaCheckPermission("workershome.data.type")
@SLog(tag = "职工小家资料类型删除", msg = "职工小家资料类型id: ${args[0]}")
public Result doDelete(String id) {
workersHomeInfoService.dao().clear(WorkersHomeDataType.class, Cnd.where("id", "=", id));
return Result.success();
}
@At
@ApiOperation("获取所有资料类型")
@SaCheckPermission("workershome.data.type")
public Result getAllWakesHomeDataType() {
List<WorkersHomeDataType> list = workersHomeInfoService.dao().query(WorkersHomeDataType.class, Cnd.NEW().asc("serialNum"));
return Result.success().addData(list);
}
@At
@ApiOperation("资料类型排序")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("workershome.data.type")
public Result serialNumChange(String id, Integer serialNum, boolean toDown) {
if (toDown) {
WorkersHomeDataType next = workersHomeInfoService.dao().fetch(WorkersHomeDataType.class, Cnd.where("serialNum", "=", serialNum + 1));
next.setSerialNum(serialNum - 1);
workersHomeInfoService.dao().update(next);
workersHomeInfoService.dao().update(WorkersHomeDataType.class, Chain.make("serialNum", serialNum + 1), Cnd.where("id", "=", id));
} else {
WorkersHomeDataType pre = workersHomeInfoService.dao().fetch(WorkersHomeDataType.class, Cnd.where("serialNum", "=", serialNum - 1));
pre.setSerialNum(serialNum + 1);
workersHomeInfoService.dao().update(pre);
workersHomeInfoService.dao().update(WorkersHomeDataType.class, Chain.make("serialNum", serialNum - 1), Cnd.where("id", "=", id));
}
return Result.success();
}
}
@@ -0,0 +1,93 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeDeclarationApplyController
* @Date 2024/7/30 14:06
* @注释 职工建家申报
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家申报")
@At("/platform/workershome/declaration/apply")
public class WorkersHomeDeclarationApplyController {
@Inject
private WorkersHomeApplyService workersHomeApplyService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/apply.html")
@SaCheckPermission("workershome.declaration.apply")
public void index() {}
@At
@ApiOperation("职工建家申报保存")
@SLog(tag = "职工建家申报保存", msg = "职工建家申报信息")
@SaCheckPermission("workershome.declaration.apply")
public Result doSave(WorkersHomeApply workersHomeApply) {
workersHomeApply.setState("10000");
if (StrUtil.isNotBlank(workersHomeApply.getId())) {
workersHomeApplyService.update(workersHomeApply);
} else {
workersHomeApplyService.setParams(workersHomeApply);
workersHomeApplyService.fastInsert(workersHomeApply);
}
return Result.success();
}
@At
@ApiOperation("职工建家申报提交")
@SLog(tag = "职工建家申报提交", msg = "职工建家申报信息")
@SaCheckPermission("workershome.declaration.apply")
public Result doSubmit(WorkersHomeApply workersHomeApply) {
workersHomeApply.setState("10020");
if (StrUtil.isNotBlank(workersHomeApply.getId())) {
workersHomeApplyService.update(workersHomeApply);
} else {
workersHomeApply.setId(R.UU32());
workersHomeApplyService.setParams(workersHomeApply);
workersHomeApplyService.fastInsert(workersHomeApply);
}
return Result.success();
}
@At
@ApiOperation("职工建家申报信息查询")
@SaCheckPermission(value = {"workershome.declaration.apply","workershome.declaration.mine",
"workershome.declaration.organization", "workershome.declaration.school",
"workershome.declaration.statistics"}, mode = SaMode.OR)
public Result getInfoById(String id){
NutMap map = workersHomeApplyService.findById(id);
return Result.success().addData(map);
}
@At
@ApiOperation("职工建家申报工会信息查询")
@SaCheckPermission("workershome.declaration.apply")
public Result getWakesHomeUnitInfo() {
WorkersHomeApply apply = workersHomeApplyService.fetch(Cnd.where("unionId", "=", SecurityUtil.getUnionId()));
return Result.success().addData(apply);
}
}
@@ -0,0 +1,147 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeDeclarationMineController
* @Date 2024/7/30 14:06
* @注释 我的建家申报
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家我的申报")
@At("/platform/workershome/declaration/mine")
public class WorkersHomeDeclarationMineController {
@Inject
private WorkersHomeApplyService workersHomeApplyService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/mine.html")
@SaCheckPermission("workershome.declaration.mine")
public void index() {
}
@At
@ApiOperation("获取职工建家我的申报列表")
@SaCheckPermission("workershome.declaration.mine")
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("unionId") String unionId) {
Sql sql = Sqls.create("""
SELECT
wh.*,
audit.stateName
FROM
`workers_home_apply` wh
LEFT JOIN audit_state audit ON wh.state = audit.stateId
AND audit.module = 'workershome'
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(wh.applyDate)", "=", year);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("unionId", "=", unionId);
}
sql.setCondition(cnd);
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工建家我的申报删除")
@SLog(tag = "职工建家我的申报删除", msg = "职工建家我的申报id: ${args[0]}")
@SaCheckPermission(value = {"workershome.declaration.apply", "workershome.declaration.mine"}, mode = SaMode.OR)
public Result doDelete(String id) {
WorkersHomeApply apply = workersHomeApplyService.fetch(id);
if (StrUtil.isNotBlank(apply.getOrganizationAuditId())) {
workersHomeApplyService.dao().delete(Audit.class, apply.getOrganizationAuditId());
}
if (StrUtil.isNotBlank(apply.getSchoolAuditId())) {
workersHomeApplyService.dao().delete(Audit.class, apply.getSchoolAuditId());
}
workersHomeApplyService.delete(id);
return Result.success();
}
@At
@Ok("void")
public void openExport(String id, HttpServletResponse response) {
// try {
// NutMap nutMap = workersHomeApplyService.findById(id);
//
// HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
// HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
// htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
//
// Configure config = Configure.newBuilder()
// .bind("basicInformation", htmlRenderPolicy)
// .bind("constructionPlan", htmlRenderPolicy).build();
// HashMap<String, Object> map = new HashMap<>();
// String fileName = Globals.schoolName + "“教工小家”建设计划书";
// map.put("fileName", fileName);
// map.put("schoolName", Globals.schoolName);
// map.put("unionName", nutMap.getString("unionName"));
// map.put("applyDate", nutMap.getString("applyDate"));
// map.put("username", nutMap.getString("username"));
// map.put("mobile", nutMap.getString("mobile"));
// map.put("basicInformation", nutMap.getString("basicInformation"));
// map.put("constructionPlan", nutMap.getString("constructionPlan"));
// NutMap schoolAudit = nutMap.getAs("schoolAudit", NutMap.class);
// if (Lang.isNotEmpty(schoolAudit)){
// schoolAudit.setv("auditTime", DateUtil.formatDate(schoolAudit.getTime("auditTime")));
// schoolAudit.setv("auditSign", Vi.getImg(schoolAudit.getString("auditSign")));
// map.put("schoolAudit", schoolAudit);
// }
// NutMap organizationAudit = nutMap.getAs("organizationAudit", NutMap.class);
// if (Lang.isNotEmpty(organizationAudit)){
// organizationAudit.setv("auditTime", DateUtil.formatDate(organizationAudit.getTime("auditTime")));
// organizationAudit.setv("auditSign", Vi.getImg(organizationAudit.getString("auditSign")));
// map.put("organizationAudit", organizationAudit);
// }
//
//
//
//
// response.addHeader("Content-Type", "application/octet-stream");
// response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\".docx");
// InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("docTemplate/workershome/workershome.docx");
// XWPFTemplate.compile(inputStream, config).render(map, response.getOutputStream());
// inputStream.close();
// } catch (Exception e) {
// e.printStackTrace();
// }
}
}
@@ -0,0 +1,100 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @version 1.0
* @Author zzr
* @nameWakesHomeDeclarationOrganization
* @Date 2024/7/30 14:07
* @注释 建家申报党组织审核
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家申报党组织审核")
@At("/platform/workershome/declaration/organization")
public class WorkersHomeDeclarationOrganizationController {
@Inject
private WorkersHomeApplyService workersHomeApplyService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/organizationAudit.html")
@SaCheckPermission("workershome.declaration.organization")
public void index() {
}
@At
@ApiOperation("职工建家申报党组织审核")
@SaCheckPermission("workershome.declaration.organization")
public Result pageData(PageForm pageForm, @Param("year") Integer year,
@Param("unionId") String unionId, @Param("isAudit") String isAudit) {
Sql sql = Sqls.create("""
SELECT
wh.*,
audit.stateName
FROM
`workers_home_apply` wh
LEFT JOIN audit_state audit ON wh.state = audit.stateId
AND audit.module = 'workershome'
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("wh.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("wh.unionId", "=", unionId);
}
cnd.andEX("YEAR(wh.applyDate)", "=", year);
cnd.and("wh.state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 10010);
sql.setCondition(cnd);
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工建家申报党组织审核")
@SaCheckPermission("workershome.declaration.organization")
public Result doAudit(@Param("audit") Audit audit, String id) {
Boolean auditPass = audit.getAuditPass();
workersHomeApplyService.dao().insert(audit);
workersHomeApplyService.update(Chain.make("state", auditPass ? 10020 : 10015)
.add("organizationAuditId", audit.getId()), Cnd.where("id", "=", id));
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("workershome.declaration.organization")
public Result doRollBack(String id){
WorkersHomeApply workershome = workersHomeApplyService.fetch(id);
workersHomeApplyService.dao().clear(Audit.class,Cnd.where("id","=",workershome.getOrganizationAuditId()));
workersHomeApplyService.update(Chain.make("state",10010).add("organizationAuditId",null),Cnd.where("id","=",id));
return Result.success();
}
}
@@ -0,0 +1,119 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeDeclarationSchoolController
* @Date 2024/7/30 14:07
* @注释 建家申报校工会审核
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家校工会审核")
@At("/platform/workershome/declaration/school")
public class WorkersHomeDeclarationSchoolController {
@Inject
private WorkersHomeApplyService workersHomeApplyService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/schoolAudit.html")
@SaCheckPermission("workershome.declaration.school")
public void index() {
}
@At
@ApiOperation("获取职工建家校工会审核列表")
@SaCheckPermission("workershome.declaration.school")
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("unionId") String unionId,
@Param("isAudit") String isAudit) {
Sql sql = Sqls.create("""
SELECT
wh.*,
audit.stateName
FROM
`workers_home_apply` wh
LEFT JOIN audit_state audit ON wh.state = audit.stateId
AND audit.module = 'workershome'
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("wh.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("wh.unionId", "=", unionId);
}
cnd.andEX("YEAR(wh.applyDate)", "=", year);
cnd.and("wh.state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 10020);
sql.setCondition(cnd);
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工建家校工会审核")
@SaCheckPermission("workershome.declaration.school")
@SLog(tag = "职工建家校工会审核", msg = "职工建家校工会审核id: ${args[1]}")
public Result doAudit(@Param("audit") Audit audit, String id) {
Boolean auditPass = audit.getAuditPass();
workersHomeApplyService.dao().insert(audit);
workersHomeApplyService.update(Chain.make("state", auditPass ? 10030 : 10025)
.add("schoolAuditId", audit.getId()), Cnd.where("id", "=", id));
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工建家校工会审核撤回")
@SaCheckPermission("workershome.declaration.school")
@SLog(tag = "职工建家校工会审核撤回", msg = "职工建家校工会审核撤回id: ${args[0]}")
public Result doRollBack(String id) {
WorkersHomeApply workersHome = workersHomeApplyService.fetch(id);
workersHomeApplyService.dao().clear(Audit.class, Cnd.where("id", "=", workersHome.getSchoolAuditId()));
workersHomeApplyService.update(Chain.make("state", 10020).add("schoolAuditId", null), Cnd.where("id", "=", id));
return Result.success();
}
@At
@ApiOperation("职工建家校工会审核文件上传")
@SaCheckPermission("workershome.declaration.school")
public Result doFiles(String id, String files) {
WorkersHomeApply wakesHomeApply = new WorkersHomeApply();
wakesHomeApply.setId(id);
wakesHomeApply.setFiles(JSONUtil.toList(files, JSONObject.class));
workersHomeApplyService.updateIgnoreNull(wakesHomeApply);
return Result.success();
}
}
@@ -0,0 +1,71 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.declaration;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeDeclarationStatisticsController
* @Date 2024/8/2 15:00
* @注释 申报,查询统计
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工建家统计")
@At("/platform/workershome/declaration/statistics")
public class WorkersHomeDeclarationStatisticsController {
@Inject
private WorkersHomeApplyService workersHomeApplyService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/declaration/statistics.html")
@SaCheckPermission("workershome.declaration.statistics")
public void index() {}
@At
@ApiOperation("获取职工建家统计列表")
@SaCheckPermission("workershome.declaration.statistics")
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("unionId") String unionId){
Sql sql = Sqls.create("""
SELECT
wh.*,
audit.stateName
FROM
`workers_home_apply` wh
LEFT JOIN audit_state audit ON wh.state = audit.stateId
AND audit.module = 'workershome'
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("wh.unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("wh.unionId", "=", unionId);
}
cnd.andEX("YEAR(wh.applyDate)", "=", year);
cnd.and("wh.state", "=" , 10030);
sql.setCondition(cnd);
Pagination pagination = workersHomeApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
}
@@ -0,0 +1,66 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@Ok("json:full")
@ApiOperation("职工建家信息填报")
@At("/platform/workershome/info/apply")
public class WorkersHomeApplyController {
@Inject
private WorkersHomeInfoService workersHomeInfoService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/apply.html")
@SaCheckPermission("workershome.info.apply")
public void index() {}
@At
@SaCheckPermission("workershome.info.apply")
public Result doAdd(WorkersHome workershome, Boolean isSubmit){
if (isSubmit){
workershome.setState(8120);
} else {
workershome.setState(8100);
}
if (!"校工会".equals(workershome.getCategory())){
workershome.setUnionId(SecurityUtil.getUnionId());
}
workersHomeInfoService.insert(workershome);
return Result.success();
}
@At
@SaCheckPermission("workershome.info.apply")
public Result doEdit(WorkersHome workershome,Boolean isSubmit){
if (isSubmit){
workershome.setState(8120);
}
workersHomeInfoService.updateIgnoreNull(workershome);
return Result.success();
}
@At
@SaCheckPermission("workershome.info.apply")
public Result validateApply(){
int count = workersHomeInfoService.dao().count(WorkersHomeApply.class,
Cnd.where("state", "=", "10030")
.and("unionId", "=", SecurityUtil.getUnionId()));
return (count > 0) ? Result.success() : Result.error();
}
}
@@ -0,0 +1,60 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
@IocBean
@Ok("json:full")
@ApiOperation("职工建家信息查询")
@At("/platform/workershome/info/info")
public class WorkersHomeInfoController {
@Inject
private WorkersHomeInfoService workersHomeInfoService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/info.html")
@SaCheckPermission("workershome.info.info")
public void index() {}
@At
@ApiOperation("职工建家信息查询")
@SaCheckPermission("workershome.info.info")
public Result pageData(PageForm pageForm, @Param("year") Integer year, @Param("unionId") String unionId){
Sql sql = Sqls.create("""
SELECT
wh.*
FROM
`workers_home` wh
LEFT JOIN sys_union su ON su.id = wh.unionId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(applyTime)","=",year);
if ("校工会".equals(unionId)){
cnd.and("wh.category","=","校工会");
} else {
cnd.andEX("wh.unionId","=",unionId);
}
cnd.and("wh.state","=",8130);
cnd.asc("su.unioncode");
sql.setCondition(cnd);
List<NutMap> list = workersHomeInfoService.listMap(sql);
return Result.success().addData(list);
}
}
@@ -0,0 +1,97 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
@IocBean
@Ok("json:full")
@ApiOperation("职工建家信息我的填报")
@At("/platform/workershome/info/mine")
public class WorkersHomeMineController {
@Inject
private WorkersHomeInfoService workersHomeInfoService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/mine.html")
@SaCheckPermission("workershome.info.mine")
public void index() {}
@At
@ApiOperation("职工建家信息我的填报列表")
@SaCheckPermission("workershome.info.mine")
public Result pageData(PageForm pageForm, @Param("year") Integer year, @Param("unionId")String unionId){
Sql sql = Sqls.create("""
SELECT
wh.*,
audit.stateName
FROM
`workers_home` wh
LEFT JOIN audit_state audit ON wh.state = audit.stateId
AND audit.module = 'workershome'
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(applyTime)","=",year);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
cnd.and("unionId","=", SecurityUtil.getUnionId());
} else {
if ("校工会".equals(unionId)){
cnd.and("wh.category","=","校工会");
} else {
cnd.andEX("unionId", "=", unionId);
}
}
sql.setCondition(cnd);
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("职工建家信息我的填报详情")
@SaCheckPermission(value = {"workershome.info.mine","workershome.info.apply"}, mode = SaMode.OR)
public Result getInfoById(String id){
WorkersHome workersHome = workersHomeInfoService.fetch(id);
NutMap nutMap = Lang.obj2nutmap(workersHome);
Audit audit = workersHomeInfoService.dao().fetch(Audit.class, Cnd.where("id", "=", workersHome.getSchoolAuditId()));
if (Lang.isNotEmpty(audit)){
nutMap.setv("schoolAudit",audit);
}
return Result.success().addData(nutMap);
}
@At
@ApiOperation("职工建家信息我的填报删除")
@SaCheckPermission("workershome.info.mine")
@SLog(tag = "职工建家信息", msg = "职工建家信息删除id: ${args[0]}")
public Result doRemove(String id){
workersHomeInfoService.delete(id);
return Result.success();
}
}
@@ -0,0 +1,102 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.info;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
@IocBean
@Ok("json:full")
@ApiOperation("职工建家信息校工会审核")
@At("/platform/workershome/info/schoolaudit")
public class WorkersHomeSchoolAuditController {
@Inject
private WorkersHomeInfoService workersHomeInfoService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/info/schoolAudit.html")
@SaCheckPermission("workershome.info.schoolaudit")
public void index() {}
@At
@ApiOperation("职工建家信息校工会审核列表")
@SaCheckPermission("workershome.info.schoolaudit")
public Result pageData(PageForm pageForm, @Param("year") Integer year,
@Param("unionId")String unionId, @Param("isAudit") String isAudit){
Sql sql = Sqls.create("""
SELECT
wh.*,
audit.stateName
FROM
`workers_home` wh
LEFT JOIN audit_state audit ON wh.state = audit.stateId
AND audit.module = 'workershome'
$condition
""");
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
cnd.and("unionId", "=" , SecurityUtil.getUnionId());
} else {
if ("校工会".equals(unionId)){
cnd.and("wh.category","=","校工会");
} else {
cnd.andEX("unionId", "=", unionId);
}
}
cnd.andEX("YEAR(applyTime)","=",year);
cnd.and("wh.state", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", 8120);
sql.setCondition(cnd);
Pagination pagination = workersHomeInfoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工建家信息校工会审核")
@SaCheckPermission("workershome.info.schoolaudit")
@SLog(tag = "职工建家信息校工会审核", msg = "职工建家信息校工会审核id: ${args[1]}")
public Result doAudit(@Param("audit") Audit audit, String id, String isPass){
workersHomeInfoService.dao().insert(audit);
workersHomeInfoService.update(Chain.make("state","1".equals(isPass) ? 8130 : 8125)
.add("schoolAuditId",audit.getId()), Cnd.where("id","=",id));
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("职工建家信息校工会审核撤回")
@SaCheckPermission("workershome.info.schoolaudit")
@SLog(tag = "职工建家信息校工会审核撤回", msg = "职工建家信息校工会审核撤回id: ${args[0]}")
public Object doRollBack(String id){
WorkersHome workersHome = workersHomeInfoService.fetch(id);
workersHomeInfoService.dao().clear(Audit.class,Cnd.where("id","=",workersHome.getSchoolAuditId()));
workersHomeInfoService.update(Chain.make("state",8120).add("schoolAuditId",null),Cnd.where("id","=",id));
return null;
}
}
@@ -0,0 +1,115 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeReviewController
* @Date 2024/8/1 16:47
* @注释 pc端职工评议
*/
@IocBean
@Ok("json:full")
@ApiOperation("电脑端的职工评议")
@At("/platform/workershome/review/doReview")
public class WorkersHomeReviewController {
@Inject
private CommentZbService commentZbService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/doReview.html")
@SaCheckPermission("workershome.review.doReview")
public void index() {
}
@At
@ApiOperation("职工评议分页数据")
@SaCheckPermission("workershome.review.doReview")
public Result pageData(PageForm pageForm,
@Param("annual") String annual,
@Param("assessment") String assessment){
Sql sql = Sqls.create("""
SELECT
zb.* ,
if((select count(1) from comment_peo peo where peo.zbId = zb.id and peo.userId = @userId) > 0,true,false) as isReview
FROM
`comment_zb` zb
$condition
""").setParam("userId", SecurityUtil.getUserId());
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
cnd.and("zb.annual", "=", annual);
}
if (Strings.isNotBlank(assessment) && Strings.isNotBlank(assessment)) {
cnd.where().andLike("zb.assessment", assessment);
} else {
cnd.desc("zb.annual");
}
sql.setCondition(cnd);
Pagination pagination = commentZbService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
List<Sys_union> unionList = commentZbService.dao().query(Sys_union.class, Cnd.NEW());
list.forEach(v -> {
//自评模式
boolean reviewMode = v.getInt("reviewMode") == 1;
if (reviewMode && v.getInt("commentTarget") == 1) {
//校工会自评,判断有没有校工会管理员的权限
v.put("canJoin", AuthUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name()));
} else if (reviewMode && v.getInt("commentTarget") == 2){
//分工会自评,判断有没有分工会管理员
v.put("canJoin", AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()));
}
//自选分工会的模式
if (StrUtil.isNotBlank(v.getString("unionIds"))) {
List<String> unionIdList = JSONUtil.parseArray(v.getString("unionIds")).toList(String.class);
String string = unionList.stream().filter(item -> unionIdList.contains(item.getId()))
.map(Sys_union::getName).collect(Collectors.joining(","));
v.put("unionNames", string);
//如果是自评,只有分工会主席才能自评
if (reviewMode) {
v.put("canJoin", (unionIdList.contains(SecurityUtil.getUnionId()) && AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())));
} else {
v.put("canJoin", unionIdList.contains(SecurityUtil.getUnionId()));
}
}
});
return Result.success().addData(pagination);
}
@At
@ApiOperation("判断当前用户是否已经评价")
@SaCheckPermission("workershome.review.doReview")
public Object getPeoId(String id){
WorkersHomeReviewPeo peo = commentZbService.dao().fetch(WorkersHomeReviewPeo.class, Cnd.where("zbId", "=", id).and("userId", "=", SecurityUtil.getUserId()));
return Result.success().addData(peo.getId());
}
}
@@ -0,0 +1,267 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewExport;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.util.IOUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @ClassName exportZpController
* @Description TODO
* @Author zhf
* @Date 2023/9/6 17:09
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工评议-导出")
@At("/platform/workershome/review/export")
public class WorkersHomeReviewExportController {
// @Inject
// private OfficeTemplateUtil officeTemplateUtil;
@Inject
private Dao dao;
@Inject
private CommentZbService zbService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/unionComment/exportZp.html")
@SaCheckPermission("workerhome.review.export")
public void index() {}
@At
@ApiOperation("获取列表")
@SaCheckPermission("workerhome.review.export")
public Result pageData(@Param("annual") Integer annual,
int pageNumber, int pageSize) {
Sql sql = Sqls.create("SELECT YEAR(e.createTime) annual,e.* FROM `comment_export` e $condition");
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(e.createTime)", "=", annual);
sql.setCondition(cnd);
Pagination pagination = zbService.listPageMap(pageNumber, pageSize, sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("获取指标列表")
@SaCheckPermission("workerhome.review.export")
public Result getZbData(@Param("annual") String annual, @Param("assessment") String assessment) {
Sql sql = Sqls.create("SELECT * FROM `comment_zb` $condition");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
cnd.and("annual", "=", annual);
}
if (Strings.isNotBlank(assessment) && Strings.isNotBlank(assessment)) {
cnd.where().andLike("assessment", assessment);
} else {
cnd.desc("annual");
}
sql.setCondition(cnd);
List<NutMap> list = zbService.listMap(sql);
return Result.success().addData(list);
}
@At
@ApiOperation("添加导出内容")
@SaCheckPermission("workerhome.review.export")
public Result doAddExport(@Param("export") WorkersHomeReviewExport export) {
export.setCreateTime(DateUtil.now());
if (StrUtil.isNotBlank(export.getId())) {
zbService.updateIgnoreNull(export);
} else {
zbService.insert(export);
}
return null;
}
@At
@ApiOperation("删除导出内容")
@SaCheckPermission("workerhome.review.export")
@SLog(tag = "删除导出内容", msg = "删除到处内容id: ${args[0]}")
public Result doDelete(String id) {
zbService.dao().delete(WorkersHomeReviewExport.class, id);
return Result.success();
}
@At
@ApiOperation("获取导出内容")
@SaCheckPermission("workerhome.review.export")
public Result findOne(String id) {
WorkersHomeReviewExport export = zbService.dao().fetch(WorkersHomeReviewExport.class, id);
List<WorkersHomeReviewProxy> zbList = zbService.query(Cnd.NEW().and("id", "in", export.getProxyIds()).asc("assessmentMode"));
Map<String, Object> data = Map.of("export", export, "zbList", zbList);
return Result.success().addData(data);
}
@At
@Ok("void")
@ApiOperation("导出")
@SaCheckPermission("workerhome.review.export")
public void doExport(String id, HttpServletResponse response) throws Exception {
WorkersHomeReviewExport export = zbService.dao().fetch(WorkersHomeReviewExport.class, id);
//查询测评有那几个工会测评过
Sql sql = Sqls.create("""
SELECT
un.id,
un.unionname unionName,
count( peo.id ) num
FROM
sys_union un
LEFT JOIN `user` u ON u.unionId = un.id
LEFT JOIN comment_peo peo ON peo.userId = u.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("peo.zbId", "in", export.getProxyIds());
cnd.groupBy("un.id");
cnd.desc("count( peo.id )");
sql.setCondition(cnd);
List<NutMap> unionMap = zbService.listMap(sql);
List<WorkersHomeReviewProxy> zbs = zbService.query(Cnd.NEW().and("id", "in", export.getProxyIds()).asc("assessmentMode"));
//创建临时文件夹
Path templateDir = Files.createTempDirectory("评测结果文件夹");
//循环分工会
for (NutMap un : unionMap) {
List<View_user> users = zbService.dao().query(View_user.class, Cnd.where("unionId", "=", un.getString("id")));
FileOutputStream outputStream = new FileOutputStream(templateDir.toString() + "/" + un.getString("unionName") + "基层工会会员评家民主测评结果报告表.docx");
List<NutMap> zpxxList = new ArrayList<>();
for (WorkersHomeReviewProxy zb : zbs) {
Sql sqlps = Sqls.create("""
SELECT
SUM( CASE WHEN cp.reviewResult = '不满意' THEN 1 ELSE 0 END ) AS bmy,
SUM( CASE WHEN cp.reviewResult = '基本满意' THEN 1 ELSE 0 END ) AS jbmy,
SUM( CASE WHEN cp.reviewResult = '满意' THEN 1 ELSE 0 END ) AS my
FROM
comment_peo cp
LEFT JOIN `user` u ON u.id = cp.userId
$condition
""");
Cnd cndPs = Cnd.NEW();
cndPs.and("u.unionId", "=", un.getString("id"));
cndPs.and("cp.zbId", "=", zb.getId());
sqlps.setCondition(cndPs);
if (zb.getAssessmentMode() == 1) {
NutMap zpxx = new NutMap();
sqlps.setCallback(Sqls.callback.map());
dao.execute(sqlps);
NutMap psMap = (NutMap) sqlps.getResult();
zpxx.setv("pcdx", "工会工作及职工之家建设情况测评");
zpxx.setv("my", psMap.getInt("my"));
zpxx.setv("jbmy", psMap.getInt("jbmy"));
zpxx.setv("bmy", psMap.getInt("bmy"));
zpxxList.add(zpxx);
} else {
NutMap zpxxZx = new NutMap();
Cnd clone = cndPs.clone();
sqlps.setCondition(clone);
clone.and("cp.evaluatedPersonType", "=", "分工会主席");
sqlps.setCallback(Sqls.callback.map());
dao.execute(sqlps);
NutMap psMap = (NutMap) sqlps.getResult();
zpxxZx.setv("pcdx", "工会主席履职情况测评");
zpxxZx.setv("my", psMap.getInt("my"));
zpxxZx.setv("jbmy", psMap.getInt("jbmy"));
zpxxZx.setv("bmy", psMap.getInt("bmy"));
zpxxList.add(zpxxZx);
NutMap zpxxFzx = new NutMap();
Cnd clone2 = cndPs.clone();
clone2.and("cp.evaluatedPersonType", "=", "分工会副主席");
sqlps.setCondition(clone2);
sqlps.setCallback(Sqls.callback.map());
dao.execute(sqlps);
NutMap psMap2 = (NutMap) sqlps.getResult();
zpxxFzx.setv("pcdx", "工会副主席履职情况测评");
zpxxFzx.setv("my", psMap2.getInt("my"));
zpxxFzx.setv("jbmy", psMap2.getInt("jbmy"));
zpxxFzx.setv("bmy", psMap2.getInt("bmy"));
zpxxList.add(zpxxFzx);
}
}
// HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
// HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
// htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
//
// Configure config = Configure.newBuilder().bind("zpxxList", policy).build();
HashMap<String, Object> map = new HashMap<>();
map.put("zpxxList", zpxxList);
map.put("unionName", un.getString("unionName"));
map.put("num", users.size());
map.put("memberNum", users.stream().filter(v -> v.getMember() == 1).collect(Collectors.toList()).size());
// XWPFTemplate.compile(officeTemplateUtil.getPath("unionComment"), config).render(map).writeAndClose(outputStream);
outputStream.close();
}
//压缩
File zipFile = ZipUtil.zip(templateDir.toString());
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(zipFile.getName(), "UTF-8"));
try (ServletOutputStream outputStream = response.getOutputStream();
FileInputStream zipFis = new FileInputStream(zipFile);) {
IOUtils.copy(zipFis, outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
FileUtil.del(templateDir);
FileUtil.del(zipFile);
}
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @ClassName addZbController
* @Description TODO
* @Author zhf
* @Date 2023/9/4 15:42
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工评议-添加考核指标")
@At("/platform/workershome/review/proxy")
public class WorkersHomeReviewProxyController {
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/xjkhzb.html")
@SaCheckPermission("workershome.review.proxy")
public void index() {
}
@Inject
private CommentZbService commentZbService;
@At
@ApiOperation("添加指标")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("workershome.review.proxy")
public Result doAdd(@Param("kh_zb") WorkersHomeReviewProxy commentZb) {
WorkersHomeReviewProxy zb = commentZbService.insert(commentZb);
for (WorkersHomeReviewContent nr : commentZb.getReviewContents()) {
nr.setProxyId(zb.getId());
nr.getReviewNorms().forEach(v->v.setProxyId(zb.getId()));
commentZbService.insertWith(nr, "bzs");
}
commentZbService.setGrading(zb);
return Result.success();
}
@At
@ApiOperation("获取指标列表")
public Result getZbList(Integer year) {
List<WorkersHomeReviewProxy> annual = commentZbService.query(Cnd.NEW().andEX("annual", "=", year));
return Result.success(annual);
}
}
@@ -0,0 +1,441 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_file;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewGrading;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentPeoService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentStatisticsService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.nutz.boot.starter.ftp.FtpService;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @ClassName statisticsController
* @Description TODO
* @Author zhf
* @Date 2023/9/5 15:58
*/
@IocBean
@Ok("json:full")
@ApiOperation("职工评议-统计")
@At("/platform/workershome/review/statistics")
public class WorkersHomeReviewStatistics {
@Inject
private Dao dao;
@Inject
private FtpService ftpService;
@Inject
private CommentZbService commentZbService;
@Inject
private CommentPeoService commentPeoService;
@Inject
private CommentStatisticsService commentStatisticsService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/statistics.html")
@SaCheckPermission("workershome.review.statistics")
public void index() {
}
@At
@ApiOperation("获取列表")
@SaCheckPermission("workershome.review.statistics")
public Result pageData(PageForm page,
@Param("zbId") String zbId,
@Param("unionId") String unionId) {
WorkersHomeReviewProxy zb = commentPeoService.dao().fetch(WorkersHomeReviewProxy.class, Cnd.where("id", "=", zbId));
Sql sql = Sqls.create("""
SELECT
un.id,
un.unionname unionName,
IFNULL(grading.gradingName,'未定级') AS gradingName,
grading.isGrading,
count( peo.id ) num
FROM
sys_union un
LEFT JOIN `user` u ON u.unionId = un.id
LEFT JOIN comment_peo peo ON peo.userId = u.id AND peo.zbId = @zbId
LEFT JOIN comment_union_grading grading on un.id = grading.unionId AND grading.zbId = @zbId
$condition
""").setParam("zbId", zbId);
Cnd cnd = Cnd.NEW();
if (Lang.isNotEmpty(zb.getUnionIds())) {
cnd.and("un.id", "in", zb.getUnionIds());
} else {
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.andEX("un.id", "=", unionId);
} else {
cnd.and("un.id", "=", SecurityUtil.getUnionId());
}
}
cnd.groupBy("un.id");
cnd.desc("count( peo.id )");
sql.setCondition(cnd);
Pagination pagination = commentZbService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("获取个人评议或工会评议列表")
@SaCheckPermission("workershome.review.statistics")
public Result getUserPeoByZbIdOrUnionId(PageForm page,
@Param("zbId") String zbId,
@Param("unionId") String unionId,
@Param("reviewResult") String reviewResult) {
Sql sql = Sqls.create("""
SELECT
peo.*,
u.loginname loginName,
unitname unitName
FROM
comment_peo peo
LEFT JOIN `user` u ON u.id = peo.userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("peo.zbId", "=", zbId);
cnd.andEX("u.unionId", "=", unionId);
cnd.andEX("peo.reviewResult", "=", reviewResult);
if (StrUtil.isNotBlank(page.getSearchKeyword())) {
SqlExpressionGroup sqlExpressionGroup = new SqlExpressionGroup();
sqlExpressionGroup.orLike("u.loginname", page.getSearchKeyword());
sqlExpressionGroup.orLike("u.username", page.getSearchKeyword());
cnd.and(sqlExpressionGroup);
}
sql.setCondition(cnd);
Pagination pagination = commentZbService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("根据id获取评测内容")
@SaCheckPermission("workershome.review.statistics")
public Result getBzById(String peoId) {
NutMap map = commentPeoService.getBzById(peoId);
return Result.success(map);
}
@At
@ApiOperation("获取评价结果数量")
@SaCheckPermission("workershome.review.statistics")
public Result getReviewResultNum(@Param("zbId") String zbId,
@Param("unionId") String unionId) {
Sql sql = Sqls.create("""
SELECT
SUM( CASE WHEN cp.reviewResult = '非常满意' THEN 1 ELSE 0 END ) AS fcmy,
SUM( CASE WHEN cp.reviewResult = '满意' THEN 1 ELSE 0 END ) AS my,
SUM( CASE WHEN cp.reviewResult = '良好' THEN 1 ELSE 0 END ) AS lh,
SUM( CASE WHEN cp.reviewResult = '一般' THEN 1 ELSE 0 END ) AS yb
FROM
comment_peo cp
LEFT JOIN `user` u ON u.id = cp.userId
WHERE
cp.zbId = @zbId
AND u.unionId = @unionId
""").setParam("zbId", zbId).setParam("unionId", unionId);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap mapList = (NutMap) sql.getResult();
return Result.success(mapList);
}
/**
* 分工会自评导出(单个)
*
* @param zbId
* @param unionId
* @param response
*/
@At
@Ok("void")
@ApiOperation("分工会自评导出(单个)")
@SaCheckPermission("workershome.review.statistics")
public void doDownLoadSingleByUnionId(String zbId, String unionId, HttpServletResponse response) {
WorkersHomeReviewPeo peo = commentZbService.dao().fetch(WorkersHomeReviewPeo.class, Cnd.where("unionId", "=", unionId).and("zbId", "=", zbId));
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")“模范教工小家”评议结果";
try {
response.addHeader("Content-Type", "application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\".docx");
commentStatisticsService.exportWord(peo, response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 分工会下所有测评结果导出(多个)压缩包
*
* @param zbId
* @param unionId
* @param response
*/
@At
@Ok("void")
@ApiOperation("分工会下所有测评结果导出(多个)压缩包")
@SaCheckPermission("workershome.review.statistics")
public void doDownLoadZipByUnionId(String zbId, String unionId, HttpServletResponse response) {
try {
List<WorkersHomeReviewPeo> peoList = commentPeoService.dao().query(WorkersHomeReviewPeo.class, Cnd.where("unionId", "=", unionId).and("zbId", "=", zbId));
WorkersHomeReviewPeo commentPeo = peoList.stream().findFirst().orElse(new WorkersHomeReviewPeo());
String zipName = commentPeo.getUnionName() + "评议结果.zip";
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipName, "UTF-8"));
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
for (WorkersHomeReviewPeo peo : peoList) {
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")“模范教工小家”评议结果.docx";
zipOutputStream.putNextEntry(new ZipEntry(fileName));
commentStatisticsService.exportWord(peo, zipOutputStream);
zipOutputStream.closeEntry();
response.flushBuffer();
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 校验是否有附件
*
* @param peoId 测评结果Id
* @param zbId 指标Id
* @param unionId 分工会Id
* @return
*/
@At
@ApiOperation("校验是否有附件")
@SaCheckPermission("workershome.review.statistics")
public Result validateHasFiles(@Param("peoId") String peoId,
@Param("zbId") String zbId,
@Param("unionId") String unionId) {
Cnd cnd = Cnd.NEW();
cnd.andEX("id", "=", peoId);
cnd.andEX("zbId", "=", zbId);
cnd.andEX("unionId", "=", unionId);
List<WorkersHomeReviewPeo> peoList = commentPeoService.dao().query(WorkersHomeReviewPeo.class, cnd);
List<Sys_file> files;
try {
files = peoList.stream().flatMap(v -> v.getFiles().stream()).toList();
} catch (NullPointerException e) {
return Result.error();
}
if (Lang.isEmpty(files)) {
return Result.error();
} else {
return Result.success();
}
}
/**
* 分工会导出附件
*
* @param zbId
* @param unionId
* @param response
*/
@At
@Ok("void")
@ApiOperation("分工会导出附件")
@SaCheckPermission("workershome.review.statistics")
public void exportFilesByUnionId(String zbId, String unionId, HttpServletResponse response) {
List<WorkersHomeReviewPeo> peoList = commentPeoService.dao().query(WorkersHomeReviewPeo.class, Cnd.where("unionId", "=", unionId).and("zbId", "=", zbId));
WorkersHomeReviewPeo commentPeo = peoList.stream().findFirst().orElse(new WorkersHomeReviewPeo());
response.reset();
response.setContentType("application/x-msdownload;charset=utf-8");
String tmpPath = "tmp/" + R.UU32();
File tmpDir = new File(tmpPath + "/附件信息");
tmpDir.mkdirs();
try {
for (WorkersHomeReviewPeo peo : peoList) {
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")";
List<Sys_file> files = peo.getFiles();
File tDir = new File(tmpDir + "/" + fileName);
tDir.mkdirs();
if (Lang.isNotEmpty(files)) {
// for (Sys_file file : files) {
// if (Lang.isNotEmpty(file)) {
// FileOutputStream outputStream = new FileOutputStream(tDir.getPath() + "/" + file.getFilename());
// ftpService.download(file.getFilepath(), outputStream);
// outputStream.close();
// }
// }
}
}
String aimsDir = "zipTmp/" + R.UU32();
String aimsName = commentPeo.getUnionName() + "评议信息.zip";
String aimsPath = aimsDir + "/" + aimsName;
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
File aimsFile = new File(aimsPath);
FileInputStream inputStream = new FileInputStream(aimsFile);
IOUtils.copy(inputStream, response.getOutputStream());
inputStream.close();
aimsFile.delete();
// FileUtil.deleteDir(new File(tmpPath));
// FileUtil.deleteDir(new File(aimsDir));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 个人上传附件导出
*
* @param peoId
* @param response
*/
@At
@Ok("void")
@ApiOperation("个人上传附件导出")
@SaCheckPermission("workershome.review.statistics")
public void exportFilesByPeoId(String peoId, HttpServletResponse response) {
WorkersHomeReviewPeo peo = commentPeoService.dao().fetch(WorkersHomeReviewPeo.class, peoId);
List<Sys_file> files = peo.getFiles();
response.reset();
response.setContentType("application/x-msdownload;charset=utf-8");
String tmpPath = "tmp/" + R.UU32();
File tmpDir = new File(tmpPath + "/个人附件信息");
tmpDir.mkdirs();
try {
for (Sys_file file : files) {
// if (Lang.isNotEmpty(files)) {
// FileOutputStream out = new FileOutputStream(tmpDir.getPath() + "/" + file.getFilename());
// ftpService.download(file.getFilepath(), out);
// out.close();
// }
}
String aimsDir = "zipTmp/" + R.UU32();
String aimsName = peo.getUnionName() + "(" + peo.getUserName() + ")个人附件信息.zip";
String aimsPath = aimsDir + "/" + aimsName;
// FileUtil.compressToZip(tmpDir.getPath(), aimsDir, aimsName);
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(aimsName, "UTF-8"));
File aimsFile = new File(aimsPath);
FileInputStream inputStream = new FileInputStream(aimsFile);
IOUtils.copy(inputStream, response.getOutputStream());
inputStream.close();
aimsFile.delete();
// FileUtil.deleteDir(new File(tmpPath));
// FileUtil.deleteDir(new File(aimsDir));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 个人评议结果导出(得分)
*
* @param peoId
* @param response
*/
@At
@Ok("void")
@ApiOperation("个人评议结果导出(得分)")
@SaCheckPermission("workershome.review.statistics")
public void exportByPeoId(String peoId, HttpServletResponse response) {
WorkersHomeReviewPeo peo = commentPeoService.dao().fetch(WorkersHomeReviewPeo.class, peoId);
String fileName = peo.getUnionName() + "(" + peo.getUserName() + ")“模范教工小家”评议结果";
try {
response.addHeader("Content-Type", "application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\".docx");
commentStatisticsService.exportWord(peo, response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 导出所有分工会评议结果和附件信息
*
* @param zbId
* @param response
*/
@At
@Ok("void")
@SaCheckPermission("workershome.review.statistics")
public void exportAllUnions(String zbId, HttpServletResponse response) {
// List<CommentPeo> peoList = commentPeoService.dao().query(CommentPeo.class, Cnd.where("zbId", "=", zbId));
// Map<String, List<CommentPeo>> collect = peoList.stream().collect(Collectors.groupingBy(CommentPeo::getUnionId));
}
@At
@ApiOperation("评级")
@SaCheckPermission("workershome.review.statistics")
public Result doGrading(WorkersHomeReviewGrading grading){
if (StrUtil.isAllBlank(grading.getProxyId(),grading.getUnionId(),grading.getGradingName())) {
return Result.error("必要参数为空");
}
commentPeoService.dao().update(WorkersHomeReviewGrading.class,
Chain.make("isGrading",true).add("gradingName",grading.getGradingName()).add("gradingTime", DateUtil.now()),
Cnd.where("zbId","=",grading.getProxyId()).and("unionId","=",grading.getUnionId()));
return Result.success();
}
}
@@ -0,0 +1,165 @@
package com.budwk.app.zhgh.dayofficework.workershome.controller.review;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentBzService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentNrService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.random.R;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @ClassName viewZbController
* @Description TODO
* @Author zhf
* @Date 2023/9/4 16:00
*/
@IocBean
@Ok("json:full")
@ApiOperation("指标查看")
@At("/platform/workershome/review/view")
public class WorkersHomeReviewViewController {
@Inject
private CommentZbService commentZbService;
@Inject
private CommentNrService commentNrService;
@Inject
private CommentBzService commentBzService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/workershome/review/khzb.html")
@SaCheckPermission("workerhome.review.view")
public void index() {
}
@At
@ApiOperation("指标查看分页数据")
@SaCheckPermission("workerhome.review.view")
public Result pageData(@Param("annual") String annual,
@Param("assessment") String assessment,
int pageNumber, int pageSize) {
Sql sql = Sqls.create("SELECT * FROM `comment_zb` $condition");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
cnd.and("annual", "=", annual);
}
if (Strings.isNotBlank(assessment) && Strings.isNotBlank(assessment)) {
cnd.where().andLike("assessment", assessment);
} else {
cnd.desc("annual");
}
sql.setCondition(cnd);
Pagination pagination = commentZbService.listPageMap(pageNumber, pageSize, sql);
return Result.success().addData(pagination);
}
@At
@ApiOperation("指标删除")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("workerhome.review.view")
@SLog(tag = "指标删除", msg = "指标删除id: ${args[0]}")
public Result delete(String id) {
commentZbService.delete(id);
List<WorkersHomeReviewContent> query = commentNrService.query(Cnd.where("zb_id", "=", id));
if (Lang.isNotEmpty(query)) {
List<String> nrIds = query.stream().map(WorkersHomeReviewContent::getId).toList();
commentBzService.clear(Cnd.where("nr_id", "in", nrIds));
}
commentNrService.clear(Cnd.where("zb_id", "=", id));
return Result.success();
}
@At
@ApiOperation("获取编辑内容")
@SaCheckPermission("workerhome.review.view")
@SLog(tag = "获取编辑内容", msg = "编辑内容id: ${args[0]}")
public Result edit(String id) {
WorkersHomeReviewProxy khzb = commentZbService.khzb(id);
return Result.success().addData(khzb);
}
@At
@ApiOperation("指标编辑")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("workerhome.review.view")
@SLog(tag = "指标编辑", msg = "指标编辑id: ${args[0]}")
public Result doEdit(@Param("kh_zb") WorkersHomeReviewProxy commentZb) {
commentZbService.updateIgnoreNull(commentZb);
List<WorkersHomeReviewContent> query = commentNrService.query(Cnd.where("zb_id", "=", commentZb.getId()));
if (Lang.isNotEmpty(query)) {
List<String> nrIds = query.stream().map(WorkersHomeReviewContent::getId).toList();
commentBzService.clear(Cnd.where("nr_id", "in", nrIds));
}
commentNrService.clear(Cnd.where("zb_id", "=", commentZb.getId()));
List<WorkersHomeReviewContent> nrs = commentZb.getReviewContents();
if (Lang.isNotEmpty(nrs)){
nrs.forEach(v->{
if (v.getId() == null) {
v.setId(R.UU32());
}
Chain chain = Chain.make("id", v.getId());
chain.add("zb_id",commentZb.getId());
chain.add("content",v.getContent());
chain.add("contentNumber",v.getContentNumber());
chain.add("remark",v.getRemark());
commentNrService.dao().insert(WorkersHomeReviewContent.class, chain);
List<WorkersHomeReviewNorm> bzs = v.getReviewNorms();
bzs.forEach(b->{
if (b.getId() == null) {
b.setId(R.UU32());
}
Chain bzChain = Chain.make("id", b.getId());
bzChain.add("nr_id",v.getId());
bzChain.add("inspection",b.getInspection());
bzChain.add("score",b.getScore());
bzChain.add("single_score",b.getSingleScore());
bzChain.add("zb_id",commentZb.getId());
bzChain.add("contentNumber",b.getContentNumber());
commentNrService.dao().insert(WorkersHomeReviewNorm.class, bzChain);
});
});
}
commentZbService.setGrading(commentZb);
return Result.success();
}
}
@@ -0,0 +1,301 @@
package com.budwk.app.zhgh.dayofficework.workershome.h5controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewResult;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentPeoService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import com.budwk.app.zhgh.dayofficework.workershome.vo.WakesHomeVo;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@IocBean
@At("/mobile/workershome/review/appraisal")
@Ok("json:full")
public class MWorkersHomeReviewController {
@Inject
private CommentZbService commentZbService;
@Inject
private BaseService baseService;
@Inject
private CommentPeoService commentPeoService;
@At
@Ok("beetl:/mobile/workershome/review/appraisal.html")
@SaCheckLogin
public void index() {
}
@At
@Ok("beetl:/mobile/workershome/review/commentator.html")
@SaCheckLogin
public void commentator() {
}
@At
@Ok("beetl:/mobile/workershome/review/mine.html")
@SaCheckLogin
public void mine() {
}
/**
* 民主测评首页展示
*
* @param pageForm
* @param annual
* @return
*/
@At
@SaCheckPermission
public Object pageData(PageForm pageForm,
@Param("annual") String annual,
@Param("type") Integer type) {
Sql sql = Sqls.create("SELECT * FROM `comment_zb` $condition");
Cnd cnd = Cnd.NEW();
if (Strings.isNotBlank(annual) && Strings.isNotBlank(annual)) {
cnd.and("annual", "=", annual);
}
switch (type) {
//进行中
case 2 -> cnd.and(new Static("now() >= startTime and now() <= endTime"));
//已结束
case 3 -> cnd.and(new Static("now() > endTime"));
//未开始
case 4 -> cnd.and(new Static("now() < startTime"));
}
sql.setCondition(cnd);
Pagination pagination = commentZbService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = pagination.getList();
List<Sys_union> unionList = commentZbService.dao().query(Sys_union.class, Cnd.NEW());
list.forEach(v -> {
//自评模式
boolean reviewMode = v.getInt("reviewMode") == 1;
if (reviewMode && v.getInt("commentTarget") == 1) {
//校工会自评,判断有没有校工会管理员的权限
v.put("canJoin", AuthUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name()));
} else if (reviewMode && v.getInt("commentTarget") == 2) {
//分工会自评,判断有没有分工会管理员
v.put("canJoin", AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()));
}
//自选分工会的模式
if (StrUtil.isNotBlank(v.getString("unionIds"))) {
List<String> unionIdList = JSONUtil.parseArray(v.getString("unionIds")).toList(String.class);
String string = unionList.stream().filter(item -> unionIdList.contains(item.getId()))
.map(Sys_union::getName).collect(Collectors.joining(","));
v.put("unionNames", string);
//如果是自评,只有分工会主席才能自评
if (reviewMode) {
v.put("canJoin", (unionIdList.contains(SecurityUtil.getUnionId()) && AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())));
} else {
v.put("canJoin", unionIdList.contains(SecurityUtil.getUnionId()));
}
}
});
return pagination;
}
/**
* 根据id获取测评内容
*
* @param id
* @return
*/
@At
@SaCheckPermission
public Object getById(String id) {
return commentZbService.khzb(id);
}
@At
@Aop(TransAop.READ_COMMITTED)
public Object doSubmit(WakesHomeVo wakesHomeVo) {
try {
View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
WorkersHomeReviewPeo peo = new WorkersHomeReviewPeo();
if (Strings.isNotBlank(wakesHomeVo.getEvaluatedPersonId())) {
peo.setEvaluatedPersonId(wakesHomeVo.getEvaluatedPersonId());
peo.setEvaluatedPersonName(wakesHomeVo.getEvaluatedPersonName());
peo.setEvaluatedPersonType(wakesHomeVo.getEvaluatedPersonType());
}
peo.setReviewResult(wakesHomeVo.getReviewResult());
peo.setProxyId(wakesHomeVo.getId());
peo.setReviewTime(DateUtil.now());
// peo.setFiles(wakesHomeVo.getFiles());
peo.setUserId(user.getId());
peo.setUserName(user.getUsername());
peo.setUnionId(user.getUnionId());
peo.setUnionName(user.getUnionName());
if (Strings.isNotBlank(wakesHomeVo.getPresidentOpinions())) {
peo.setPresidentOpinions(wakesHomeVo.getPresidentOpinions());
}
baseService.dao().insert(peo);
List<WorkersHomeReviewResult> commentResults = new ArrayList<>();
for (WorkersHomeReviewNorm v : wakesHomeVo.getBzList()) {
WorkersHomeReviewResult result = new WorkersHomeReviewResult();
result.setProxyId(v.getId());
result.setAssessResult(v.getResultScore());
result.setRecommendation(v.getOptions() != null ? v.getOptions() : null);
result.setPeoId(peo.getId());
commentResults.add(result);
}
baseService.dao().insert(commentResults);
return Result.success();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
/**
* 判断是否测评过
*
* @param id 指标id
* @param evaluatedPersonId 被测评人id
* @return
*/
@At
public Object isAssess(@Param("id") String id,
@Param("evaluatedPersonId") String evaluatedPersonId) {
//主席测评
if (Strings.isNotBlank(evaluatedPersonId)) {
Cnd cnd = Cnd.NEW();
cnd.and("evaluatedPersonId", "=", evaluatedPersonId);
cnd.and("userId", "=", SecurityUtil.getUserId());
cnd.and("zbId", "=", id);
return Result.success().addData(baseService.dao().count(WorkersHomeReviewPeo.class, cnd));
} else {//会员评家测评
Sql sql = Sqls.create("""
SELECT
cp.*,
cz.annual,
cz.assessment,
cz.assessmentMode,
cz.scoringMode,
cz.commentTarget
FROM
`comment_peo` cp
LEFT JOIN `comment_zb` cz ON cz.id = cp.zbId
where cp.zbId=@zbId and cp.userId=@userId
""").setParam("zbId", id).setParam("userId", SecurityUtil.getUserId());
List<NutMap> list = baseService.listMap(sql);
NutMap nutMap = list.stream().findFirst().orElse(null);
if (nutMap != null && Strings.isNotBlank(nutMap.getString("commentTarget")) && "1".equals(nutMap.getString("assessmentMode"))) {
return Result.success().addData(1);
} else {
return Result.success().addData(0);
}
}
}
/**
* 我的测评页面展示
*
* @param pageForm
* @param annual
* @return
*/
@At
public Object onLoad(PageForm pageForm,
@Param("annual") String annual) {
Sql sql = Sqls.create("""
SELECT
cp.*,
cz.annual,
cz.assessment,
cz.assessmentMode,
cz.scoringMode,
cz.commentTarget
FROM
`comment_peo` cp
LEFT JOIN `comment_zb` cz ON cz.id = cp.zbId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("cz.annual", "=", annual);
cnd.and("cp.userId", "=", SecurityUtil.getUserId());
cnd.desc("cp.reviewTime");
sql.setCondition(cnd);
return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
/**
* 获取测评结果信息
*
* @param peoId
* @return
*/
@At
public Object getBzById(@Param("peoId") String peoId) {
return commentPeoService.getBzById(peoId);
}
/**
* 获取分工会主席和副主席
*
* @return
*/
@At
public Object getPresidents() {
Sql sql = Sqls.create("""
SELECT
u.id,
u.loginname,
u.username,
sr.`name` evaluatedPersonType,
GROUP_CONCAT( DISTINCT u.username, '(', sr.`name`, ')' ) presidents
FROM
`user` u
LEFT JOIN `sys_user_role` sur ON u.id = sur.userId
LEFT JOIN `sys_role` sr ON sur.roleId = sr.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("sr.`code`", "in", List.of(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_VICE_CHAIRMAN.name()));
cnd.and("u.unionid", "=", SecurityUtil.getUnionId());
cnd.groupBy("u.id");
cnd.asc("u.loginname");
sql.setCondition(cnd);
return baseService.listMap(sql);
}
}
@@ -0,0 +1,130 @@
package com.budwk.app.zhgh.dayofficework.workershome.model;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.io.Serializable;
import java.util.List;
/**
* @author mayn
*/
@Data
@Table
@Comment("职工小家-职工小家表")
@EqualsAndHashCode(callSuper = true)
public class WorkersHome extends BaseModel {
@Name
@Column
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("填报人")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String username;
@Column
@Comment("联系方式")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String mobile;
@Column
@Comment("所属工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionName;
@Column
@Comment("填报时间")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String applyTime;
@Column
@Comment("填报类别(校工会/分工会)")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String category;
@Column
@Comment("创办时间")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String foundTime;
@Column
@Comment("单位位置")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String position;
@Column
@Comment("单位面积")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String area;
@Column
@Comment("单位信息")
@ColDefine(type = ColType.TEXT)
private String details;
@Column
@Comment("获奖情况")
@ColDefine(type = ColType.MYSQL_JSON)
private List<AwardInfo> awardInfo;
@Column
@Comment("图片文件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> picFiles;
@Column
@Comment("附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> files;
@Column
@Comment("分工会审核id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionAuditId;
@Column
@Comment("校工会审核id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String schoolAuditId;
@Column
@Comment("状态")
@ColDefine(type = ColType.INT)
private Integer state;
@Data
public static class AwardInfo implements Serializable {
/**
* 获奖日期
*/
private String awardTime;
/**
* 获奖单位
*/
private String awardUnit;
/**
* 奖项名称
*/
private String awardName;
/**
* 奖项照片
*/
private String awardPic;
}
}
@@ -0,0 +1,130 @@
package com.budwk.app.zhgh.dayofficework.workershome.model;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.io.Serializable;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameWakesHomeApply
* @Date 2024/7/31 10:47
* @注释 职工之家申报
*/
@Data
@Table
@Comment("职工之家申报")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeApply extends BaseModel implements Serializable {
private static final long serialVersionUID = 1L;
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("申报人id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("申报人工号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String loginName;
@Column
@Comment("申报人姓名")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String username;
@Column
@Comment("申报人单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unitId;
@Column
@Comment("申报人单位名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unitName;
@Column
@Comment("申报人工会Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("申报人工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionName;
@Column
@Comment("联系电话")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String mobile;
@Column
@Comment("基本情况简介(500字内)")
@ColDefine(type = ColType.TEXT)
private String basicInformation;
@Column
@Comment("建设方案")
@ColDefine(type = ColType.TEXT)
private String constructionPlan;
@Column
@Comment("基层党组织审核Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String organizationAuditId;
@Column
@Comment("校工会审核Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String schoolAuditId;
//10000待提交;10010待基层党组织审核;10020待校工会审核;10030审核通过
@Column
@Comment("当前状态")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String state;
@Column
@Comment("申报时间")
@ColDefine(type = ColType.DATE)
private String applyDate;
@Column
@Comment("创办时间")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String foundTime;
@Column
@Comment("单位位置")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String position;
@Column
@Comment("单位面积")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String area;
@Column
@Comment("单位信息")
@ColDefine(type = ColType.TEXT)
private String details;
@Column
@Comment("附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> files;
}
@@ -0,0 +1,95 @@
package com.budwk.app.zhgh.dayofficework.workershome.model;
import com.budwk.app.base.model.BaseModel;
import com.budwk.app.sys.models.Sys_file;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameWakesHomeDataRevel
* @Date 2024/7/30 15:29
* @注释 职工建家资料管理
*/
@Data
@Table
@Comment("职工建家资料管理")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeDataRevel extends BaseModel {
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("资料名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String revelName;
@Column
@Comment("上传人id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("上传人工号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String loginName;
@Column
@Comment("上传人姓名")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String username;
@Column
@Comment("上传人单位id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unitId;
@Column
@Comment("上传人单位名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unitName;
@Column
@Comment("上传人工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("上传人工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unionName;
@Column
@Comment("资料归属分工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String belongToUnionId;
@Column
@Comment("资料归属分工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String belongToUnionName;
@Column
@Comment("上传时间")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String time;
@Column
@Comment("类型Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String typeId;
@Column
@Comment("附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<Sys_file> files;
}
@@ -0,0 +1,43 @@
package com.budwk.app.zhgh.dayofficework.workershome.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
/**
* @version 1.0
* @Author zzr
* @nameWakesHomeDataType
* @Date 2024/7/30 15:29
* @注释 职工建家资料类型管理
*/
@Data
@Table
@Comment("职工建家资料类型管理")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeDataType extends BaseModel {
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("类型编码")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String code;
@Column
@Comment("工作资料类型名称")
@ColDefine(type = ColType.VARCHAR, width = 80)
private String typeName;
@Column
@Comment("序号")
@ColDefine(type = ColType.INT)
private Integer serialNum;
}
@@ -0,0 +1,58 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import java.util.List;
/**
* @ClassName CommentNr
* @Description TODO
* @Author zhf
* @Date 2023/9/4 16:13
*/
@Data
@Table
@Comment("职工小家-评议内容")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewContent extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("考核内容")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String content;
@Column
@Comment("题号")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String contentNumber;
@Column
@Comment("指标id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String proxyId;
@One(field = "proxyId",key = "id")
private WorkersHomeReviewProxy reviewProxy;
@Many(field = "contentId")
private List<WorkersHomeReviewNorm> reviewNorms;
@Column
@Comment("排序字段")
private Integer location;
@Column
@Comment("备注")
@ColDefine(type = ColType.TEXT)
private String remark;
}
@@ -0,0 +1,49 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import java.util.List;
/**
* @ClassName CommentExport
* @Description TODO
* @Author zhf
* @Date 2023/9/7 15:19
*/
@Data
@Table
@Comment("职工小家-评议导出")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewExport extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("导出的名称")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String exportName;
// 指标id
@Column
@Comment("proxyIds")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> proxyIds;
@Column
@Comment("创建时间")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String createTime;
}
@@ -0,0 +1,66 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import java.util.Date;
/**
* @version 1.0
* @Author zzr
* @nameCommentUnionGrading
* @Date 2024/9/19 8:48
* @注释 校工会给分工会定级
*/
@Data
@Table
@Comment("校工会给分工会定级表")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewGrading extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("考核指标id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String proxyId;
@Column
@Comment("定级的分工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("分工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionName;
@Column
@Comment("分工会编码")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionCode;
@Column
@Comment("定级的名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String gradingName;
@Column
@Default("0")
@Comment("是否定级")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isGrading;
@Column
@Comment("定级时间")
@ColDefine(type = ColType.DATETIME)
private Date gradingTime;
}
@@ -0,0 +1,97 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
/**
* @ClassName CommentBz
* @Description TODO
* @Author zhf
* @Date 2023/9/4 16:24
* 职工小家评议标准
*/
@Data
@Table
@Comment("职工小家-评议标准")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewNorm extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("内容id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String contentId;
@Column
@Comment("考核标准")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String inspection;
@Column
@Comment("是否启用佐证材料")
@ColDefine(type = ColType.BOOLEAN)
private boolean isEvidence;
@Column
@Comment("标准分")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String score;
@Column
@Comment("单项得分")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String singleScore;
@Column
@Comment("自评能否超过最高分")
@ColDefine(type = ColType.BOOLEAN)
private boolean beyondHighestScore;
@Column
@Comment("关联模块")
@ColDefine(type = ColType.VARCHAR,width = 100)
private String associatedModule;
@Column
@Comment("标准标识")
@ColDefine(type = ColType.VARCHAR,width = 100)
private String normRelationId;
@Column
@Comment("指标id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String proxyId;
@Column
@Comment("题号")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String contentNumber;
@Column
@Comment("排序字段")
private Integer location;
@Column
@Comment("能否删除该项")
@ColDefine(type = ColType.BOOLEAN)
private boolean canDelete;
@One(field = "contentId", key = "id")
private WorkersHomeReviewContent reviewContent;
private String resultScore;
private String options;
}
@@ -0,0 +1,93 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import com.budwk.app.sys.models.Sys_file;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import java.util.List;
/**
* @author mayn
*/
@Data
@Table
@Comment("职工小家-测评人记录")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewPeo extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("测评人")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("测评人姓名")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String userName;
@Column
@Comment("测评人工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("测评人工会名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionName;
@Column
@Comment("被测评人id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String evaluatedPersonId;
@Column
@Comment("被测评人姓名")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String evaluatedPersonName;
@Column
@Comment("被测评人职务(主席/副主席)")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String evaluatedPersonType;
@Column
@Comment("指标id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String proxyId;
@Column
@Comment("主席测评意见")
@ColDefine(type = ColType.TEXT)
private String presidentOpinions;
@Column
@Comment("评测结果")
@ColDefine(type = ColType.VARCHAR,width = 10)
private String reviewResult;
@Column
@Comment("测评时间")
@ColDefine(type = ColType.VARCHAR,width = 20)
private String reviewTime;
@Many(field = "peoId")
private List<WorkersHomeReviewResult> resultList;
@Column
@Comment("自我测评的附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<Sys_file> files;
}
@@ -0,0 +1,96 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import java.util.Date;
import java.util.List;
/**
* @ClassName CommentZb
* @Description TODO
* @Author zhf
* @Date 2023/9/4 15:39
* 评议指标
*/
@Data
@Table
@Comment("职工小家-评议指标")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewProxy extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("年度")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String annual;
@Column
@Comment("考核名称")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String assessment;
@Column
@Comment("添加时间")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String addTime;
@Column
@Comment("评议选项(1.工会评家2.主席评家)")
@ColDefine(type = ColType.INT)
private Integer assessmentMode;
@Column
@Comment("可报名范围组别")
@ColDefine(type = ColType.VARCHAR, width = 32)
private Integer activityGroupId;
@Column
@Comment("评议范围(1.校工会 2.全部分工会 3.自选分工会)")
@ColDefine(type = ColType.INT)
private Integer commentTarget;
@Column
@Comment("打分模式(1.评分模式2.选择满意不满意模式)")
@ColDefine(type = ColType.INT)
private Integer scoringMode;
@Many(field = "proxyId")
private List<WorkersHomeReviewContent> reviewContents;
@Column
@Comment("排序字段")
private Integer location;
@Column
@Comment("自选分工会Id")
@ColDefine(type = ColType.MYSQL_JSON)
private List<String> unionIds;
@Column
@Comment("评议开始时间")
@ColDefine(type = ColType.DATETIME)
private Date startTime;
@Column
@Comment("评议结束时间")
@ColDefine(type = ColType.DATETIME)
private Date endTime;
@Column
@Comment("评议模式(1.自评模式 2.教职工评议)")
@ColDefine(type = ColType.INT)
private Integer reviewMode;
}
@@ -0,0 +1,52 @@
package com.budwk.app.zhgh.dayofficework.workershome.model.review;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
/**
* @author mayn
*/
@Data
@Table
@Comment("职工小家-评测结果表")
@EqualsAndHashCode(callSuper = true)
public class WorkersHomeReviewResult extends BaseModel {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("测评人表id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String peoId;
@Column
@Comment("测评标准id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String proxyId;
@Column
@Comment("测评分数/满意度")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String assessResult;
@Column
@Comment("会员评家意见或建议")
@ColDefine(type = ColType.TEXT)
private String recommendation;
@One(field = "peoId",key = "id")
private WorkersHomeReviewPeo reviewPeo;
}
@@ -0,0 +1,28 @@
package com.budwk.app.zhgh.dayofficework.workershome.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import org.nutz.lang.util.NutMap;
/**
* @version 1.0
* @Author zzr
* @nameWorkersHomeApplyService
* @Date 2024/7/31 11:09
* @注释
*/
public interface WorkersHomeApplyService extends BaseService<WorkersHomeApply> {
/**
* 根据id获取信息
* @param id
* @return
*/
NutMap findById(String id);
/**
* 设置参数
* @param wakesHomeApply
*/
void setParams(WorkersHomeApply wakesHomeApply);
}
@@ -0,0 +1,7 @@
package com.budwk.app.zhgh.dayofficework.workershome.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
public interface WorkersHomeInfoService extends BaseService<WorkersHome> {
}
@@ -0,0 +1,58 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHomeApply;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeApplyService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
/**
* @version 1.0
* @Author zzr
* @nameWakesHomeApplyServiceImpl
* @Date 2024/7/31 11:10
* @注释
*/
@IocBean(args = {"refer:dao"})
public class WorkersHomeApplyServiceImpl extends BaseServiceImpl<WorkersHomeApply> implements WorkersHomeApplyService {
public WorkersHomeApplyServiceImpl(Dao dao) {
super(dao);
}
@Override
public NutMap findById(String id) {
WorkersHomeApply apply = fetch(id);
NutMap nutMap = Lang.obj2nutmap(apply);
if (StrUtil.isNotBlank(apply.getOrganizationAuditId())) {
Audit audit = dao().fetch(Audit.class, Cnd.where("id", "=", apply.getOrganizationAuditId()));
nutMap.put("organizationAudit", Lang.obj2nutmap(audit));
}
if (StrUtil.isNotBlank(apply.getSchoolAuditId())) {
Audit audit = dao().fetch(Audit.class, Cnd.where("id", "=", apply.getSchoolAuditId()));
nutMap.put("schoolAudit", Lang.obj2nutmap(audit));
}
return nutMap;
}
@Override
public void setParams(WorkersHomeApply wakesHomeApply) {
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
wakesHomeApply.setId(R.UU32());
wakesHomeApply.setApplyDate(DateUtil.today());
wakesHomeApply.setUnitId(user.getUnitId());
wakesHomeApply.setUnitName(user.getUnitName());
wakesHomeApply.setUnionId(user.getUnionId());
wakesHomeApply.setUnionName(user.getUnionName());
}
}
@@ -0,0 +1,14 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.dayofficework.workershome.model.WorkersHome;
import com.budwk.app.zhgh.dayofficework.workershome.service.WorkersHomeInfoService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
@IocBean(args = {"refer:dao"})
public class WorkersHomeInfoServiceImpl extends BaseServiceImpl<WorkersHome> implements WorkersHomeInfoService {
public WorkersHomeInfoServiceImpl(Dao dao) {
super(dao);
}
}
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl.review;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentBzService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @ClassName CommentBzServiceImpl
* @Description TODO
* @Author zhf
* @Date 2023/9/4 16:30
*/
@IocBean(args = {"refer:dao"})
public class CommentBzServiceImpl extends BaseServiceImpl<WorkersHomeReviewNorm> implements CommentBzService {
public CommentBzServiceImpl(Dao dao) {
super(dao);
}
}
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl.review;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentNrService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @ClassName CommentNrServiceImpl
* @Description TODO
* @Author zhf
* @Date 2023/9/4 16:28
*/
@IocBean(args = {"refer:dao"})
public class CommentNrServiceImpl extends BaseServiceImpl<WorkersHomeReviewContent> implements CommentNrService {
public CommentNrServiceImpl(Dao dao) {
super(dao);
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl.review;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewResult;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentPeoService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@IocBean(args = {"refer:dao"})
public class CommentPeoServiceImpl extends BaseServiceImpl<WorkersHomeReviewPeo> implements CommentPeoService {
public CommentPeoServiceImpl(Dao dao) {super(dao);}
@Inject
private BaseService baseService;
@Inject
private CommentZbService commentZbService;
/**
* 获取测评结果信息
* @param peoId 指标id
* @return
*/
@Override
public NutMap getBzById(String peoId) {
WorkersHomeReviewPeo commentPeo = fetch(peoId);
List<WorkersHomeReviewResult> query = baseService.dao().query(WorkersHomeReviewResult.class, Cnd.where("peo_id","=",peoId));
//对测评标准分组
Map<String, WorkersHomeReviewResult> commentResultMap = query.stream().collect(Collectors.toMap(v -> v.getProxyId(), v -> v));
//获取指标
WorkersHomeReviewProxy khzb = commentZbService.khzb(commentPeo.getProxyId());
List<WorkersHomeReviewContent> nrs = khzb.getReviewContents();
nrs.forEach(v->{
v.getReviewNorms().forEach(o->{
//赋值测评结果
WorkersHomeReviewResult result = commentResultMap.get(o.getId());
if (Lang.isNotEmpty(result)){
o.setOptions(StrUtil.isNotBlank(result.getRecommendation()) ? result.getRecommendation() : "未填写此项");
o.setResultScore(result.getAssessResult());
}
});
});
NutMap nutMap = new NutMap();
nutMap.setv("zbxx",khzb);
nutMap.setv("commentPeo",commentPeo);
return nutMap;
}
}
@@ -0,0 +1,87 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl.review;
import cn.hutool.core.convert.Convert;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentPeoService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentStatisticsService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @version 1.0
* @Author zzr
* @nameCommentStatisticsServiceImpl
* @Date 2024/8/26 9:48
* @注释
*/
@IocBean(args = {"refer:dao"})
public class CommentStatisticsServiceImpl extends BaseServiceImpl<WorkersHomeReviewPeo> implements CommentStatisticsService {
public CommentStatisticsServiceImpl(Dao dao) {
super(dao);
}
@Inject
private CommentPeoService commentPeoService;
@Override
public void exportWord(WorkersHomeReviewPeo peo, OutputStream outputStream) {
NutMap map = commentPeoService.getBzById(peo.getId());
//最后的导出表
NutMap resultMap = NutMap.NEW();
List<NutMap> list = new ArrayList<>();
// resultMap.put("schoolName", Globals.schoolName);
WorkersHomeReviewProxy khzb = map.getAs("zbxx", WorkersHomeReviewProxy.class);
List<WorkersHomeReviewContent> nrs = khzb.getReviewContents();
nrs.forEach(v -> {
NutMap nutMap = NutMap.NEW();
List<WorkersHomeReviewNorm> bzs = v.getReviewNorms();
String nr = bzs.stream().sorted(Comparator.comparing(WorkersHomeReviewNorm::getContentNumber)).map(item -> {
return item.getContentNumber() + "." + item.getInspection() + "(" + item.getScore() + "分)";
}).collect(Collectors.joining("\n"));
int jf = bzs.stream().mapToInt(item -> Integer.parseInt(item.getScore())).sum();
int zpf = bzs.stream().mapToInt(item -> Integer.parseInt(item.getResultScore())).sum();
WorkersHomeReviewNorm commentBz = bzs.stream().findFirst().orElse(new WorkersHomeReviewNorm());
nutMap.put("xh", Convert.numberToChinese(Double.parseDouble(v.getContentNumber()), false));
nutMap.put("zb", v.getContent());
nutMap.put("nr", nr);
nutMap.put("jf", jf);
nutMap.put("zpf", zpf);
nutMap.put("bz", commentBz.getOptions());
list.add(nutMap);
});
// HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
// HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
// htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
//
// Configure config = Configure.newBuilder().bind("list", policy)
// .bind("list.nr", htmlRenderPolicy).build();
resultMap.put("list", list);
try {
// InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("docTemplate/workershome.docx");
// XWPFTemplate.compile(inputStream, config).render(resultMap, outputStream);
// inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,82 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.impl.review;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_union;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewGrading;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentNrService;
import com.budwk.app.zhgh.dayofficework.workershome.service.review.CommentZbService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.random.R;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName CommentZbServiceImpl
* @Description TODO
* @Author zhf
* @Date 2023/9/4 15:54
*/
@IocBean(args = {"refer:dao"})
public class CommentZbServiceImpl extends BaseServiceImpl<WorkersHomeReviewProxy> implements CommentZbService {
public CommentZbServiceImpl(Dao dao) {
super(dao);
}
@Inject
private CommentNrService commentNrService;
@Override
public WorkersHomeReviewProxy khzb(String zbid) {
if (StrUtil.isBlank(zbid)) {
return null;
}
WorkersHomeReviewProxy zb = dao().fetchLinks(fetch(zbid), "nrs", Cnd.NEW().asc("contentNumber"));
for (WorkersHomeReviewContent nr : zb.getReviewContents()) {
List<WorkersHomeReviewNorm> query = dao().query(WorkersHomeReviewNorm.class, Cnd.where("zb_id", "=", zbid).and("nr_id", "=", nr.getId()).asc("contentNumber"));
nr.setReviewNorms(query);
}
return zb;
}
@Override
public void setGrading(WorkersHomeReviewProxy commentZb) {
int count = dao().count(WorkersHomeReviewGrading.class, Cnd.where("zbId", "=", commentZb.getId()));
if (count > 0) {
dao().clear(WorkersHomeReviewGrading.class, Cnd.where("zbId", "=", commentZb.getId()));
}
if (ObjectUtil.isNotNull(commentZb.getCommentTarget()) && commentZb.getCommentTarget() != 1) {
List<Sys_union> query = new ArrayList<>();
if (commentZb.getCommentTarget() == 2) {
query = dao().query(Sys_union.class, Cnd.NEW());
} else if (commentZb.getCommentTarget() == 3) {
query = dao().query(Sys_union.class, Cnd.where("id", "in", commentZb.getUnionIds()));
}
List<WorkersHomeReviewGrading> commentUnionGradings = new ArrayList<>();
for (Sys_union union : query) {
WorkersHomeReviewGrading unionGrading = new WorkersHomeReviewGrading();
unionGrading.setId(R.UU32());
unionGrading.setUnionId(union.getId());
unionGrading.setProxyId(commentZb.getId());
unionGrading.setUnionName(union.getName());
unionGrading.setUnionCode(union.getUnionCode());
unionGrading.setIsGrading(false);
unionGrading.setGradingTime(null);
commentUnionGradings.add(unionGrading);
}
dao().insert(commentUnionGradings);
}
}
}
@@ -0,0 +1,8 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.review;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
public interface CommentBzService extends BaseService<WorkersHomeReviewNorm> {
}
@@ -0,0 +1,8 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.review;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewContent;
public interface CommentNrService extends BaseService<WorkersHomeReviewContent> {
}
@@ -0,0 +1,16 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.review;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import org.nutz.lang.util.NutMap;
public interface CommentPeoService extends BaseService<WorkersHomeReviewPeo> {
/**
* 根据指标id和被测评人id查测评结果
* @param peoId 指标id
* @return
*/
NutMap getBzById(String peoId);
}
@@ -0,0 +1,22 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.review;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewPeo;
import java.io.OutputStream;
/**
* @version 1.0
* @Author zzr
* @nameCommentStatisticsService
* @Date 2024/8/26 9:47
* @注释
*/
public interface CommentStatisticsService extends BaseService<WorkersHomeReviewPeo> {
void exportWord(WorkersHomeReviewPeo peo, OutputStream outputStream);
}
@@ -0,0 +1,13 @@
package com.budwk.app.zhgh.dayofficework.workershome.service.review;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewProxy;
public interface CommentZbService extends BaseService<WorkersHomeReviewProxy> {
WorkersHomeReviewProxy khzb(String zbid);
void setGrading(WorkersHomeReviewProxy zb);
}
@@ -0,0 +1,34 @@
package com.budwk.app.zhgh.dayofficework.workershome.vo;
import cn.hutool.json.JSONObject;
import com.budwk.app.zhgh.dayofficework.workershome.model.review.WorkersHomeReviewNorm;
import lombok.Data;
import java.util.List;
/**
* @version 1.0
* @Author zzr
* @nameWakesHomeVo
* @Date 2024/8/1 16:06
* @注释 职工建家vo
*/
@Data
public class WakesHomeVo {
private String id;
private List<WorkersHomeReviewNorm> bzList;
private String reviewResult;
private String evaluatedPersonId;
private String evaluatedPersonName;
private String evaluatedPersonType;
private String presidentOpinions;
private List<JSONObject> files;
}
@@ -25,7 +25,6 @@ public class IntegralDetail extends BaseModel implements Serializable {
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@@ -0,0 +1,187 @@
package com.budwk.app.zhgh.mall.manage.models.goods.dto;
import com.budwk.app.zhgh.mall.manage.models.goods.entity.GoodsGalleryDO;
import com.budwk.app.zhgh.mall.manage.models.goods.entity.GoodsParamsDO;
import com.budwk.app.zhgh.mall.manage.models.goods.vo.ExchangeVO;
import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsMobileIntroVO;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 商品vo
*
* @author fk
* @version v2.0
* @since v7.0.0
* 2018年3月21日 上午11:25:10
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class GoodsDTO implements Serializable {
@Serial
private static final long serialVersionUID = 3922135264669953741L;
@ApiModelProperty("商品id")
private Long goodsId;
@ApiModelProperty("分类id")
private Long categoryId;
/**
* 用作显示
*/
@ApiModelProperty("分类名称")
private String categoryName;
@ApiModelProperty("店铺分类id")
@Min(value = 0, message = "店铺分类值不正确")
private Long shopCatId;
@ApiModelProperty("品牌id")
private Long brandId;
@ApiModelProperty("商品名称")
@NotEmpty(message = "商品名称不能为空")
private String goodsName;
@ApiModelProperty("商品编号")
@Length(max = 30,message = "商品编号太长,不能超过30个字符")
private String sn;
@ApiModelProperty("商品价格")
@NotNull(message = "商品价格不能为空")
@Min(value = 0, message = "商品价格不能为负数")
@Max(value = 99999999, message = "商品价格不能超过99999999")
private Double price;
@ApiModelProperty("成本价格")
@NotNull(message = "成本价格不能为空")
@Min(value = 0, message = "成本价格不能为负数")
@Max(value = 99999999, message = "成本价格不能超过99999999")
private Double cost;
@ApiModelProperty("市场价格")
@NotNull(message = "市场价格不能为空")
@Min(value = 0, message = "市场价格不能为负数")
@Max(value = 99999999, message = "市场价格不能超过99999999")
private Double mktprice;
@ApiModelProperty("重量")
@NotNull(message = "商品重量不能为空")
@Min(value = 0, message = "重量不能为负数")
@Max(value = 99999999,message = "重量不能超过99999999")
private Double weight;
@ApiModelProperty("谁承担运费0:买家承担,1:卖家承担")
@NotNull(message = "承担运费不能为空")
@Min(value = 0, message = "承担运费值不正确")
@Max(value = 1, message = "承担运费值不正确")
private Integer goodsTransfeeCharge;
@ApiModelProperty("详情")
private String intro;
@ApiModelProperty("是否有规格0没有1有")
private Integer haveSpec;
@ApiModelProperty("库存")
@Max(value = 99999999, message = "库存不能超过99999999")
private Integer quantity;
@ApiModelProperty("是否上架,1上架 0下架")
@Min(value = 0, message = "是否上架值不正确")
@Max(value = 1, message = "是否上架值不正确")
private Integer marketEnable;
@ApiModelProperty("商品参数")
@Valid
private List<GoodsParamsDO> goodsParamsList;
@ApiModelProperty("商品相册")
@NotNull(message = "商品相册图片不能为空")
@Size(min = 1,message = "商品相册图片不能为空")
private List<GoodsGalleryDO> goodsGalleryList;
@ApiModelProperty("积分兑换对象,不是积分兑换商品可以不传")
private ExchangeVO exchange;
@ApiModelProperty("sku数据变化或者组合变化判断 0:没变化,1:变化")
private Integer hasChanged;
@ApiModelProperty("seo标题")
private String pageTitle;
@ApiModelProperty("seo关键字")
private String metaKeywords;
@ApiModelProperty("seo描述")
private String metaDescription;
@ApiModelProperty("商品的评论数量")
private Integer commentNum;
@ApiModelProperty("运费模板id,不需要运费模板时值是0")
private Long templateId;
@ApiModelProperty("商品是否审核")
private Integer isAuth;
@ApiModelProperty("可用库存")
private Integer enableQuantity;
@ApiModelProperty("商品移动端详情数据集合")
private List<GoodsMobileIntroVO> introList;
@ApiModelProperty("商品视频")
private String goodsVideo;
@Override
public String toString() {
return "GoodsDTO{" +
"goodsId=" + goodsId +
", categoryId=" + categoryId +
", categoryName='" + categoryName + '\'' +
", shopCatId=" + shopCatId +
", brandId=" + brandId +
", goodsName='" + goodsName + '\'' +
", sn='" + sn + '\'' +
", price=" + price +
", cost=" + cost +
", mktprice=" + mktprice +
", weight=" + weight +
", goodsTransfeeCharge=" + goodsTransfeeCharge +
", intro='" + intro + '\'' +
", haveSpec=" + haveSpec +
", quantity=" + quantity +
", marketEnable=" + marketEnable +
", goodsParamsList=" + goodsParamsList +
", goodsGalleryList=" + goodsGalleryList +
", exchange=" + exchange +
", hasChanged=" + hasChanged +
", pageTitle='" + pageTitle + '\'' +
", metaKeywords='" + metaKeywords + '\'' +
", metaDescription='" + metaDescription + '\'' +
", commentNum=" + commentNum +
", templateId=" + templateId +
", isAuth=" + isAuth +
", enableQuantity=" + enableQuantity +
", introList=" + introList +
", goodsVideo='" + goodsVideo + '\'' +
'}';
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 品牌实体
*
* @author fky
*
*/
@Data
@Table("mall_brand")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class BrandDO implements Serializable {
@Serial
private static final long serialVersionUID = 9122931201151887L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long brandId;
/**
* 品牌名称
*/
@Column
@Comment("品牌名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String name;
/**
* 品牌图标
*/
@Column
@Comment("品牌图标")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String logo;
/**
* 是否删除,0删除1未删除
*/
@Column
@Comment("是否删除")
@ColDefine(type = ColType.INT)
private Integer disabled;
@Override
public String toString() {
return "[brandId=" + brandId + ", name=" + name + ", logo=" + logo + ", disabled=" + disabled + "]";
}
}
@@ -0,0 +1,66 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 分类品牌关联表实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Comment("分类品牌关联表实体")
@Table("mall_category_brand")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class CategoryBrandDO implements Serializable {
@Serial
private static final long serialVersionUID = 3315719881926878L;
/**
* 分类id
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long id;
/**
* 分类id
*/
@Column
@Comment("分类id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 品牌id
*/
@Column
@Comment("品牌id")
@ColDefine(customType = "bigint")
private Long brandId;
public CategoryBrandDO(Long categoryId, Long brandId) {
super();
this.categoryId = categoryId;
this.brandId = brandId;
}
@Override
public String toString() {
return "CategoryBrandDO [categoryId=" + categoryId + ", brandId=" + brandId + "]";
}
}
@@ -0,0 +1,151 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import org.nutz.dao.entity.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.io.Serial;
import java.io.Serializable;
import java.util.Objects;
/**
* 商品分类实体
*
* @author fky
*
*/
@Data
@Comment("商品分类实体")
@Table("mall_category")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class CategoryDO implements Serializable {
@Serial
private static final long serialVersionUID = 1964321416223565L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 分类名称
*/
@Column
@Comment("分类名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String name;
/**
* 分类父id
*/
@Column
@Comment("分类父id,顶级0")
@ColDefine(customType = "bigint")
private Long parentId;
/**
* 分类父子路径
*/
@Column
@Comment("分类父子路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String categoryPath;
/**
* 该分类下商品数量
*/
@Column
@Comment("该分类下商品数量")
@ColDefine(type = ColType.INT)
private Integer goodsCount;
/**
* 分类排序
*/
@Column
@Comment("分类排序")
@ColDefine(type = ColType.INT)
private Integer categoryOrder;
/**
* 分类图标
*/
@Column
@Comment("分类图标")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String image;
/**
* 是否显示 YES:是,NO:否
*/
@Column
@Comment("是否显示 YES:是,NO:否")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String isShow;
/**
* 分类广告图片
*/
@Column
@Comment("分类广告图片")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String advImage;
/**
* 分类广告图片链接
*/
@Column
@Comment("分类广告图片链接")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String advImageLink;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
CategoryDO that = (CategoryDO) o;
return Objects.equals(categoryId, that.categoryId) &&
Objects.equals(name, that.name) &&
Objects.equals(parentId, that.parentId) &&
Objects.equals(categoryPath, that.categoryPath) &&
Objects.equals(goodsCount, that.goodsCount) &&
Objects.equals(categoryOrder, that.categoryOrder) &&
Objects.equals(image, that.image) &&
Objects.equals(isShow, that.isShow) &&
Objects.equals(advImage, that.advImage) &&
Objects.equals(advImageLink, that.advImageLink);
}
@Override
public int hashCode() {
return Objects.hash(categoryId, name, parentId, categoryPath, goodsCount, categoryOrder, image, isShow, advImage, advImageLink);
}
@Override
public String toString() {
return "CategoryDO{" +
"categoryId=" + categoryId +
", name='" + name + '\'' +
", parentId=" + parentId +
", categoryPath='" + categoryPath + '\'' +
", goodsCount=" + goodsCount +
", categoryOrder=" + categoryOrder +
", image='" + image + '\'' +
", isShow='" + isShow + '\'' +
", advImage='" + advImage + '\'' +
", advImageLink='" + advImageLink + '\'' +
'}';
}
}
@@ -0,0 +1,63 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 分类规格关联表实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_category_spec")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class CategorySpecDO implements Serializable {
@Serial
private static final long serialVersionUID = 3127259064985991L;
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long id;
/**
* 分类id
*/
@Column
@Comment("分类id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 规格id
*/
@Column
@Comment("规格id")
@ColDefine(customType = "bigint")
private Long specId;
public CategorySpecDO(Long categoryId, Long specId) {
super();
this.categoryId = categoryId;
this.specId = specId;
}
@Override
public String toString() {
return "CategorySpecDO [categoryId=" + categoryId + ", specId=" + specId + "]";
}
}
@@ -0,0 +1,307 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import cn.hutool.json.JSONUtil;
import com.budwk.app.zhgh.mall.manage.models.goods.dto.GoodsDTO;
import com.budwk.app.zhgh.mall.manage.models.goods.enums.GoodsType;
import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsMobileIntroVO;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serializable;
import java.util.List;
/**
* 草稿商品实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_draft_goods")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class DraftGoodsDO implements Serializable {
private static final long serialVersionUID = 7646662730625878L;
/**
* 草稿商品id
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long draftGoodsId;
/**
* 商品编号
*/
@Column
@Comment("商品编号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String sn;
/**
* 商品名称
*/
@Column
@Comment("商品名称")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String goodsName;
/**
* 商品品牌ID
*/
@Column
@Comment("商品品牌ID")
@ColDefine(customType = "bigint")
private Long brandId;
/**
* 商品分类ID
*/
@Column
@Comment("商品分类ID")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 商品重量
*/
@Column
@Comment("商品重量")
@ColDefine(type = ColType.DOUBLE)
private Double weight;
/**
* 商品详情
*/
@Column
@Comment("商品详情")
@ColDefine(type = ColType.MYSQL_JSON)
private String intro;
/**
* 商品价格
*/
@Column
@Comment("商品价格")
@ColDefine(type = ColType.DOUBLE)
private Double price;
/**
* 商品成本价
*/
@Column
@Comment("商品成本价")
@ColDefine(type = ColType.DOUBLE)
private Double cost;
/**
* 商品市场价
*/
@Column
@Comment("商品市场价")
@ColDefine(type = ColType.DOUBLE)
private Double mktprice;
/**
* 商品类型
*/
@Column
@Comment("商品类型")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String goodsType;
/**
* 是否开启规格
*/
@Column
@Comment("是否开启规格")
@ColDefine(type = ColType.INT)
private Integer haveSpec;
/**
* 商品添加时间
*/
@Column
@Comment("商品添加时间")
@ColDefine(customType = "bigint")
private Long createTime;
/**
* 商品总库存
*/
@Column
@Comment("商品总库存")
@ColDefine(type = ColType.INT)
private Integer quantity;
/**
* 商品原始图片
*/
@Column
@Comment("商品原始图片")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String original;
/**
* 商品所属卖家ID
*/
@Column
@Comment("商品所属卖家ID")
@ColDefine(customType = "bigint")
private Long sellerId;
/**
* 商品所属店铺类目ID
*/
@Column
@Comment("商品所属店铺类目ID")
@ColDefine(customType = "bigint")
private Long shopCatId;
/**
* 商品运费模板ID
*/
@Column
@Comment("商品运费模板ID")
@ColDefine(customType = "bigint")
private Long templateId;
/**
* 是否为买家承担运费
*/
@Column
@Comment("是否为买家承担运费")
@ColDefine(type = ColType.INT)
private Integer goodsTransfeeCharge;
/**
* 商品所属店铺名称
*/
@Column
@Comment("商品所属店铺名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String sellerName;
/**
* seo 标题
*/
@Column
@Comment("seo 标题")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String pageTitle;
/**
* seo关键字
*/
@Column
@Comment("seo关键字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String metaKeywords;
/**
* seo描述
*/
@Column
@Comment("seo描述")
@ColDefine(type = ColType.MYSQL_JSON)
private String metaDescription;
/**
* 积分商品需要的金额
*/
@Column
@Comment("积分商品需要的金额")
@ColDefine(type = ColType.DOUBLE)
private Double exchangeMoney;
/**
* 积分商品需要的积分
*/
@Column
@Comment("积分商品需要的积分")
@ColDefine(type = ColType.INT)
private Integer exchangePoint;
/**
* 积分商品的分类id
*/
@Column
@Comment("积分商品的分类id")
@ColDefine(customType = "bigint")
private Long exchangeCategoryId;
/**
* 商品移动端详情
*/
@Column
@Comment("商品移动端详情")
@ColDefine(type = ColType.MYSQL_JSON)
private String mobileIntro;
/**
* 商品视频
*/
@Column
@Comment("商品视频")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String goodsVideo;
private List<String> galleryList;
public DraftGoodsDO(GoodsDTO goodsVO) {
this.draftGoodsId = goodsVO.getGoodsId();
this.categoryId = goodsVO.getCategoryId();
this.shopCatId = goodsVO.getShopCatId();
this.brandId = goodsVO.getBrandId();
this.goodsName = goodsVO.getGoodsName();
this.sn = goodsVO.getSn();
this.price = goodsVO.getPrice() == null ? 0 : goodsVO.getPrice();
this.cost = goodsVO.getCost() == null ? 0 : goodsVO.getCost();
this.mktprice = goodsVO.getMktprice() == null ? 0 : goodsVO.getMktprice();
this.weight = goodsVO.getWeight() == null ? 0 : goodsVO.getWeight();
this.goodsTransfeeCharge = goodsVO.getGoodsTransfeeCharge();
this.intro = goodsVO.getIntro();
this.haveSpec = goodsVO.getHaveSpec();
if (goodsVO.getExchange() != null && goodsVO.getExchange().getEnableExchange() == 1) {
this.goodsType = GoodsType.POINT.name();
this.exchangeMoney = goodsVO.getExchange().getExchangeMoney();
this.exchangePoint = goodsVO.getExchange().getExchangePoint();
this.exchangeCategoryId = goodsVO.getExchange().getCategoryId();
} else {
this.goodsType = GoodsType.NORMAL.name();
this.exchangeMoney = 0.00;
this.exchangePoint = 0;
this.exchangeCategoryId = 1L;
}
this.pageTitle = goodsVO.getPageTitle();
this.metaKeywords = goodsVO.getMetaKeywords();
this.metaDescription = goodsVO.getMetaDescription();
this.templateId = goodsVO.getTemplateId();
List<GoodsMobileIntroVO> introList = goodsVO.getIntroList();
if (introList != null && !introList.isEmpty()) {
this.mobileIntro = JSONUtil.toJsonStr(introList);
}
this.goodsVideo = goodsVO.getGoodsVideo();
}
@Override
public String toString() {
return "DraftGoodsDO{" +
"draftGoodsId=" + draftGoodsId +
", sn='" + sn + '\'' +
", goodsName='" + goodsName + '\'' +
", brandId=" + brandId +
", categoryId=" + categoryId +
", weight=" + weight +
", intro='" + intro + '\'' +
", price=" + price +
", cost=" + cost +
", mktprice=" + mktprice +
", goodsType='" + goodsType + '\'' +
", haveSpec=" + haveSpec +
", createTime=" + createTime +
", quantity=" + quantity +
", original='" + original + '\'' +
", sellerId=" + sellerId +
", shopCatId=" + shopCatId +
", templateId=" + templateId +
", goodsTransfeeCharge=" + goodsTransfeeCharge +
", sellerName='" + sellerName + '\'' +
", pageTitle='" + pageTitle + '\'' +
", metaKeywords='" + metaKeywords + '\'' +
", metaDescription='" + metaDescription + '\'' +
", exchangeMoney=" + exchangeMoney +
", exchangePoint=" + exchangePoint +
", exchangeCategoryId=" + exchangeCategoryId +
", mobileIntro='" + mobileIntro + '\'' +
", goodsVideo='" + goodsVideo + '\'' +
", galleryList=" + galleryList +
'}';
}
}
@@ -0,0 +1,80 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 草稿商品参数表实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_draft_goods_params")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class DraftGoodsParamsDO implements Serializable {
@Serial
private static final long serialVersionUID = 1137617128769441L;
/**
* ID
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long id;
/**
* 草稿ID
*/
@Column
@Comment("草稿id")
@ColDefine(customType = "bigint")
private Long draftGoodsId;
/**
* 参数ID
*/
@Column
@Comment("参数id")
@ColDefine(customType = "bigint")
private Long paramId;
/**
* 参数名
*/
@Column
@Comment("参数名")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String paramName;
/**
* 参数值
*/
@Column
@Comment("参数值")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String paramValue;
public DraftGoodsParamsDO(GoodsParamsDO param) {
this.paramId = param.getParamId();
this.paramName = param.getParamName();
this.paramValue = param.getParamValue();
}
@Override
public String toString() {
return "DraftGoodsParamsDO [id=" + id + ", draftGoodsId=" + draftGoodsId + ", paramId=" + paramId
+ ", paramName=" + paramName + ", paramValue=" + paramValue + "]";
}
}
@@ -0,0 +1,106 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsSkuVO;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 草稿商品sku实体
*
* @author fky
*
*/
@Data
@Table("mall_draft_goods_sku")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class DraftGoodsSkuDO implements Serializable {
@Serial
private static final long serialVersionUID = 5684194304207265L;
/**
* 主键ID
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long draftSkuId;
/**
* 草稿id
*/
@Column
@Comment("草稿id")
@ColDefine(customType = "bigint")
private Long draftGoodsId;
/**
* 货号
*/
@Column
@Comment("货号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String sn;
/**
* 总库存
*/
@Column
@Comment("货号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private Integer quantity;
/**
* 价格
*/
@Column
@Comment("货号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private Double price;
/**
* 规格
*/
@Column
@Comment("货号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String specs;
/**
* 成本
*/
@Column
@Comment("货号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private Double cost;
/**
* 重量
*/
@Column
@Comment("货号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private Double weight;
public DraftGoodsSkuDO() {
}
public DraftGoodsSkuDO(GoodsSkuVO skuVO) {
this.setDraftGoodsId(skuVO.getGoodsId());
this.setSn(skuVO.getSn());
this.setPrice(skuVO.getPrice());
this.setCost(skuVO.getCost());
this.setWeight(skuVO.getWeight());
this.setQuantity(skuVO.getQuantity());
this.setSpecs(skuVO.getSpecs());
}
@Override
public String toString() {
return "DraftGoodsSkuDO [draftSkuId=" + draftSkuId + ", draftGoodsId=" + draftGoodsId + ", sn=" + sn
+ ", quantity=" + quantity + ", price=" + price + ", specs=" + specs + ", cost=" + cost + ", weight="
+ weight + "]";
}
}
@@ -0,0 +1,481 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.zhgh.mall.manage.models.goods.dto.GoodsDTO;
import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsMobileIntroVO;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.Objects;
/**
* 商品实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_goods")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class GoodsDO implements Serializable {
@Serial
private static final long serialVersionUID = 9115135430405642L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long goodsId;
/**
* 商品名称
*/
@Column
@Comment("商品名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String goodsName;
/**
* 商品编号
*/
@Column
@Comment("商品编号")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String sn;
/**
* 品牌id
*/
@Column
@Comment("品牌id")
@ColDefine(customType = "bigint")
private Long brandId;
/**
* 分类id
*/
@Column
@Comment("分类id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 商品类型normal普通point积分
*/
@Column
@Comment("商品类型NORMAL普通POINT积分")
@ColDefine(type = ColType.VARCHAR, width = 120)
private String goodsType;
/**
* 重量
*/
@Column
@Comment("重量")
@ColDefine(type = ColType.DOUBLE)
private Double weight;
/**
* 上架状态 1上架 0下架
*/
@Column
@Comment("上架状态 1上架 0下架")
@ColDefine(type = ColType.INT)
private Integer marketEnable;
/**
* 详情
*/
@Column
@Comment("详情")
@ColDefine(type = ColType.MYSQL_JSON)
private String intro;
/**
* 商品价格
*/
@Column
@Comment("商品价格")
@ColDefine(type = ColType.DOUBLE)
private Double price;
/**
* 成本价格
*/
@Column
@Comment("成本价格")
@ColDefine(type = ColType.DOUBLE)
private Double cost;
/**
* 市场价格
*/
@Column
@Comment("市场价格")
@ColDefine(type = ColType.DOUBLE)
private Double mktprice;
/**
* 是否有规格0没有 1有
*/
@Column
@Comment("是否有规格0没有 1有")
@ColDefine(type = ColType.INT)
private Integer haveSpec;
/**
* 创建时间
*/
@Column
@Comment("创建时间")
@ColDefine(customType = "bigint")
private Long createTime;
/**
* 最后修改时间
*/
@Column
@Comment("最后修改时间")
@ColDefine(customType = "bigint")
private Long lastModify;
/**
* 浏览数量
*/
@Column
@Comment("浏览数量")
@ColDefine(type = ColType.INT)
private Integer viewCount;
/**
* 购买数量
*/
@Column
@Comment("购买数量")
@ColDefine(type = ColType.INT)
private Integer buyCount;
/**
* 是否被删除0 删除 1未删除
*/
@Column
@Comment("是否被删除0 删除 1未删除")
@ColDefine(type = ColType.INT)
private Integer disabled;
/**
* 库存
*/
@Column
@Comment("库存")
@ColDefine(type = ColType.INT)
private Integer quantity;
/**
* 可用库存
*/
@Column
@Comment("可用库存")
@ColDefine(type = ColType.INT)
private Integer enableQuantity;
/**
* 如果是积分商品需要使用的积分
*/
@Column
@Comment("如果是积分商品需要使用的积分")
@ColDefine(type = ColType.INT)
private Integer point;
/**
* seo标题
*/
@Column
@Comment("seo标题")
@ColDefine(type = ColType.VARCHAR, width = 120)
private String pageTitle;
/**
* seo关键字
*/
@Column
@Comment("seo关键字")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String metaKeywords;
/**
* seo描述
*/
@Column
@Comment("seo描述")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String metaDescription;
/**
* 商品好评率
*/
@Column
@Comment("商品好评率")
@ColDefine(type = ColType.DOUBLE)
private Double grade;
/**
* 缩略图路径
*/
@Column
@Comment("缩略图路径")
@ColDefine(type = ColType.VARCHAR, width = 120)
private String thumbnail;
/**
* 大图路径
*/
@Column
@Comment("大图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String big;
/**
* 小图路径
*/
@Column
@Comment("小图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String small;
/**
* 原图路径
*/
@Column
@Comment("原图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String original;
/**
* 卖家id
*/
@Column
@Comment("卖家id")
@ColDefine(customType = "bigint")
private Long sellerId;
/**
* 店铺分类id
*/
@Column
@Comment("店铺分类id")
@ColDefine(customType = "bigint")
private Long shopCatId;
/**
* 评论数量
*/
@Column
@Comment("评论数量")
@ColDefine(type = ColType.INT)
private Integer commentNum;
/**
* 运费模板id
*/
@Column
@Comment("运费模板id")
@ColDefine(customType = "bigint")
private Long templateId;
/**
* 谁承担运费0:买家承担,1:卖家承担
*/
@Column
@Comment("谁承担运费0:买家承担,1:卖家承担")
@ColDefine(type = ColType.INT)
private Integer goodsTransfeeCharge;
/**
* 卖家名字
*/
@Column
@Comment("卖家名字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String sellerName;
/**
* 0 需要审核 并且待审核,1 不需要审核 2需要审核 且审核通过 3 需要审核 且审核未通过
*/
@Column
@Comment("0 待审核,1 审核通过 2 未通过")
@ColDefine(type = ColType.INT)
private Integer isAuth;
/**
* 审核信息
*/
@Column
@Comment("审核信息")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String authMessage;
/**
* 下架原因
*/
@Column
@Comment("下架原因")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String underMessage;
@Column
@Comment("是否自营0否 1是")
@ColDefine(type = ColType.INT)
private Integer selfOperated;
/**
* 商品移动端详情
*/
@Column
@Comment("商品移动端详情")
@ColDefine(type = ColType.MYSQL_JSON)
private String mobileIntro;
/**
* 商品视频
*/
@Column
@Comment("商品视频")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String goodsVideo;
/**
* 搜索优先级
*/
@Column
@Comment("搜索优先级")
@ColDefine(type = ColType.INT)
private Integer priority;
@JsonIgnore
protected String scanRounds;
public GoodsDO(GoodsDTO goodsVO) {
this.goodsId = goodsVO.getGoodsId();
this.categoryId = goodsVO.getCategoryId();
this.shopCatId = goodsVO.getShopCatId();
this.brandId = goodsVO.getBrandId();
this.goodsName = goodsVO.getGoodsName();
this.sn = goodsVO.getSn();
this.price = goodsVO.getPrice();
this.cost = goodsVO.getCost();
this.mktprice = goodsVO.getMktprice();
this.weight = goodsVO.getWeight();
this.goodsTransfeeCharge = goodsVO.getGoodsTransfeeCharge();
this.intro = goodsVO.getIntro();
this.haveSpec = goodsVO.getHaveSpec();
this.templateId = goodsVO.getTemplateId();
this.pageTitle = goodsVO.getPageTitle();
this.metaKeywords = goodsVO.getMetaKeywords();
this.metaDescription = goodsVO.getMetaDescription();
this.marketEnable = goodsVO.getMarketEnable() != 1 ? 0 : 1;
if (StrUtil.isNotBlank(this.pageTitle)) {
this.pageTitle = goodsVO.getGoodsName();
}
if (StrUtil.isNotBlank(this.metaKeywords)) {
this.metaKeywords = goodsVO.getGoodsName();
}
if (StrUtil.isNotBlank(this.metaDescription)) {
this.metaDescription = goodsVO.getGoodsName();
}
List<GoodsMobileIntroVO> introList = goodsVO.getIntroList();
if (introList != null && introList.size() != 0) {
this.mobileIntro = JSONUtil.toJsonStr(introList);
} else {
this.mobileIntro = "";
}
this.goodsVideo = goodsVO.getGoodsVideo();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
GoodsDO goodsDO = (GoodsDO) o;
return Objects.equals(goodsId, goodsDO.goodsId) &&
Objects.equals(goodsName, goodsDO.goodsName) &&
Objects.equals(sn, goodsDO.sn) &&
Objects.equals(brandId, goodsDO.brandId) &&
Objects.equals(categoryId, goodsDO.categoryId) &&
Objects.equals(goodsType, goodsDO.goodsType) &&
Objects.equals(weight, goodsDO.weight) &&
Objects.equals(marketEnable, goodsDO.marketEnable) &&
Objects.equals(intro, goodsDO.intro) &&
Objects.equals(price, goodsDO.price) &&
Objects.equals(cost, goodsDO.cost) &&
Objects.equals(mktprice, goodsDO.mktprice) &&
Objects.equals(haveSpec, goodsDO.haveSpec) &&
Objects.equals(createTime, goodsDO.createTime) &&
Objects.equals(lastModify, goodsDO.lastModify) &&
Objects.equals(viewCount, goodsDO.viewCount) &&
Objects.equals(buyCount, goodsDO.buyCount) &&
Objects.equals(disabled, goodsDO.disabled) &&
Objects.equals(quantity, goodsDO.quantity) &&
Objects.equals(enableQuantity, goodsDO.enableQuantity) &&
Objects.equals(point, goodsDO.point) &&
Objects.equals(pageTitle, goodsDO.pageTitle) &&
Objects.equals(metaKeywords, goodsDO.metaKeywords) &&
Objects.equals(metaDescription, goodsDO.metaDescription) &&
Objects.equals(grade, goodsDO.grade) &&
Objects.equals(thumbnail, goodsDO.thumbnail) &&
Objects.equals(big, goodsDO.big) &&
Objects.equals(small, goodsDO.small) &&
Objects.equals(original, goodsDO.original) &&
Objects.equals(sellerId, goodsDO.sellerId) &&
Objects.equals(shopCatId, goodsDO.shopCatId) &&
Objects.equals(commentNum, goodsDO.commentNum) &&
Objects.equals(templateId, goodsDO.templateId) &&
Objects.equals(goodsTransfeeCharge, goodsDO.goodsTransfeeCharge) &&
Objects.equals(sellerName, goodsDO.sellerName) &&
Objects.equals(isAuth, goodsDO.isAuth) &&
Objects.equals(authMessage, goodsDO.authMessage) &&
Objects.equals(underMessage, goodsDO.underMessage) &&
Objects.equals(selfOperated, goodsDO.selfOperated) &&
Objects.equals(mobileIntro, goodsDO.mobileIntro) &&
Objects.equals(goodsVideo, goodsDO.goodsVideo);
}
@Override
public int hashCode() {
return Objects.hash(goodsId, goodsName, sn, brandId, categoryId, goodsType, weight, marketEnable, intro, price, cost, mktprice, haveSpec, createTime, lastModify, viewCount, buyCount, disabled, quantity, enableQuantity, point, pageTitle, metaKeywords, metaDescription, grade, thumbnail, big, small, original, sellerId, shopCatId, commentNum, templateId, goodsTransfeeCharge, sellerName, isAuth, authMessage, underMessage, selfOperated, mobileIntro, goodsVideo);
}
@Override
public String toString() {
return "GoodsDO{" +
"goodsId=" + goodsId +
", goodsName='" + goodsName + '\'' +
", sn='" + sn + '\'' +
", brandId=" + brandId +
", categoryId=" + categoryId +
", goodsType='" + goodsType + '\'' +
", weight=" + weight +
", marketEnable=" + marketEnable +
", intro='" + intro + '\'' +
", price=" + price +
", cost=" + cost +
", mktprice=" + mktprice +
", haveSpec=" + haveSpec +
", createTime=" + createTime +
", lastModify=" + lastModify +
", viewCount=" + viewCount +
", buyCount=" + buyCount +
", disabled=" + disabled +
", quantity=" + quantity +
", enableQuantity=" + enableQuantity +
", point=" + point +
", pageTitle='" + pageTitle + '\'' +
", metaKeywords='" + metaKeywords + '\'' +
", metaDescription='" + metaDescription + '\'' +
", grade=" + grade +
", thumbnail='" + thumbnail + '\'' +
", big='" + big + '\'' +
", small='" + small + '\'' +
", original='" + original + '\'' +
", sellerId=" + sellerId +
", shopCatId=" + shopCatId +
", commentNum=" + commentNum +
", templateId=" + templateId +
", goodsTransfeeCharge=" + goodsTransfeeCharge +
", sellerName='" + sellerName + '\'' +
", isAuth=" + isAuth +
", authMessage='" + authMessage + '\'' +
", underMessage='" + underMessage + '\'' +
", selfOperated=" + selfOperated +
", mobileIntro='" + mobileIntro + '\'' +
", goodsVideo='" + goodsVideo + '\'' +
'}';
}
}
@@ -0,0 +1,101 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serializable;
/**
* 商品相册实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_goods_gallery")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class GoodsGalleryDO implements Serializable {
private static final long serialVersionUID = 8150217189133447L;
/**
* 主键
*/
@Id
@Column
@Comment("图片的主键id")
@ColDefine(customType = "bigint")
private Long imgId;
/**
* 商品主键
*/
@Column
@Comment("商品主键")
@ColDefine(customType = "bigint")
private Long goodsId;
/**
* 缩略图路径
*/
@Column
@Comment("缩略图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String thumbnail;
/**
* 小图路径
*/
@Column
@Comment("小图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String small;
/**
* 大图路径
*/
@Column
@Comment("大图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String big;
/**
* 原图路径
*/
@Column
@Comment("原图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String original;
/**
* 极小图路径
*/
@Column
@Comment("极小图路径")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String tiny;
/**
* 是否是默认图片1 0没有默认
*/
@Column
@Comment("是否是默认图片1 0没有默认")
@ColDefine(type = ColType.INT)
private Integer isdefault;
/**
* 排序
*/
@Column
@Comment("排序")
@ColDefine(type = ColType.INT)
private Integer sort;
@Override
public String toString() {
return "GoodsGalleryDO [imgId=" + imgId + ", goodsId=" + goodsId + ", thumbnail=" + thumbnail + ", small="
+ small + ", big=" + big + ", original=" + original + ", tiny=" + tiny + ", isdefault=" + isdefault
+ ", sort=" + sort + "]";
}
}
@@ -0,0 +1,79 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.nutz.dao.entity.annotation.*;
import java.io.Serializable;
/**
* 商品关联参数值实体
*
* @author fky
*
*/
@Data
@Table("mall_goods_params")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class GoodsParamsDO implements Serializable {
private static final long serialVersionUID = 4134870721776090L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long id;
/**
* 商品id
*/
@Column
@Comment("商品id")
@ColDefine(customType = "bigint")
private Long goodsId;
/**
* 参数id
*/
@Column
@Comment("参数id")
@ColDefine(customType = "bigint")
private Long paramId;
/**
* 参数名字
*/
@Column
@Comment("参数名字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String paramName;
/**
* 参数值
*/
@Column
@Comment("参数值")
@ColDefine(type = ColType.VARCHAR, width = 120)
@Length(max = 100, message = "参数值字符不能大于120")
private String paramValue;
public String getParamValue() {
if (StrUtil.isNotBlank(paramValue)) {
return "";
}
return paramValue;
}
@Override
public String toString() {
return "GoodsParamsDO [id=" + id + ", goodsId=" + goodsId + ", paramId=" + paramId + ", paramName=" + paramName
+ ", paramValue=" + paramValue + "]";
}
}
@@ -0,0 +1,225 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import cn.hutool.core.builder.EqualsBuilder;
import cn.hutool.core.builder.HashCodeBuilder;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.nutz.dao.entity.annotation.*;
import javax.validation.constraints.Max;
import java.io.Serial;
import java.io.Serializable;
/**
* 商品sku实体
*
* @author fky
*
*/
@Data
@Table("mall_goods_sku")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class GoodsSkuDO implements Serializable {
@Serial
private static final long serialVersionUID = 5102510694003249L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long skuId;
/**
* 商品id
*/
@Column
@Comment("商品id")
@ColDefine(customType = "bigint")
private Long goodsId;
/**
* 商品名称
*/
@Column
@Comment("商品名称")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String goodsName;
/**
* 商品编号
*/
@Column
@Comment("商品编号")
@ColDefine(type = ColType.VARCHAR, width = 30)
@Length(max = 30,message = "商品规格编号太长,不能超过30个字符")
private String sn;
/**
* 库存
*/
@Column
@Comment("库存")
@ColDefine(type = ColType.INT)
@Max(value = 99999999, message = "库存不能超过99999999")
private Integer quantity;
/**
* 可用库存
*/
@Column
@Comment("可用库存")
@ColDefine(type = ColType.INT)
private Integer enableQuantity;
/**
* 商品价格
*/
@Column
@Comment("商品价格")
@ColDefine(type = ColType.DOUBLE)
@Max(value = 99999999, message = "价格不能超过99999999")
private Double price;
/**
* 规格信息json
*/
@Column
@Comment("规格信息json")
@ColDefine(type = ColType.MYSQL_JSON)
private String specs;
/**
* 成本价格
*/
@Column
@Comment("成本价格")
@ColDefine(type = ColType.DOUBLE)
@Max(value = 99999999, message = "成本价格不能超过99999999")
private Double cost;
/**
* 重量
*/
@Column
@Comment("重量")
@ColDefine(type = ColType.DOUBLE)
@Max(value = 99999999, message = "重量不能超过99999999")
private Double weight;
/**
* 卖家id
*/
@Column
@Comment("卖家id")
@ColDefine(customType = "bigint")
private Long sellerId;
/**
* 卖家名称
*/
@Column
@Comment("卖家名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String sellerName;
/**
* 分类id
*/
@Column
@Comment("分类id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 缩略图
*/
@Column
@Comment("缩略图")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String thumbnail;
@Column
@Comment("hash_code")
@ColDefine(type = ColType.INT)
private Integer hashCode;
/**
* 运费模板ID(非数据库字段)
*/
private Long templateId;
@JsonIgnore
protected String scanRounds;
@Override
public String toString() {
return "GoodsSkuDO{" +
"skuId=" + skuId +
", goodsId=" + goodsId +
", goodsName='" + goodsName + '\'' +
", sn='" + sn + '\'' +
", quantity=" + quantity +
", enableQuantity=" + enableQuantity +
", price=" + price +
", specs='" + specs + '\'' +
", cost=" + cost +
", weight=" + weight +
", sellerId=" + sellerId +
", sellerName='" + sellerName + '\'' +
", categoryId=" + categoryId +
", thumbnail='" + thumbnail + '\'' +
", hashCode=" + hashCode +
", templateId=" + templateId +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
GoodsSkuDO that = (GoodsSkuDO) o;
return new EqualsBuilder()
.append(getSkuId(), that.getSkuId())
.append(getGoodsId(), that.getGoodsId())
.append(getGoodsName(), that.getGoodsName())
.append(getSn(), that.getSn())
.append(getQuantity(), that.getQuantity())
.append(getEnableQuantity(), that.getEnableQuantity())
.append(getPrice(), that.getPrice())
.append(getSpecs(), that.getSpecs())
.append(getCost(), that.getCost())
.append(getWeight(), that.getWeight())
.append(getSellerId(), that.getSellerId())
.append(getSellerName(), that.getSellerName())
.append(getCategoryId(), that.getCategoryId())
.append(getThumbnail(), that.getThumbnail())
.append(hashCode, that.hashCode)
.append(getTemplateId(), that.getTemplateId())
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(getSkuId())
.append(getGoodsId())
.append(getGoodsName())
.append(getSn())
.append(getQuantity())
.append(getEnableQuantity())
.append(getPrice())
.append(getSpecs())
.append(getCost())
.append(getWeight())
.append(getSellerId())
.append(getSellerName())
.append(getCategoryId())
.append(getThumbnail())
.append(hashCode)
.append(getTemplateId())
.toHashCode();
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.nutz.dao.entity.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
/**
* 参数组实体
*
* @author fky
*
*/
@Data
@Table("mall_parameter_group")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class ParameterGroupDO implements Serializable {
private static final long serialVersionUID = 2394621849767871L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long groupId;
/**
* 参数组名称
*/
@Column
@Comment("参数组名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotEmpty(message = "参数组名称不能为空")
@Length(max = 50, message = "参数组名称不能超过50字")
private String groupName;
/**
* 关联分类id
*/
@Column
@Comment("关联分类id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 排序
*/
@Column
@Comment("id")
@ColDefine(type = ColType.INT)
private Integer sort;
@Override
public String toString() {
return "ParameterGroupDO [groupId=" + groupId + ", groupName=" + groupName + ", categoryId=" + categoryId
+ ", sort=" + sort + "]";
}
}
@@ -0,0 +1,113 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.nutz.dao.entity.annotation.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 参数实体
*
* @author fky
*
*/
@Data
@Table("mall_parameters")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class ParametersDO implements Serializable {
private static final long serialVersionUID = 320610453789555L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long paramId;
/**
* 参数名称
*/
@Column
@Comment("参数名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
@NotEmpty(message = "参数名称必填")
@Length(max = 50, message = "参数名称不能超过50字")
private String paramName;
/**
* 参数类型1 输入项 2 选择项
*/
@Column
@Comment("参数类型1 输入项 2 选择项")
@ColDefine(type = ColType.INT)
@NotNull(message = "参数类型必选")
@Min(value = 1,message = "参数类型传值不正确")
@Max(value = 2,message = "参数类型传值不正确")
private Integer paramType;
/**
* 选择值,当参数类型是选择项2时,必填,逗号分隔
*/
@Column
@Comment("选择值")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String options;
/**
* 是否可索引,0 不显示 1 显示
*/
@Column
@Comment("是否可索引必选")
@ColDefine(type = ColType.INT)
@NotNull(message = "是否可索引必选")
@Min(value = 0,message = "是否可索引传值不正确")
@Max(value = 1,message = "是否可索引传值不正确")
private Integer isIndex;
/**
* 是否必填是 1 否 0
*/
@Column
@Comment("是否必填")
@ColDefine(type = ColType.INT)
@NotNull(message = "是否必填必选")
@Min(value = 0,message = "是否必填传值不正确")
@Max(value = 1,message = "是否必填传值不正确")
private Integer required;
/**
* 参数分组id
*/
@Column
@Comment("参数分组id")
@ColDefine(customType = "bigint")
@NotNull(message = "所属参数组不能为空")
private Long groupId;
/**
* 分类id
*/
@Column
@Comment("分类id")
@ColDefine(customType = "bigint")
private Long categoryId;
/**
* 排序
*/
@Column
@Comment("参数组名称")
@ColDefine(type = ColType.INT)
private Integer sort;
@Override
public String toString() {
return "ParametersDO [paramId=" + paramId + ", paramName=" + paramName + ", paramType=" + paramType
+ ", options=" + options + ", isIndex=" + isIndex + ", required=" + required + ", groupId=" + groupId
+ ", categoryId=" + categoryId + ", sort=" + sort + "]";
}
}
@@ -0,0 +1,153 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import cn.hutool.core.builder.EqualsBuilder;
import cn.hutool.core.builder.HashCodeBuilder;
import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsQuantityVO;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import java.io.Serial;
import java.io.Serializable;
/**
* 库存日志表实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@Table("mall_quantity_log")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class QuantityLog implements Serializable {
@Serial
private static final long serialVersionUID = 6427256120262393L;
/**
* 日志id
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long logId;
/**
* 订单编号
*/
@Column
@Comment("订单编号")
@ColDefine(type = ColType.VARCHAR, width = 100)
@NotEmpty(message = "订单编号不能为空")
private String orderSn;
/**
* 商品id
*/
@Column
@Comment("商品id")
@ColDefine(customType = "bigint")
@NotEmpty(message = "商品id不能为空")
private Long goodsId;
/**
* sku id
*/
@Column
@Comment("sku id")
@ColDefine(customType = "bigint")
private Long skuId;
/**
* 库存数
*/
@Column
@Comment("库存数")
@ColDefine(type = ColType.INT)
@NotEmpty(message = "库存数不能为空")
private Integer quantity;
/**
* 可用库存
*/
@Column
@Comment("可用库存")
@ColDefine(type = ColType.INT)
@Min(message = "必须为数字", value = 0)
private Integer enableQuantity;
/**
* 操作时间
*/
@Column
@Comment("操作时间")
@ColDefine(customType = "bigint")
private Long opTime;
@Column
@Comment("日志类型")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String logType;
@Column
@Comment("原因")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String reason;
public QuantityLog(GoodsQuantityVO goodsQuantity) {
this.skuId = goodsQuantity.getSkuId();
this.quantity = goodsQuantity.getQuantity();
this.goodsId = goodsQuantity.getGoodsId();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
QuantityLog that = (QuantityLog) o;
return new EqualsBuilder()
.append(orderSn, that.orderSn)
.append(goodsId, that.goodsId)
.append(skuId, that.skuId)
.append(quantity, that.quantity)
.append(enableQuantity, that.enableQuantity)
.append(logType, that.logType)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(orderSn)
.append(goodsId)
.append(skuId)
.append(quantity)
.append(enableQuantity)
.append(logType)
.toHashCode();
}
@Override
public String toString() {
return "QuantityLog{" +
"logId=" + logId +
", orderSn='" + orderSn + '\'' +
", goodsId=" + goodsId +
", skuId=" + skuId +
", quantity=" + quantity +
", enableQuantity=" + enableQuantity +
", opTime=" + opTime +
", logType='" + logType + '\'' +
'}';
}
}
@@ -0,0 +1,78 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serializable;
/**
* 规格值实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_spec_values")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class SpecValuesDO implements Serializable {
private static final long serialVersionUID = 5356147177823233L;
/**
* 主键
*/
@Id
@Column
@Comment("规格值id")
@ColDefine(customType = "bigint")
private Long specValueId;
/**
* 规格项id
*/
@Column
@Comment("规格项id")
@ColDefine(customType = "bigint")
private Long specId;
/**
* 规格值名字
*/
@Column
@Comment("规格值名字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String specValue;
/**
* 所属卖家
*/
@Column
@Comment("所属卖家")
@ColDefine(customType = "bigint")
private Long sellerId;
/**
* 规格名称
*/
@Column
@Comment("规格名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String specName;
public SpecValuesDO(Long specId, String specValue, Long sellerId) {
super();
this.specId = specId;
this.specValue = specValue;
this.sellerId = sellerId;
}
@Override
public String toString() {
return "SpecValuesDO [specValueId=" + specValueId + ", specId=" + specId + ", specValue=" + specValue
+ ", sellerId=" + sellerId + "]";
}
}
@@ -0,0 +1,83 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.nutz.dao.entity.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
/**
* 规格项实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_specification")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class SpecificationDO implements Serializable {
private static final long serialVersionUID = 5111769180376075L;
/**
* 主键
*/
@Id
@Column
@Comment("id")
@ColDefine(customType = "bigint")
private Long specId;
/**
* 规格项名称
*/
@Column
@Comment("规格项名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
@NotEmpty(message = "规格项名称不能为空")
private String specName;
/**
* 是否被删除0 删除 1 没有删除
*/
@Column
@Comment("参数名称")
@ColDefine(type = ColType.INT)
private Integer disabled;
/**
* 规格描述
*/
@Column
@Comment("规格描述")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Length(max = 50, message = "规格备注为0到50个字符之间")
private String specMemo;
/**
* 所属卖家 0属于平台
*/
@Column
@Comment("所属卖家 0属于平台")
@ColDefine(customType = "bigint")
private Long sellerId;
public SpecificationDO(String specName, Integer disabled, String specMemo, Long sellerId) {
super();
this.specName = specName;
this.disabled = disabled;
this.specMemo = specMemo;
this.sellerId = sellerId;
}
@Override
public String toString() {
return "SpecificationDO [specId=" + specId + ", specName=" + specName + ", disabled=" + disabled + ", specMemo="
+ specMemo + ", sellerId=" + sellerId + "]";
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 标签商品关联实体
*
* @author fky
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table("mall_tag_goods")
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class TagGoodsDO implements Serializable {
@Serial
private static final long serialVersionUID = 9467335201085494L;
@Id
@Column
@Comment("规格值id")
@ColDefine(customType = "bigint")
private Long id;
/**
* 标签id
*/
@Column
@Comment("标签id")
@ColDefine(customType = "bigint")
private Long tagId;
/**
* 商品id
*/
@Column
@Comment("商品id")
@ColDefine(customType = "bigint")
private Long goodsId;
public TagGoodsDO(Long tagId, Long goodsId) {
super();
this.tagId = tagId;
this.goodsId = goodsId;
}
@Override
public String toString() {
return "TagGoodsDO{" +
"tagId=" + tagId +
", goodsId=" + goodsId +
'}';
}
}
@@ -0,0 +1,76 @@
package com.budwk.app.zhgh.mall.manage.models.goods.entity;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.nutz.dao.entity.annotation.*;
import java.io.Serial;
import java.io.Serializable;
/**
* 商品标签实体
*
* @author fky
*
*/
@Data
@Table("mall_tags")
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class TagsDO implements Serializable {
@Serial
private static final long serialVersionUID = 1899720595535600L;
/**
* 主键
*/
@Id
@Column
@Comment("规格值id")
@ColDefine(customType = "bigint")
private Long tagId;
/**
* 标签名字
*/
@Column
@Comment("标签名字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String tagName;
/**
* 所属卖家
*/
@Column
@Comment("所属卖家")
@ColDefine(customType = "bigint")
private Long sellerId;
/**
* 关键字
*/
@Column
@Comment("关键字")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String mark;
public TagsDO(String tagName, Long sellerId, String mark) {
super();
this.tagName = tagName;
this.sellerId = sellerId;
this.mark = mark;
}
@Override
public String toString() {
return "TagsDO{" +
"tagId=" + tagId +
", tagName='" + tagName + '\'' +
", sellerId=" + sellerId +
", mark='" + mark + '\'' +
'}';
}
}
@@ -0,0 +1,25 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 商品操作枚举
* @author fky
*/
public enum GoodsOperate {
/**
* 下架
*/
UNDER,
/**
* 还原
*/
REVRET,
/**
* 放入回收站
*/
RECYCLE,
/**
* 删除
*/
DELETE
}
@@ -0,0 +1,23 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 商品类型枚举
* @author fky
*/
public enum GoodsType {
/**
* 正常商品
*/
NORMAL("正常商品"),
/**
* 积分商品
*/
POINT("积分商品");
private String description;
GoodsType(String description) {
this.description = description;
}
}
@@ -0,0 +1,30 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 权限枚举
* @author fky
*/
public enum Permission {
/**
* 卖家权限
*/
SELLER,
/**
* 买家权限
*/
BUYER,
/**
* 管理员权限
*/
ADMIN,
/**
* 不验证权限
*/
CLIENT
}
@@ -0,0 +1,33 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 库存日志类型
* @author fky
*/
public enum QuantityLogType {
/**
* 订单创建扣减库存
*/
ORDER_CREATE,
/**
* 订单取消
*/
ORDER_CANCEL,
/**
* 库存回滚
*/
ROLLBACK,
/**
* 发货
*/
SHIP,
/**
* 退货
*/
RETURN
}
@@ -0,0 +1,19 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 库存数类型
* @author fky
*/
public enum QuantityType {
/**
* 实际的库存,包含了待发货的
*/
actual,
/**
* 可以售的库存,不包含待发货的
*/
enable
}
@@ -0,0 +1,31 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 缓存中库存类型
* 用于更新缓存等操作使用
* @author fky
*/
public enum StockType {
/**
* sku实际的库存,包含了待发货的
*/
SKU_STOCK_ACTUAL,
/**
* sku可以售的库存,不包含待发货的
*/
SKU_STOCK_ENABLE,
/**
* goods实际的库存,包含了待发货的
*/
GOODS_STOCK_ACTUAL,
/**
* goods可以售的库存,不包含待发货的
*/
GOODS_STOCK_ENABLE,
}
@@ -0,0 +1,38 @@
package com.budwk.app.zhgh.mall.manage.models.goods.enums;
/**
* 标签类型
* @author fky
*/
public enum TagType {
/**
* 热卖排行
*/
HOT("hot","热卖排行"),
/**
* 新品推荐
*/
NEW("new","新品推荐"),
/**
* 推荐商品
*/
RECOMMEND("recommend","推荐商品");
private String mark;
private String tagName;
TagType(String mark,String tagName) {
this.mark = mark;
this.tagName = tagName;
}
public String mark(){
return this.mark;
}
public String tagName(){
return this.tagName;
}
}

Some files were not shown because too many files have changed in this diff Show More