first commit

This commit is contained in:
@jyuhsin
2026-01-14 14:49:41 +08:00
commit 105c955abd
4752 changed files with 911871 additions and 0 deletions
@@ -0,0 +1,114 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.BenefitAddress;
import com.budwk.app.zhgh.benefit.service.BenefitAddressService;
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;
/**
* @ClassName BenefitAddressController
* @Description TODO
* @Author hpf
* @Date 2025/2/13 15:44
*/
@IocBean
@Ok("json:full")
@At("/platform/benefit/address")
public class BenefitAddressController {
@Inject
private BenefitAddressService benefitAddressService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/address/index.html")
@SaCheckPermission("benefit.address.mange")
public void index() {
}
/**
* 地址列表
*
* @return
*/
@At
@SaCheckPermission("benefit.address.mange")
public Result selectUserAddress(String userId) {
Sql sql = Sqls.create("""
SELECT
id,
userName ,
tel,
addressDetail,
isDefault,
province,
city,
county,
areaCode
FROM
`benefit_address`
WHERE userId = @userId
ORDER BY
isDefault DESC
""");
sql.setParam("userId", StrUtil.isNotBlank(userId) ? userId : SecurityUtil.getUserId());
return Result.success(benefitAddressService.listMap(sql));
}
/**
* 修改默认地址
*
* @return
*/
@At
@SaCheckPermission("benefit.address.mange")
public Result doDefault(String id) {
benefitAddressService.dao().update(BenefitAddress.class, Chain.make("isDefault", false),
Cnd.where("userId", "=", SecurityUtil.getUserId()));
benefitAddressService.dao().update(BenefitAddress.class, Chain.make("isDefault", true),
Cnd.where("id", "=", id));
return Result.success();
}
@At
@SaCheckPermission("benefit.address.mange")
public Result deleteAddress(String id) {
benefitAddressService.dao().clear(BenefitAddress.class, Cnd.where("id", "=", id));
return Result.success();
}
/**
* 保存地址
* @param benefitAddress
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.address.mange")
public Result doSaveUserAddress(@Param("data") BenefitAddress benefitAddress) {
String userId = StrUtil.isNotBlank(benefitAddress.getUserId()) ? benefitAddress.getUserId() : SecurityUtil.getUserId();
if (benefitAddress.isDefault()) {
benefitAddressService.dao().update(BenefitAddress.class, Chain.make("isDefault", false),
Cnd.where("userId", "=", userId));
}
benefitAddress.setUserId(userId);
benefitAddressService.dao().insertOrUpdate(benefitAddress);
return Result.success();
}
}
@@ -0,0 +1,164 @@
package com.budwk.app.zhgh.benefit.controller;
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.result.Result;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsCategory;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsCategoryPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsCategoryService;
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.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.HttpServletRequest;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName BenefitGoodsCategoryController
* @Description TODO
* @Author hpf
* @Date 2025/2/12 11:29
*/
@IocBean
@Ok("json:full")
@At("/platform/benefit/goodsCategory")
public class BenefitGoodsCategoryController {
@Inject
private BenefitGoodsCategoryService benefitGoodsCategoryService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/goodsCategory/index.html")
@SaCheckPermission("benefit.goodsCategory.mange")
public void index() {
}
@At
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("查询福利商品分类")
public Result pageData(BenefitGoodsCategoryPageForm pageForm){
Cnd cnd=Cnd.NEW();
Pagination pagination = benefitGoodsCategoryService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
return Result.success(pagination);
}
/**
* 保存福利商品分类信息
*/
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("添加福利商品分类")
@SLog(type = "condolenceApply", tag = "添加福利商品分类", msg = "添加福利商品分类")
public Result save(@Valid @Param("benefitGoodsCategory") BenefitGoodsCategory benefitGoodsCategory){
benefitGoodsCategory.setHasChildren(benefitGoodsCategory.getParentId()==""?true:false);
BenefitGoodsCategory category = benefitGoodsCategoryService.insert(benefitGoodsCategory);
return Result.success(category);
}
/**
* 修改福利商品分类信息
*/
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("修改福利商品分类")
@SLog(type = "condolenceApply", tag = "修改福利商品分类", msg = "修改福利商品分类")
public Result update(@Valid @Param("benefitGoodsCategory") BenefitGoodsCategory benefitGoodsCategory){
benefitGoodsCategoryService.update(benefitGoodsCategory);
return Result.success();
}
@At
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("查询单个福利商品分类")
public Result info(@Param("id") String id){
BenefitGoodsCategory benefitGoodsCategory = benefitGoodsCategoryService.fetch(id);
return Result.success(benefitGoodsCategory);
}
@At("/doDelete/?")
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("删除福利商品分类")
@SLog(type = "goodsCategory", tag = "删除福利商品分类", msg = "删除福利商品分类")
public Result doDelete(String id) {
int count = benefitGoodsCategoryService.count(Cnd.NEW().and("parentId", "=", id));
if (count>0){
return Result.error("该分类下存在子分类,无法删除!");
}
benefitGoodsCategoryService.delete(id);
return Result.success();
}
@At
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("获取福利商品分类树形结构")
public Result getCategoryTree(){
return Result.success(benefitGoodsCategoryService.getCategoryTree());
}
@At
@SaCheckPermission("benefit.goodsCategory.mange")
@ApiOperation("查询下级类型")
public Result child(@Param("pid") String pid,String name,Integer status){
List<NutMap> treeList = new ArrayList<>();
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(name)){
cnd.and(BenefitGoodsCategory::getName,"like", name);
}
if (status!=null){
cnd.and(BenefitGoodsCategory::getStatus,"=", status);
}
List<BenefitGoodsCategory> list = benefitGoodsCategoryService.query(cnd.and(BenefitGoodsCategory::getParentId, "=", pid));
for (BenefitGoodsCategory benefitGoodsCategory : list) {
if (benefitGoodsCategoryService.count(Cnd.where("parentId", "=", benefitGoodsCategory.getId())) > 0) {
benefitGoodsCategory.setHasChildren(true);
}
NutMap map = Lang.obj2nutmap(benefitGoodsCategory);
map.put("expanded", false);
map.put("children", new ArrayList<>());
treeList.add(map);
}
return Result.success(list);
}
@At("/enable/?")
@Ok("json")
@SaCheckPermission("benefit.goodsCategory.mange")
@SLog(tag = "启用福利商品类型", msg = "类型名称:${args[1].getAttribute('name')}")
public Object enable(String id, HttpServletRequest req) {
try {
req.setAttribute("name", benefitGoodsCategoryService.fetch(id).getName());
benefitGoodsCategoryService.update(org.nutz.dao.Chain.make("status", 0), Cnd.where(BenefitGoodsCategory::getId, "=", id).or(BenefitGoodsCategory::getParentId,"=",id));
return Result.success();
}catch (Exception e) {
return Result.error();
}
}
@At("/disable/?")
@Ok("json")
@SaCheckPermission("benefit.goodsCategory.mange")
@SLog(tag = "禁用福利商品类型", msg = "类型名称:${args[1].getAttribute('name')}")
public Object disable(String id, HttpServletRequest req) {
try {
req.setAttribute("name", benefitGoodsCategoryService.fetch(id).getName());
benefitGoodsCategoryService.update(org.nutz.dao.Chain.make("status", 1), Cnd.where(BenefitGoodsCategory::getId, "=", id).or(BenefitGoodsCategory::getParentId,"=",id));
return Result.success();
} catch (Exception e) {
return Result.error();
}
}
}
@@ -0,0 +1,108 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.tree.Tree;
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.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsSpecifications;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsCategoryService;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
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.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @ClassName BenefitGoodsController
* @Description TODO
* @Author zhf
* @Date 2025/2/13 上午10:16
*/
@IocBean
@At("/platform/benefit/goods")
@Ok("json:full")
@Api(tags = "福利商品")
public class BenefitGoodsController {
@Inject
private BenefitGoodsService benefitGoodsService;
@Inject
private BenefitGoodsCategoryService benefitGoodsCategoryService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/goods/index.html")
@SaCheckPermission("benefit.goods")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.user")
public Result pageData(BenefitGoodsPageForm pageForm) {
Sql sql = benefitGoodsService.getSql(pageForm);
Pagination pagination = benefitGoodsService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("获取商品类型")
@SaCheckPermission("benefit.goods")
public Result getGoodsCategoryTree() {
List<Tree<String>> categoryTree = benefitGoodsCategoryService.getCategoryTree();
return Result.success(categoryTree);
}
@At
@ApiOperation("提交商品")
@SLog(tag = "商品管理", msg = "提交商品")
@SaCheckPermission("benefit.goods")
public Result submit(@Param("data") BenefitGoods benefitGoods) {
benefitGoodsService.submit(benefitGoods);
return Result.success();
}
@At
@ApiOperation("删除商品")
@SLog(tag = "商品管理", msg = "删除商品")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.goods")
public Result delete(String id) {
benefitGoodsService.delete(id);
benefitGoodsService.dao().clear(BenefitGoodsSpecifications.class, Cnd.where("goodsId", "=", id));
return Result.success();
}
@At
@ApiOperation("查询单个商品")
@SaCheckPermission("benefit.goods")
public Result findOne(String id) {
NutMap map = benefitGoodsService.findOne(id);
return Result.success(map);
}
@At
@ApiOperation("根据类型id获取商品")
@SaCheckPermission("benefit.goods")
public Result getGoodsListByType(String id) {
Cnd cnd = Cnd.NEW();
if (id!=null&&!"".equals(id)){
cnd.and(BenefitGoods::getGoodsCategoryOneLevelId, "=", id);
}
return Result.success(benefitGoodsService.query(cnd));
}
}
@@ -0,0 +1,53 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsOrderServicePageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsOrderService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
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;
/**
* @ClassName BenefitGoodsOrderController
* @Description TODO
* @Author hpf
* @Date 2025/2/20 15:26
*/
@IocBean
@Ok("json:full")
@At("/platform/benefit/order")
public class BenefitGoodsOrderController {
@Inject
private BenefitGoodsOrderService benefitGoodsOrderService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/order/index.html")
@SaCheckPermission("benefit.order.mange")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.order.mange")
public Result pageData(BenefitGoodsOrderServicePageForm pageForm) {
Sql sql = benefitGoodsOrderService.getSql(pageForm);
Pagination pagination = benefitGoodsOrderService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("删除商品订单")
@SaCheckPermission("benefit.order.mange")
public Result deleteOrder(String id) {
benefitGoodsOrderService.clear(Cnd.where("id", "=", id));
return Result.success();
}
}
@@ -0,0 +1,141 @@
package com.budwk.app.zhgh.benefit.controller;
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.benefit.models.BenefitProject;
import com.budwk.app.zhgh.benefit.param.BenefitProjectPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsCategoryService;
import com.budwk.app.zhgh.benefit.service.BenefitProjectService;
import io.swagger.annotations.Api;
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.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.validation.Valid;
import java.util.List;
/**
* @ClassName BenefitProjectController
* @Description TODO
* @Author zhf
* @Date 2025/2/12 下午2:20
*/
@IocBean
@At("/platform/benefit/project")
@Ok("json:full")
@Api(tags = "福利项目")
public class BenefitProjectController {
@Inject
private BenefitProjectService benefitProjectService;
@Inject
private BenefitGoodsCategoryService benefitGoodsCategoryService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/project/index.html")
@SaCheckPermission("benefit.project")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.user")
public Result pageData(BenefitProjectPageForm pageForm) {
Sql sql = benefitProjectService.getSql(pageForm);
Pagination pagination = benefitProjectService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("按年度获取福利项目")
@SaCheckPermission("benefit.project")
public Result getBenefitList(Integer year) {
return Result.success(benefitProjectService.getBenefitList(year));
}
@At
@ApiOperation("获取没有关联的商品及关联了自己福利项目的商品")
@SaCheckPermission("benefit.project")
public Result getGoodsTableData(@Param("pageForm") BenefitProjectPageForm benefitProjectPageForm) {
return Result.success(benefitProjectService.getGoodsTableData(benefitProjectPageForm));
}
@At
@SaCheckPermission("benefit.project")
@ApiOperation("获取福利商品分类树形结构")
public Result getCategoryTree() {
return Result.success(benefitGoodsCategoryService.getCategoryTree());
}
@At
@ApiOperation("提交福利项目")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "福利项目", msg = "提交福利项目")
@SaCheckPermission("benefit.project")
public Result submit(@Param("data") BenefitProject benefitProject,
@Param("benefitGoodsIds[]") List<String> benefitGoodsIds) {
benefitProjectService.submit(benefitProject, benefitGoodsIds);
return Result.success();
}
@At
@ApiOperation("修改福利状态")
@SLog(tag = "福利项目", msg = "修改福利状态")
@SaCheckPermission("benefit.project")
public Result doEdit(@Valid String id, Boolean isUnseal) {
benefitProjectService.update(Chain.make("isUnseal", isUnseal), Cnd.where("id", "=", id));
return Result.success();
}
@At
@ApiOperation("福利项目删除")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "福利项目", msg = "删除福利项目")
@SaCheckPermission("benefit.project")
public Result delete(@Valid String id) {
benefitProjectService.deleteBenefit(id);
return Result.success();
}
@At
@ApiOperation("查询单个福利项目")
@SaCheckPermission("benefit.project")
public Result findOne(@Valid String id) {
BenefitProject map = benefitProjectService.findOne(id);
return Result.success(map);
}
@At
@ApiOperation("生成福利名单")
@SaCheckPermission("benefit.project")
public Result createBenefitUser(@Valid String benefitId) {
benefitProjectService.createBenefitUser(benefitId);
return Result.success();
}
@At
@ApiOperation("更新福利名单")
@SaCheckPermission("benefit.project")
public Result renewBenefitUser(@Valid String benefitId, Boolean isRenew) {
benefitProjectService.renewBenefitUser(benefitId, isRenew);
return Result.success();
}
}
@@ -0,0 +1,196 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.*;
import com.budwk.app.zhgh.benefit.param.vo.BenefitBuyGoodsVo;
import com.budwk.app.zhgh.benefit.service.*;
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.ioc.aop.Aop;
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 javax.validation.Valid;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @ClassName BenefitShoppController
* @Description TODO
* @Author hpf
* @Date 2025/2/14 14:26
*/
@IocBean
@Ok("json:full")
@At("/platform/benefit/shop")
public class BenefitShopController {
@Inject
private BenefitGoodsCategoryService benefitGoodsCategoryService;
@Inject
private BenefitProjectService benefitProjectService;
// @Inject
// private IntegralManageService integralManageService;
@Inject
private BenefitGoodsService benefitGoodsService;
@Inject
private BenefitGoodsOrderService benefitGoodsOrderService;
@Inject
private BenefitGoodsCartService benefitGoodsCartService;
@Inject
private BenefitAddressService benefitAddressService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/shop/index.html")
@SaCheckPermission("benefit.shop.mange")
public void index() {
}
@At
@SaCheckPermission("benefit.shop.mange")
@ApiOperation("获取福利商品分类树形结构")
public Result getCategoryTree(){
return Result.success(benefitGoodsCategoryService.getCategoryTree());
}
@At
@SaCheckPermission("benefit.shop.mange")
@ApiOperation("获取当前时间段的项目商品")
public Result getProjectGoodsList(){
return Result.success(benefitProjectService.getProjectGoodsList());
}
@At
@SaCheckPermission("benefit.shop.mange")
@ApiOperation("获取分类下面的商品")
public Result getGoodsListByType(String id){
return Result.success(benefitGoodsCategoryService.getGoodsListByType(id));
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.shop.mange")
@ApiOperation("购买多个商品")
public Result buyGoodsList(BenefitBuyGoodsVo benefitBuyGoodsVo){
//获取当前用户信息
Sys_user sysUser = benefitGoodsService.dao().fetch(Sys_user.class, SecurityUtil.getUserId());
//获取商品总积分
int totalPoints = benefitBuyGoodsVo.getList().stream().map(BenefitGoodsSpecifications::getPoints)
.reduce(0,Integer::sum);
// 获取当前日期和时间
LocalDateTime currentDateTime = LocalDateTime.now();
// 格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//获取收货地址
BenefitAddress address = benefitAddressService.fetch(benefitBuyGoodsVo.getAddressId());
//判断积分是否足够
if (sysUser.getTotalIntegral()>=totalPoints){
for (BenefitGoodsSpecifications benefitGoodsSpecifications : benefitBuyGoodsVo.getList()) {
//添加购买信息到积分表
// integralManageService.operateIntegral(SecurityUtil.getUserId(),-benefitGoodsSpecifications.getPoints(),IntegralChangeTypeEnum.DECREASE, IntegralOriginEnum.BUY_GOODS,benefitGoodsSpecifications.getId(),"积分商城购买商品");
BenefitGoodsOrder benefitGoodsOrder = new BenefitGoodsOrder();
benefitGoodsOrder.setGoodsId(benefitGoodsSpecifications.getGoodsId());
benefitGoodsOrder.setSpecificationsId(benefitGoodsSpecifications.getId());
benefitGoodsOrder.setSelectUserId(sysUser.getId());
benefitGoodsOrder.setReceiveAddress(address.getProvince()+address.getCity()+address.getCounty()+address.getAddressDetail());
benefitGoodsOrder.setUserAddress(address.getUserName()+address.getTel());
benefitGoodsOrder.setOrderTime(currentDateTime.format(formatter));
//添加信息到订单表
benefitGoodsOrderService.insert(benefitGoodsOrder);
}
//移出购物车
if (benefitBuyGoodsVo.getCartId()!=null){
benefitGoodsCartService.delete(benefitBuyGoodsVo.getCartId());
}
return Result.success().addMsg("购买成功!");
}else{
return Result.error().addMsg("您的剩余积分不足!");
}
}
@At
@ApiOperation("获取主页轮播商品")
@SaCheckPermission("benefit.shop.mange")
public Result getGoodsList(){
return Result.success(benefitGoodsService.query(Cnd.NEW().and(BenefitGoods::getStatus,"=",true).and(BenefitGoods::getIsHomepage,"=",true)));
}
@At
@ApiOperation("查询单个商品")
@SaCheckPermission("benefit.shop.mange")
public Result findOne(String id) {
NutMap map = benefitGoodsService.findOne(id);
return Result.success(map);
}
@At
@ApiOperation("查询用户购物车")
@SaCheckPermission("benefit.shop.mange")
public Result getCartList() {
return Result.success(benefitGoodsCartService.getCartList());
}
@At
@ApiOperation("修改购物车商品")
@SaCheckPermission("benefit.shop.mange")
public Result editCart(BenefitGoodsCart benefitGoodsCart) {
benefitGoodsCartService.update(benefitGoodsCart);
return Result.success();
}
@At
@ApiOperation("修改多个购物车商品")
@SaCheckPermission("benefit.shop.mange")
public Result editCartList(@Valid String[] ids, @Valid int isChecked) {
benefitGoodsCartService.update(Chain.make("isChecked",isChecked),Cnd.where("id", "in", ids));
return Result.success();
}
@At
@ApiOperation("添加购物车商品")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.shop.mange")
public Result addCart(BenefitGoodsCart benefitGoodsCart) {
benefitGoodsCart.setUserId(SecurityUtil.getUserId());;
benefitGoodsCartService.insert(benefitGoodsCart);
return Result.success();
}
@At
@ApiOperation("删除购物车商品")
@SaCheckPermission("benefit.shop.mange")
public Result deleteCart(String id) {
benefitGoodsCartService.clear(Cnd.where("id", "=", id));
return Result.success();
}
@At
@ApiOperation("根据规格id查询商品")
@SaCheckPermission("benefit.shop.mange")
public Result findOneBySpecId(String id) {
NutMap map = benefitGoodsService.findOneBySpecId(id);
return Result.success(map);
}
}
@@ -0,0 +1,84 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.benefit.models.BenefitProject;
import com.budwk.app.zhgh.benefit.service.BenefitStatisticsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.List;
/**
* @ClassName BenefitStatisticsController
* @Description TODO
* @Author zhf
* @Date 2025/2/21 下午2:44
*/
@IocBean
@At("/platform/benefit/statistics")
@Ok("json:full")
@Slf4j
@Api(tags = "节日福利用户选择管理")
public class BenefitStatisticsController {
@Inject
private BenefitStatisticsService benefitStatisticsService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/statistics/index.html")
@SaCheckPermission("benefit.statistics")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.statistics")
public Result pageData(String benefitId, String unionId) {
return Result.success(benefitStatisticsService.pageData(benefitId, unionId));
}
@At
@ApiOperation("查询福利列表")
@SaCheckPermission("benefit.statistics")
public Result getBenefitList(Integer year) {
List<BenefitProject> projectList = benefitStatisticsService.dao().query(BenefitProject.class,
Cnd.where("provideMode", "=", "BENEFIT_PROVIDE_MODE_TWO")
.andEX("year", "=", year));
projectList.forEach(v -> {
benefitStatisticsService.dao().fetchLinks(v, "benefitGoodsList");
v.getBenefitGoodsList().forEach(g -> {
benefitStatisticsService.dao().fetchLinks(g, "benefitGoodsSpecificationsList");
});
});
return Result.success(projectList);
}
@At
@Ok("void")
@SaCheckPermission("benefit.statistics")
@ApiOperation("导出福利汇总情况")
public void openExportSummary(String benefitId, String unionId, HttpServletResponse response) {
benefitStatisticsService.openExportSummary(benefitId, unionId, response);
}
@At
@SaCheckPermission("benefit.statistics")
@ApiOperation("导出福利汇总情况")
public Result doSetAllBenefit(@Valid String benefitId, @Valid @Param("benefitGoodsList") String benefitGoodsList) {
benefitStatisticsService.doSelectByAdmin(benefitId, benefitGoodsList);
return Result.success();
}
}
@@ -0,0 +1,148 @@
package com.budwk.app.zhgh.benefit.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 com.alibaba.excel.EasyExcel;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.benefit.mode.BenefitUserTemp;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import com.budwk.app.zhgh.benefit.param.BenefitUserPageForm;
import com.budwk.app.zhgh.benefit.param.vo.BenefitUserVo;
import com.budwk.app.zhgh.benefit.service.BenefitUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
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.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName BenefitUserController
* @Description TODO
* @Author zhf
* @Date 2025/2/12 上午11:22
*/
@IocBean
@At("/platform/benefit/user")
@Ok("json:full")
@Api(tags = "福利名单")
@Slf4j
public class BenefitUserController {
@Inject
private BenefitUserService benefitUserService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/userList/index.html")
@SaCheckPermission("benefit.user")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.user")
public Result pageData(BenefitUserPageForm pageForm) {
Sql sql = benefitUserService.getSql(pageForm);
Pagination pagination = benefitUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("获取不在当前福利名单里面的人")
@SaCheckPermission("benefit.user")
public Result selectNotBenefitUser(BenefitUserPageForm pageForm) {
return Result.success(benefitUserService.getSelectNotBenefitUser(pageForm));
}
@At
@ApiOperation("把选择的人添加到当前福利名单中")
@SaCheckPermission("benefit.user")
public Result doBenefitUser(BenefitUserVo benefitUserVo) {
benefitUserService.doBenefitUser(benefitUserVo.getIds(), benefitUserVo.getBenefitId());
return Result.success();
}
@At
@ApiOperation("根据id删除福利名单的人")
@SaCheckPermission("benefit.user")
public Result deleteBenefitUser(@Valid String id, @Valid String benefitId) {
benefitUserService.delete(id);
benefitUserService.dao().clear(BenefitUserSelection.class, Cnd.where("benefitId", "=", benefitId)
.and("selectUserId", "=", id));
return Result.success();
}
@At
@Ok("void")
@ApiOperation("下载福利名单导入模板")
@SaCheckPermission("benefit.user")
public void downloadImport(HttpServletResponse response) {
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) {
EasyExcel.write(byteArrayOutputStream, BenefitUserTemp.class)
.sheet("福利名单导入模版")
.doWrite(ArrayList::new);
CommonDownloadUtil.download("福利名单导入模版.xlsx", byteArrayOutputStream.toByteArray(), response);
} catch (Exception e) {
log.error("下载福利名单导入模版失败", e);
}
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("benefit.user")
@ApiOperation("导入福利名单")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doImportBenefitUser(TempFile file, @Valid String businessId, @Valid Boolean isFlag) {
return benefitUserService.doImportBenefitUser(file, businessId, isFlag);
}
@At
@Ok("void")
@SaCheckPermission("benefit.user")
@ApiOperation("导出福利名单")
public void exportBenefitUser(BenefitUserPageForm pageForm, HttpServletResponse response) {
Sql sql = benefitUserService.getSql(pageForm);
List<NutMap> map = benefitUserService.listMap(sql);
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginName", 20));
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("教职工类别", "personType", 20));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("所在分工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("所在部门", "unitName", 20));
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, map);
CommonDownloadUtil.download("福利名单.xlsx", workbook, response);
} catch (Exception e) {
log.error("导出福利名单失败", e);
}
}
}
@@ -0,0 +1,130 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
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.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.BenefitProject;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import com.budwk.app.zhgh.benefit.service.BenefitProjectService;
import com.budwk.app.zhgh.benefit.service.BenefitUserSelectionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.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.validation.Valid;
/**
* @ClassName BenefitUserSelectionController
* @Description TODO
* @Author zhf
* @Date 2025/2/18 上午9:43
*/
@IocBean
@At("/platform/benefit/userSelection")
@Ok("json:full")
@Api(tags = "节日福利选择")
public class BenefitUserSelectionController {
@Inject
private BenefitUserSelectionService benefitUserSelectionService;
@Inject
private BenefitProjectService benefitProjectService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/userSelection/index.html")
@SaCheckPermission("benefit.userSelection")
public void index() {
}
@At
@ApiOperation("按年度获取福利项目")
@SaCheckPermission("benefit.userSelection")
public Result getBenefitList(Integer year) {
return Result.success(benefitProjectService.getBenefitList(year));
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.userSelection")
public Result pageData(PageForm pageForm, String benefitId, Integer year) {
Sql sql = Sqls.create("""
SELECT
bu.*,
bp.`year` ,
bp.`name` benefitName,
bp.startChoiceTime,
bp.endChoiceTime,
bp.provideMode,
bp.signMode,
bp.cover
FROM
benefit_user bu
LEFT JOIN benefit_project bp ON bp.id = bu.benefitId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("bu.benefitId", "=", benefitId);
cnd.and("bp.isUnseal", "=", 1);
cnd.and(Cnd.exps("bp.provideMode", "=", "BENEFIT_PROVIDE_MODE_TWO")
.or(Cnd.exps("bp.provideMode", "=", "BENEFIT_PROVIDE_MODE_ONE")
.and("bp.signMode", "=", "BENEFIT_SIGN_MODE_ONE"))
);
cnd.and("bu.userId", "=", SecurityUtil.getUserId());
cnd.andEX("bp.year", "=", year);
cnd.and("bp.startChoiceTime", "<", DateUtil.now());
cnd.and("bp.endChoiceTime", ">", DateUtil.now());
sql.setCondition(cnd);
Pagination pagination = benefitUserSelectionService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("查询单个福利项目")
@SaCheckPermission("benefit.userSelection")
public Result findOneBenefit(@Valid String id) {
BenefitProject map = benefitProjectService.findOne(id);
return Result.success(map);
}
@At
@ApiOperation("提交福利")
@SaCheckPermission("benefit.userSelection")
public Result submit(@Param("benefitUserSelection") BenefitUserSelection[] benefitUserSelection, @Valid String benefitId, @Valid String userId) {
benefitUserSelectionService.submit(benefitUserSelection, benefitId, userId);
return Result.success();
}
@At
@ApiOperation("统一发放并且需要签字")
@SaCheckPermission("benefit.userSelection")
public Result provideModeOneDoSubmit(@Valid String benefitId, @Valid String userSign) {
benefitUserSelectionService.dao().update(BenefitUser.class, Chain.make("userSign", userSign)
.add("isChoice", true),
Cnd.where("userId", "=", SecurityUtil.getUserId())
.and("benefitId", "=", benefitId));
return Result.success();
}
@At
@ApiOperation("查询自己选择的福利")
@SaCheckPermission("benefit.userSelection")
public Result selectSelectionBenefit(String benefitId, String userId) {
return Result.success(benefitUserSelectionService.selectSelectionBenefit(benefitId, userId));
}
}
@@ -0,0 +1,96 @@
package com.budwk.app.zhgh.benefit.controller;
import cn.afterturn.easypoi.entity.BaseTypeConstants;
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 com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.benefit.models.BenefitProject;
import com.budwk.app.zhgh.benefit.param.BenefitUserPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitUserSelectionListService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName BenefitUserSelectionListController
* @Description TODO
* @Author zhf
* @Date 2025/2/20 下午4:42
*/
@IocBean
@At("/platform/benefit/userSelection/list")
@Ok("json:full")
@Slf4j
@Api(tags = "节日福利用户选择管理")
public class BenefitUserSelectionListController {
@Inject
private BenefitUserSelectionListService benefitUserSelectionListService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/userSelectionList/index.html")
@SaCheckPermission("benefit.userSelectionList")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.user")
public Result pageData(BenefitUserPageForm pageForm) {
Sql sql = benefitUserSelectionListService.getSql(pageForm);
Pagination pagination = benefitUserSelectionListService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("benefit.user")
@ApiOperation("导出福利名单的选择情况")
public void exportBenefitUserSelect(BenefitUserPageForm pageForm, HttpServletResponse response) {
Sql sql = benefitUserSelectionListService.getExportSql(pageForm);
List<NutMap> map = benefitUserSelectionListService.listMap(sql);
BenefitProject benefitProject = benefitUserSelectionListService.dao().fetch(BenefitProject.class, pageForm.getBenefitId());
List<ExcelExportEntity> exportEntities = new ArrayList<>();
exportEntities.add(new ExcelExportEntity("工号", "loginName", 20));
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
exportEntities.add(new ExcelExportEntity("性别", "sex", 20));
exportEntities.add(new ExcelExportEntity("教职工类别", "personType", 20));
exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20));
exportEntities.add(new ExcelExportEntity("所在分工会", "unionName", 20));
exportEntities.add(new ExcelExportEntity("所在部门", "unitName", 20));
exportEntities.add(new ExcelExportEntity("所选福利", "giftName", 30));
if (benefitProject.getProvideMode().equals("BENEFIT_PROVIDE_MODE_TWO")) {
exportEntities.add(new ExcelExportEntity("商品规格", "specificationsName", 100));
ExcelExportEntity excelExport = new ExcelExportEntity("选择数量", "selectNum", 20);
excelExport.setType(BaseTypeConstants.DOUBLE_TYPE);
exportEntities.add(excelExport);
exportEntities.add(new ExcelExportEntity("收货地址", "receiveAddress", 100));
}
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, map);
CommonDownloadUtil.download(benefitProject.getName() + "选择情况.xlsx", workbook, response);
} catch (Exception e) {
log.error("导出福利名单失败", e);
}
}
}
@@ -0,0 +1,42 @@
package com.budwk.app.zhgh.benefit.controller;
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.benefit.service.BenefitUserSelectionMineService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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;
/**
* @ClassName BenefitUserSelectionMineController
* @Description TODO
* @Author zhf
* @Date 2025/2/20 下午4:43
*/
@IocBean
@At("/platform/benefit/userSelection/mine")
@Ok("json:full")
@Api(tags = "节日福利我的选择")
public class BenefitUserSelectionMineController {
@Inject
private BenefitUserSelectionMineService benefitUserSelectionMineService;
@At("")
@Ok("beetl:/platform/zhgh/benefit/userSelectionMine/index.html")
@SaCheckPermission("benefit.userSelectionMine")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("benefit.userSelectionMine")
public Result pageData(PageForm pageForm, String benefitId, Integer year) {
return Result.success(benefitUserSelectionMineService.pageData(pageForm, benefitId, year));
}
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.benefit.h5Controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@Ok("json:full")
@At("/platform/h5/benefit/address")
public class H5BenefitAddressController {
@At("")
@Ok("beetl:/platform/zhghh5/benefit/address/index.html")
@SaCheckPermission("h5.benefit.address")
public void index() {
}
}
@@ -0,0 +1,49 @@
package com.budwk.app.zhgh.benefit.h5Controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@Ok("json:full")
@At("/platform/h5/benefit/shop")
public class H5BenefitShopController {
@At("")
@Ok("beetl:/platform/zhghh5/benefit/shop/index.html")
@SaCheckPermission("h5.benefit.shop")
public void index() {
}
@At("/category")
@Ok("beetl:/platform/zhghh5/benefit/shop/category.html")
@SaCheckPermission("h5.benefit.shop")
public void category() {
}
@At("/detail")
@Ok("beetl:/platform/zhghh5/benefit/shop/detail.html")
@SaCheckPermission("h5.benefit.shop")
public void detail() {
}
@At("/cart")
@Ok("beetl:/platform/zhghh5/benefit/shop/cart.html")
@SaCheckPermission("h5.benefit.shop")
public void cart() {
}
@At("/buy")
@Ok("beetl:/platform/zhghh5/benefit/shop/buy.html")
@SaCheckPermission("h5.benefit.shop")
public void buy() {
}
@At("/order")
@Ok("beetl:/platform/zhghh5/benefit/shop/order.html")
@SaCheckPermission("h5.benefit.shop")
public void order() {
}
}
@@ -0,0 +1,58 @@
package com.budwk.app.zhgh.benefit.h5Controller;
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.benefit.service.BenefitUserSelectionService;
import com.budwk.app.zhgh.benefit.service.BenefitUserService;
import io.swagger.annotations.Api;
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;
/**
* @ClassName H5BenefitUserSelectionController
* @Description TODO
* @Author zhf
* @Date 2025/2/24 上午11:06
*/
@IocBean
@At("/platform/h5/benefit/userSelection")
@Ok("json:full")
@Api(tags = "节日福利选择")
public class H5BenefitUserSelectionController {
@Inject
private BenefitUserSelectionService benefitUserSelectionService;
@Inject
private BenefitUserService benefitUserService;
@At("")
@Ok("beetl:/platform/zhghh5/benefit/userSelection/index.html")
@SaCheckPermission("h5.benefit.userSelection")
public void index() {
}
@At("/goodsSelection")
@Ok("beetl:/platform/zhghh5/benefit/userSelection/goodsSelection.html")
@SaCheckPermission("h5.benefit.userSelection")
public void goodsSelection() {
}
@At("/goodsSelectionMine")
@Ok("beetl:/platform/zhghh5/benefit/userSelectionMine/index.html")
@SaCheckPermission("h5.benefit.userSelection")
public void goodsSelectionMine() {
}
@At
@ApiOperation("查询自己福利名单的签字")
@SaCheckPermission("h5.benefit.userSelection")
public Result getUserSelectionSign(String benefitId) {
return Result.success(benefitUserService.fetch(Cnd.where("benefitId", "=", benefitId).and("userId", "=", SecurityUtil.getUserId())));
}
}
@@ -0,0 +1,26 @@
package com.budwk.app.zhgh.benefit.mode;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode
@ContentRowHeight(20) // 内容行高
@HeadRowHeight(20) // 表头行高
@ColumnWidth(25) //列宽
public class BenefitUserTemp {
@ExcelProperty("工号")
private String loginName;
@ExcelProperty("姓名")
private String userName;
@ExcelIgnore
private String errorInfo;
}
@@ -0,0 +1,73 @@
package com.budwk.app.zhgh.benefit.models;
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;
/**
* @Description 福利会员地址信息
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_address")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利商品分类表")
public class BenefitAddress extends BaseModel implements Serializable {
@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 = 64)
private String userName;
@Column
@Comment("收货人手机号")
@ColDefine(type = ColType.VARCHAR, width = 11)
private String tel;
@Column
@Comment("省份")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String province;
@Column
@Comment("城市")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String city;
@Column
@Comment("区县")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String county;
@Column
@Comment("详细地址")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String addressDetail;
@Column
@Comment("地区编码")
@ColDefine(type = ColType.VARCHAR, width = 10)
private String areaCode;
@Column
@Comment("是否为默认地址")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private boolean isDefault;
}
@@ -0,0 +1,113 @@
package com.budwk.app.zhgh.benefit.models;
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.math.BigDecimal;
import java.util.List;
/**
* @ClassName BenefitGoods
* @Description TODO
* @Author zhf
* @Date 2025/2/13 上午9:06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_goods")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利商品表")
public class BenefitGoods extends BaseModel {
@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 benefitId;
@Column
@Comment("商品名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String name;
@Column
@Comment("排序")
@ColDefine(type = ColType.INT)
private Integer goodsSort;
@Column
@Comment("图片地址")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> imgUrl;
@Column
@Comment("说明描述")
@ColDefine(type = ColType.TEXT)
private String description;
@Column
@Comment("简短描述")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String simpleDesc;
@Column
@Comment("所属一级分类")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String goodsCategoryOneLevelId;
@Column
@Comment("所属二级分类")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String goodsCategoryTwoLevelId;
@Column
@Comment("价格")
@ColDefine(customType = "decimal(6,2)")
private BigDecimal money;
@Column
@Comment("商品状态(1.上架,0.下架)")
@Default("1")
@ColDefine(type = ColType.BOOLEAN)
private Boolean status;
@Column
@Comment("是否主页展示(1.展示,0.不展示)")
@Default("0")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isHomepage;
@Column
@Comment("发放形式(dict")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String goodsProvideMode;
@Column
@Comment("邮寄发放配置")
@ColDefine(type = ColType.MYSQL_JSON)
private JSONObject postProvideConfig;
@Column
@Comment("门店地址")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> shopAddressList;
@Many(field = "goodsId")
private List<BenefitGoodsSpecifications> benefitGoodsSpecificationsList;
private Integer choiceNum;
@Column
@Comment("主页图片")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> carouselImgUrl;
}
@@ -0,0 +1,52 @@
package com.budwk.app.zhgh.benefit.models;
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;
/**
* @ClassName BenefitGoodsCart
* @Description TODO
* @Author hpf
* @Date 2025/2/19 16:22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_goods_cart")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利商品购物车表")
public class BenefitGoodsCart extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("所属用户")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("商品id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String goodsId;
@Column
@Comment("数量")
@ColDefine(type = ColType.INT)
private Integer count;
@Column
@Comment("规格id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String specificationsId;
@Column
@Comment("是否选中")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private boolean isChecked;
}
@@ -0,0 +1,56 @@
package com.budwk.app.zhgh.benefit.models;
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.List;
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_goods_Category")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利商品分类表")
public class BenefitGoodsCategory extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("类型名称")
@ColDefine(type = ColType.VARCHAR, width = 128)
private String name;
@Column
@Comment("父级ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String parentId;
@Column
@Comment("状态")
@ColDefine(type = ColType.INT)
private Integer status;
@Column
@Comment("排序")
@ColDefine(type = ColType.INT)
private Integer sort;
@Column
@Comment("有子节点")
private boolean hasChildren;
@Column
@Comment("图标")
@ColDefine(type = ColType.VARCHAR, width = 255)
private String icon;
private List<BenefitGoodsCategory> children;
private List<BenefitGoods> goodsList;
}
@@ -0,0 +1,60 @@
package com.budwk.app.zhgh.benefit.models;
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;
/**
* @Description 福利商品订单
* hpf
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_goods_order")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利订单表")
public class BenefitGoodsOrder extends BaseModel {
@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 goodsId;
@Column
@Comment("用户ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String selectUserId;
@Column
@Comment("规格ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String specificationsId;
@Column
@Comment("收货地址")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String receiveAddress;
@Column
@Comment("收货信息")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String userAddress;
@Column
@Comment("下单时间")
@ColDefine(type = ColType.DATETIME)
private String orderTime;
@Column
@Comment("快递单号")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String trackingNumber;
}
@@ -0,0 +1,55 @@
package com.budwk.app.zhgh.benefit.models;
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.util.List;
/**
* @ClassName BenefitGoodsSpecifications
* @Description TODO
* @Author zhf
* @Date 2025/2/13 上午9:43
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_goods_specifications")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利规格表")
public class BenefitGoodsSpecifications extends BaseModel {
@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 goodsId;
@Column
@Comment("规格名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String name;
@Column
@Comment("图片地址")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> imgUrl;
@Column
@Comment("排序")
@ColDefine(type = ColType.INT)
private Integer specificationsSort;
@Column
@Comment("兑换所需积分")
@ColDefine(type = ColType.INT)
private Integer points;
}
@@ -0,0 +1,94 @@
package com.budwk.app.zhgh.benefit.models;
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.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_project")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利项目表")
public class BenefitProject extends BaseModel {
@Column
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("年度")
@ColDefine(type = ColType.INT, width = 4)
private Integer year;
@Column
@Comment("项目名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String name;
@Column
@Comment("节日")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String festival;
@Column
@Comment("福利礼品(用于分工会发放)")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String giftName;
@Column
@Comment("选择开始时间")
@ColDefine(type = ColType.DATETIME)
private Date startChoiceTime;
@Column
@Comment("选择结束时间")
@ColDefine(type = ColType.DATETIME)
private Date endChoiceTime;
@Column
@Comment("逾期补发结束时间")
@ColDefine(type = ColType.DATETIME)
private Date endOverdueChoiceTime;
@Column
@Comment("发放形式(dict)")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String provideMode;
@Column
@Comment("签字形式(dict)")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String signMode;
@Column
@Comment("封面")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String cover;
@Column
@Comment("是否开启")
@Default("1")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isUnseal;
@Column
@Comment("福利总价格")
@ColDefine(customType = "decimal(7,2)")
private BigDecimal totalMoney;
/**
* 商品
*/
@Many(field = "benefitId")
private List<BenefitGoods> benefitGoodsList;
}
@@ -0,0 +1,81 @@
package com.budwk.app.zhgh.benefit.models;
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;
/**
* @ClassName BenefitList
* @Description TODO
* @Author zhf
* @Date 2025/2/12 上午10:46
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_user")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利名单表")
public class BenefitUser extends BaseModel {
@Name
@Column
@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 benefitId;
@Column
@Comment("用户ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String userId;
@Column
@Comment("用户姓名")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String userName;
@Column
@Comment("用户工号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String loginName;
@Column
@Comment("单位ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unitId;
@Column
@Comment("工会ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("教职工类别")
@ColDefine(type = ColType.VARCHAR)
private String personType;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.VARCHAR)
private String userState;
@Column
@Comment("是否选择")
@Default("0")
@ColDefine(type = ColType.BOOLEAN)
private Boolean isChoice;
@Column
@Comment("用户签字(用于统一发放需要签字)")
@ColDefine(type = ColType.TEXT)
private String userSign;
}
@@ -0,0 +1,76 @@
package com.budwk.app.zhgh.benefit.models;
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;
/**
* @ClassName BenefitUserSelection
* @Description TODO
* @Author zhf
* @Date 2025/2/18 上午9:37
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("benefit_user_selection")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("福利选择表")
public class BenefitUserSelection extends BaseModel {
@Name
@Column
@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 benefitId;
@Column
@Comment("商品ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String goodsId;
@Column
@Comment("规格ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String specificationsId;
@Column
@Comment("选择用户")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String selectUserId;
@Column
@Comment("选择时间")
@ColDefine(type = ColType.DATETIME)
private Date selectTime;
@Column
@Comment("收货地址")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String receiveAddress;
@Column
@Comment("收货门店")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String shopAddress;
@Column
@Comment("用户签字")
@ColDefine(type = ColType.TEXT)
private String userSign;
@Column
@Comment("选择数量")
@ColDefine(type = ColType.INT)
private Integer selectNum;
}
@@ -0,0 +1,22 @@
package com.budwk.app.zhgh.benefit.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
/**
* @ClassName BenefitGoodsCategoryPageForm
* @Description TODO
* @Author hpf
* @Date 2025/2/12 11:29
*/
@Data
public class BenefitGoodsCategoryPageForm extends PageForm {
private String id;
private String name;
private String goodsId;
private String parentId;
private Integer status;
private Integer level;
private Integer sort;
}
@@ -0,0 +1,19 @@
package com.budwk.app.zhgh.benefit.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
/**
* @ClassName BenefitGoodsOrderServicePageForm
* @Description TODO
* @Author hpf
* @Date 2025/2/20 16:17
*/
@Data
public class BenefitGoodsOrderServicePageForm extends PageForm {
private String id;
private String goodsName;
private String specName;
private String orderTime;
}
@@ -0,0 +1,18 @@
package com.budwk.app.zhgh.benefit.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
/**
* @ClassName BenefitGoodsPageForm
* @Description TODO
* @Author zhf
* @Date 2025/2/13 下午4:06
*/
@Data
public class BenefitGoodsPageForm extends PageForm {
private String benefitId;
private String goodsCategoryOneLevelId;
private String goodsCategoryTwoLevelId;
}
@@ -0,0 +1,22 @@
package com.budwk.app.zhgh.benefit.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import java.util.List;
/**
* @ClassName BenefitProjectPageForm
* @Description TODO
* @Author zhf
* @Date 2025/2/14 下午5:02
*/
@Data
public class BenefitProjectPageForm extends PageForm {
public Integer year;
public String benefitId;
//如果是编辑或者是新增就查询自己的商品和没有benefitId的商品,如果是查询就只查自己的商品
public Boolean isEdit;
public List<String> goodsCategoryIds;
}
@@ -0,0 +1,30 @@
package com.budwk.app.zhgh.benefit.param;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* @ClassName BenefitUserParam
* @Description TODO
* @Author zhf
* @Date 2025/2/12 上午11:16
*/
@Data
public class BenefitUserPageForm extends PageForm {
private String unionId;
private String unitId;
private List<String> unitIds;
private String personType;
private List<String> personTypes;
private String userState;
private List<String> userStates;
@NotEmpty(message = "福利id不能为空,为空暂时无法操作!")
private String benefitId;
private Integer isChoice;
private String goodsId;
}
@@ -0,0 +1,19 @@
package com.budwk.app.zhgh.benefit.param.vo;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsSpecifications;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class BenefitBuyGoodsVo extends BenefitGoods {
private List<BenefitGoodsSpecifications> list;
private String addressId;
private List<String> cartId;
}
@@ -0,0 +1,16 @@
package com.budwk.app.zhgh.benefit.param.vo;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsCart;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsSpecifications;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class BenefitGoodsCartVo extends BenefitGoodsCart {
private BenefitGoods benefitGoods;
private BenefitGoodsSpecifications benefitGoodsSpecifications;
}
@@ -0,0 +1,16 @@
package com.budwk.app.zhgh.benefit.param.vo;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class BenefitUserVo extends BenefitUser {
private List<String> ids;
private String benefitId;
}
@@ -0,0 +1,13 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitAddress;
/**
* @ClassName BenefitAddressService
* @Description TODO
* @Author hpf
* @Date 2025/2/13 15:44
*/
public interface BenefitAddressService extends BaseService<BenefitAddress> {
}
@@ -0,0 +1,17 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsCart;
import com.budwk.app.zhgh.benefit.param.vo.BenefitGoodsCartVo;
import java.util.List;
/**
* @ClassName BenefitGoodsCartService
* @Description TODO
* @Author hpf
* @Date 2025/2/19 16:34
*/
public interface BenefitGoodsCartService extends BaseService<BenefitGoodsCart> {
List<BenefitGoodsCartVo> getCartList();
}
@@ -0,0 +1,19 @@
package com.budwk.app.zhgh.benefit.service;
import cn.hutool.core.lang.tree.Tree;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsCategory;
import java.util.List;
/**
* @ClassName BenefitGoodsCategoryService
* @Description TODO
* @Author hpf
* @Date 2025/2/12 11:29
*/
public interface BenefitGoodsCategoryService extends BaseService<BenefitGoodsCategory> {
List<Tree<String>> getCategoryTree();
List<BenefitGoodsCategory> getGoodsListByType(String id);
}
@@ -0,0 +1,17 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsOrder;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsOrderServicePageForm;
import org.nutz.dao.sql.Sql;
/**
* @ClassName BenefitGoodsOrderService
* @Description TODO
* @Author hpf
* @Date 2025/2/19 15:01
*/
public interface BenefitGoodsOrderService extends BaseService<BenefitGoodsOrder> {
Sql getSql(BenefitGoodsOrderServicePageForm pageForm);
}
@@ -0,0 +1,29 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsPageForm;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
/**
* @ClassName BenefitGoodsService
* @Description TODO
* @Author zhf
* @Date 2025/2/13 上午10:33
*/
public interface BenefitGoodsService extends BaseService<BenefitGoods> {
/**
* @param benefitGoods
* @author zhf
* @description 提交福利商品
*/
void submit(BenefitGoods benefitGoods);
Sql getSql(BenefitGoodsPageForm benefitGoodsPageForm);
NutMap findOne(String id);
NutMap findOneBySpecId(String id);
}
@@ -0,0 +1,13 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsSpecifications;
/**
* @ClassName BenefitGoodsSpecificationsService
* @Description TODO
* @Author hpf
* @Date 2025/2/17 18:01
*/
public interface BenefitGoodsSpecificationsService extends BaseService<BenefitGoodsSpecifications> {
}
@@ -0,0 +1,67 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitProject;
import com.budwk.app.zhgh.benefit.param.BenefitProjectPageForm;
import org.nutz.dao.sql.Sql;
import java.util.List;
public interface BenefitProjectService extends BaseService<BenefitProject> {
Sql getSql(BenefitProjectPageForm benefitProjectPageForm);
/**
* 按年度获取福利项目
*
* @param year 年份
* @return
*/
List<BenefitProject> getBenefitList(Integer year);
/**
* @param benefitProjectPageForm
* @return com.budwk.app.base.page.Pagination
* @author zhf
* @description 获取没有关联的商品及关联了自己福利项目的商品
*/
Pagination getGoodsTableData(BenefitProjectPageForm benefitProjectPageForm);
/**
* @param benefitProject
* @param benefitGoodsIds
* @author zhf
* @description 提交福利项目
*/
void submit(BenefitProject benefitProject, List<String> benefitGoodsIds);
/**
* @param id
* @author zhf
* @description 删除福利项目
*/
void deleteBenefit(String id);
/**
* @param benefitId
* @author zhf
* @description 生成福利名单
*/
void createBenefitUser(String benefitId);
/**
* @param benefitId
* @param isRenew
* @author zhf
* @description 更新福利名单
*/
void renewBenefitUser(String benefitId, Boolean isRenew);
BenefitProject findOne(String id);
/**
* @author hpf
* @description 获取福利项目关联的商品
*/
List<BenefitProject> getProjectGoodsList();
}
@@ -0,0 +1,19 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface BenefitStatisticsService extends BaseService<BenefitUserSelection> {
NutMap pageData(String benefitId, String unionId);
List<NutMap> getUserSelectionByBenefitId(String benefitId);
void openExportSummary(String benefitId, String unionId, HttpServletResponse response);
void doSelectByAdmin(String benefitId, String benefitGoodsList);
}
@@ -0,0 +1,13 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.param.BenefitUserPageForm;
import org.nutz.dao.sql.Sql;
public interface BenefitUserSelectionListService extends BaseService<BenefitUser> {
Sql getSql(BenefitUserPageForm pageForm);
Sql getExportSql(BenefitUserPageForm pageForm);
}
@@ -0,0 +1,12 @@
package com.budwk.app.zhgh.benefit.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.benefit.models.BenefitUser;
public interface BenefitUserSelectionMineService extends BaseService<BenefitUser> {
Pagination pageData(PageForm pageForm, String benefitId, Integer year);
}
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import java.util.List;
public interface BenefitUserSelectionService extends BaseService<BenefitUserSelection> {
void submit(BenefitUserSelection[] benefitUserSelection, String benefitId, String userId);
/**
* @param benefitId
* @param userId
* @return java.util.List<com.budwk.app.zhgh.benefit.models.BenefitUserSelection>
* @author zhf
* @description 查询自己选择的福利如果有userid就查询对应的
*/
List<BenefitUserSelection> selectSelectionBenefit(String benefitId, String userId);
}
@@ -0,0 +1,55 @@
package com.budwk.app.zhgh.benefit.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.param.BenefitUserPageForm;
import org.nutz.dao.sql.Sql;
import org.nutz.mvc.upload.TempFile;
import javax.validation.Valid;
import java.util.List;
public interface BenefitUserService extends BaseService<BenefitUser> {
/**
* @param pageForm
* @return org.nutz.dao.sql.Sql
* @author zhf
* @description 获取首页福利名单
* @date 2021/1/28 17:01
*/
Sql getSql(BenefitUserPageForm pageForm);
/**
* @param pageForm
* @return org.nutz.dao.sql.Sql
* @author zhf
* @description 获取未在福利名单里面的人
* @date 2021/1/28 17:01
*/
Pagination getSelectNotBenefitUser(BenefitUserPageForm pageForm);
/**
* @param ids
* @param projectId
* @author zhf
* @description 把选择的人添加到当前福利名单中
* @date 2021/1/28 17:01
*/
void doBenefitUser(List<String> ids, String projectId);
/**
* @param file
* @param businessId
* @param isFlag
* @return com.budwk.app.base.result.Result
* @author zhf
* @description 导入福利名单
*/
Result doImportBenefitUser(TempFile file, @Valid String businessId, @Valid Boolean isFlag);
}
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.benefit.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.benefit.models.BenefitAddress;
import com.budwk.app.zhgh.benefit.service.BenefitAddressService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @ClassName BenefitAddressServiceImpl
* @Description TODO
* @Author hpf
* @Date 2025/2/13 15:44
*/
@IocBean(args = {"refer:dao"})
public class BenefitAddressServiceImpl extends BaseServiceImpl<BenefitAddress> implements BenefitAddressService {
public BenefitAddressServiceImpl(Dao dao) {
super(dao);
}
}
@@ -0,0 +1,57 @@
package com.budwk.app.zhgh.benefit.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsCart;
import com.budwk.app.zhgh.benefit.param.vo.BenefitGoodsCartVo;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsCartService;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsService;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsSpecificationsService;
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 java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName BenefitGoodsCartServiceImpl
* @Description TODO
* @Author hpf
* @Date 2025/2/17 16:35
*/
@IocBean(args = {"refer:dao"})
public class BenefitGoodsCartServiceImpl extends BaseServiceImpl<BenefitGoodsCart> implements BenefitGoodsCartService {
public BenefitGoodsCartServiceImpl(Dao dao) {
super(dao);
}
@Inject
private BenefitGoodsService benefitGoodsService;
@Inject
private BenefitGoodsSpecificationsService benefitGoodsSpecificationsService;
@Override
public List<BenefitGoodsCartVo> getCartList() {
//获取当前用户的购物车
List<BenefitGoodsCart> cartList = query(Cnd.NEW().and(BenefitGoodsCart::getUserId, "=", SecurityUtil.getUserId()));
List<BenefitGoodsCartVo> cartVoList = cartList.stream().map(item -> {
BenefitGoodsCartVo cartVo = new BenefitGoodsCartVo();
cartVo.setId(item.getId());
cartVo.setGoodsId(item.getGoodsId());
cartVo.setCount(item.getCount());
cartVo.setChecked(item.isChecked());
cartVo.setUserId(item.getUserId());
cartVo.setSpecificationsId(item.getSpecificationsId());
cartVo.setBenefitGoods(benefitGoodsService.fetch(item.getGoodsId()));
if (item.getSpecificationsId()!=null){
cartVo.setBenefitGoodsSpecifications(benefitGoodsSpecificationsService.fetch(item.getSpecificationsId()));
}
return cartVo;
}).collect(Collectors.toList());
return cartVoList;
}
}
@@ -0,0 +1,74 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsCategory;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsCategoryService;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsService;
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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @ClassName BenefitGoodsCategoryServiceImpl
* @Description TODO
* @Author hpf
* @Date 2025/2/12 11:29
*/
@IocBean(args = {"refer:dao"})
public class BenefitGoodsCategoryServiceImpl extends BaseServiceImpl<BenefitGoodsCategory> implements BenefitGoodsCategoryService {
public BenefitGoodsCategoryServiceImpl(Dao dao) {
super(dao);
}
@Inject
private BenefitGoodsService benefitGoodsService;
@Override
public List<Tree<String>> getCategoryTree() {
List<BenefitGoodsCategory> list = this.query(Cnd.NEW().asc(BenefitGoodsCategory::getSort));
List<TreeNode<String>> treeNodes = new ArrayList<>(list.stream().map(category -> new TreeNode<>(category.getId(), category.getParentId(), category.getName(), 0)).toList());
return TreeUtil.build(treeNodes, "");
}
@Override
public List<BenefitGoodsCategory> getGoodsListByType(String id) {
Cnd cnd = Cnd.NEW();
if (id!=null&&!"".equals(id)){
cnd.and(BenefitGoodsCategory::getId,"=",id).or(BenefitGoodsCategory::getParentId,"=",id);
}else{
cnd.and(BenefitGoodsCategory::getParentId,"=","");
}
cnd.asc(BenefitGoodsCategory::getSort);
List<BenefitGoodsCategory> list = this.query(cnd);
List<String> categoryIdList = list.stream().map(BenefitGoodsCategory::getId).collect(Collectors.toList());
// 获取当前类型下的商品
List<BenefitGoods> goodsList = benefitGoodsService.query(Cnd.NEW()
.and(BenefitGoods::getGoodsCategoryOneLevelId, "in", categoryIdList)
.and(BenefitGoods::getStatus,"=",1)
.and(BenefitGoods::getGoodsProvideMode,"=","GOODS_PROVIDE_MODE_SHOPPING")
);
// 使用 groupingBy 将商品分配到项目
Map<String, List<BenefitGoods>> goodsMap = goodsList.stream()
.collect(Collectors.groupingBy(BenefitGoods::getGoodsCategoryOneLevelId));
// 将商品分配到对应的项目
list.forEach(category -> category.setGoodsList(goodsMap.getOrDefault(category.getId(), List.of())));
return list;
}
}
@@ -0,0 +1,58 @@
package com.budwk.app.zhgh.benefit.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsOrder;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsOrderServicePageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsOrderService;
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.IocBean;
/**
* @ClassName BenefitGoodsOrderServiceImpl
* @Description TODO
* @Author hpf
* @Date 2025/2/17 15:03
*/
@IocBean(args = {"refer:dao"})
public class BenefitGoodsOrderServiceImpl extends BaseServiceImpl<BenefitGoodsOrder> implements BenefitGoodsOrderService {
public BenefitGoodsOrderServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(BenefitGoodsOrderServicePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
bo.id,
bo.goodsId,
bo.specificationsId,
bo.receiveAddress,
bo.orderTime,
bo.createdBy,
bg.name goodsName,
bgs.name specName,
bgs.imgUrl,
bgs.points,
bo.userAddress,
bg.simpleDesc
FROM
benefit_goods_order bo
LEFT JOIN benefit_goods bg ON bg.id=bo.goodsId
LEFT JOIN benefit_goods_specifications bgs ON bgs.id=bo.specificationsId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and(Cnd.likeEX("bg.name",pageForm.getGoodsName()));
cnd.and(Cnd.likeEX("bgs.name",pageForm.getSpecName()));
/* cnd.andEX("bg.name", "like", '%'+pageForm.getGoodsName()+'%');
cnd.andEX("bgs.name", "like", '%'+pageForm.getSpecName()+'%');*/
cnd.andEX("bo.orderTime", "=", pageForm.getOrderTime());
sql.setCondition(cnd);
return sql;
}
}
@@ -0,0 +1,104 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsSpecifications;
import com.budwk.app.zhgh.benefit.param.BenefitGoodsPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsService;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsSpecificationsService;
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.util.NutMap;
import java.util.List;
/**
* @ClassName BenefitGoodsServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/13 上午10:34
*/
@IocBean(args = {"refer:dao"})
public class BenefitGoodsServiceImpl extends BaseServiceImpl<BenefitGoods> implements BenefitGoodsService {
public BenefitGoodsServiceImpl(Dao dao) {
super(dao);
}
@Inject
private BenefitGoodsSpecificationsService benefitGoodsSpecificationsService;
@Override
public void submit(BenefitGoods benefitGoods) {
if (StrUtil.isNotBlank(benefitGoods.getId())) {
updateWith(benefitGoods, "benefitGoodsSpecificationsList");
benefitGoods.getBenefitGoodsSpecificationsList().forEach(spec -> {
spec.setGoodsId(benefitGoods.getId());
});
benefitGoodsSpecificationsService.insertWith(benefitGoods.getBenefitGoodsSpecificationsList(), "id");
} else {
insertWith(benefitGoods, "benefitGoodsSpecificationsList");
}
}
@Override
public Sql getSql(BenefitGoodsPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
bg.*,
bgcOne.`name` goodsCategoryOneLevelName,
bgcTwo.`name` goodsCategoryTwoLevelName
FROM
`benefit_goods` bg
LEFT JOIN benefit_goods_category bgcOne ON bg.goodsCategoryOneLevelId = bgcOne.id
LEFT JOIN benefit_goods_category bgcTwo ON bg.goodsCategoryTwoLevelId = bgcTwo.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("bg.benefitId", "=", pageForm.getBenefitId());
cnd.andEX("bg.goodsCategoryOneLevelId", "=", pageForm.getGoodsCategoryOneLevelId());
cnd.andEX("bg.goodsCategoryTwoLevelId", "=", pageForm.getGoodsCategoryTwoLevelId());
cnd.asc("bg.goodsSort");
sql.setCondition(cnd);
return sql;
}
@Override
public NutMap findOne(String id) {
Sql sql = Sqls.create("""
SELECT
bg.*,
bgcOne.`name` goodsCategoryOneLevelName,
bgcTwo.`name` goodsCategoryTwoLevelName
FROM
`benefit_goods` bg
LEFT JOIN benefit_goods_category bgcOne ON bg.goodsCategoryOneLevelId = bgcOne.id
LEFT JOIN benefit_goods_category bgcTwo ON bg.goodsCategoryTwoLevelId = bgcTwo.id
WHERE bg.id=@id
""").setParam("id", id);
NutMap nutMap = (NutMap) dao().execute(sql.setCallback(Sqls.callback.map())).getResult();
List<BenefitGoodsSpecifications> specificationsList = dao().query(BenefitGoodsSpecifications.class,
Cnd.where("goodsId", "=", id).asc("specificationsSort"));
nutMap.put("benefitGoodsSpecificationsList", specificationsList);
return nutMap;
}
@Override
public NutMap findOneBySpecId(String id) {
Sql sql = Sqls.create("""
SELECT
bgs.*,
bg.name goodsName,
bg.simpleDesc
FROM
benefit_goods_specifications bgs
LEFT JOIN benefit_goods bg on bgs.goodsId=bg.id
WHERE bgs.id=@id
""").setParam("id", id);
NutMap nutMap = (NutMap) dao().execute(sql.setCallback(Sqls.callback.map())).getResult();
return nutMap;
}
}
@@ -0,0 +1,21 @@
package com.budwk.app.zhgh.benefit.service.impl;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.benefit.models.BenefitGoodsSpecifications;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsSpecificationsService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @ClassName BenefitGoodsSpecificationsServiceImpl
* @Description TODO
* @Author hpf
* @Date 2025/2/17 18:01
*/
@IocBean(args = {"refer:dao"})
public class BenefitGoodsSpecificationsServiceImpl extends BaseServiceImpl<BenefitGoodsSpecifications> implements BenefitGoodsSpecificationsService {
public BenefitGoodsSpecificationsServiceImpl(Dao dao) {
super(dao);
}
}
@@ -0,0 +1,234 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitProject;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import com.budwk.app.zhgh.benefit.param.BenefitProjectPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitGoodsService;
import com.budwk.app.zhgh.benefit.service.BenefitProjectService;
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.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 java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @ClassName BenefitProjectServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/12 上午11:15
*/
@IocBean(args = {"refer:dao"})
public class BenefitProjectServiceImpl extends BaseServiceImpl<BenefitProject> implements BenefitProjectService {
@Inject
private BenefitGoodsService benefitGoodsService;
public BenefitProjectServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(BenefitProjectPageForm benefitProjectPageForm) {
Sql sql = Sqls.create("""
SELECT
bp.*,
( SELECT COUNT(*) FROM benefit_user WHERE benefitId = bp.id ) benefitUserNum
FROM
`benefit_project` bp
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("year", "=", benefitProjectPageForm.getYear());
cnd.andEX("id", "=", benefitProjectPageForm.getBenefitId());
sql.setCondition(cnd);
return sql;
}
@Override
public List<BenefitProject> getBenefitList(Integer year) {
List<BenefitProject> list = query(Cnd.NEW().andEX("year", "=", year));
list.forEach(l -> {
fetchLinks(l, "benefitGoodsList");
});
return list;
}
@Override
public Pagination getGoodsTableData(BenefitProjectPageForm benefitProjectPageForm) {
Sql sql = Sqls.create("""
SELECT
bg.*,
bgcTwo.`name` goodsCategoryTwoLevelName,
bgcOne.`name` goodsCategoryOneLevelName
FROM
`benefit_goods` bg
LEFT JOIN benefit_goods_category bgcOne ON bgcOne.id = bg.goodsCategoryOneLevelId
LEFT JOIN benefit_goods_category bgcTwo ON bgcTwo.id = bg.goodsCategoryTwoLevelId
$condition
""");
Cnd cnd = Cnd.NEW();
if (benefitProjectPageForm.getIsEdit()) {
cnd.and("bg.benefitId", "is", null);
cnd.orEX("bg.benefitId", "=", benefitProjectPageForm.getBenefitId());
} else {
cnd.and("bg.benefitId", "=", benefitProjectPageForm.getBenefitId());
}
if (Lang.isNotEmpty(benefitProjectPageForm.getGoodsCategoryIds())) {
if (benefitProjectPageForm.getGoodsCategoryIds().size() == 1) {
cnd.andEX("bg.goodsCategoryOneLevelId", "=", benefitProjectPageForm.getGoodsCategoryIds().get(0));
}
if (benefitProjectPageForm.getGoodsCategoryIds().size() == 2) {
cnd.andEX("bg.goodsCategoryTwoLevelId", "=", benefitProjectPageForm.getGoodsCategoryIds().get(1));
}
}
cnd.asc("bg.goodsSort").desc("benefitId");
sql.setCondition(cnd);
Pagination pagination = listPageMap(benefitProjectPageForm.getPageNumber(), benefitProjectPageForm.getPageSize(), sql);
return pagination;
}
@Aop(TransAop.READ_COMMITTED)
@Override
public void submit(BenefitProject benefitProject, List<String> benefitGoodsIds) {
benefitProject.setYear(DateUtil.thisYear());
insertOrUpdate(benefitProject);
if (Lang.isNotEmpty(benefitGoodsIds)) {
dao().update(BenefitGoods.class,
Chain.make("benefitId", null),
Cnd.where("benefitId", "=", benefitProject.getId()));
dao().update(BenefitGoods.class,
Chain.make("benefitId", benefitProject.getId()),
Cnd.where("id", "in", benefitGoodsIds));
}
}
@Override
public void deleteBenefit(String id) {
delete(id);
dao().update(BenefitGoods.class,
Chain.make("benefitId", null),
Cnd.where("benefitId", "=", id));
}
@Override
public void createBenefitUser(String benefitId) {
List<View_user> userList = dao().query(View_user.class, Cnd.where("welfareMember", "=", 1));
addBenefitUser(userList, benefitId);
}
@Aop(TransAop.READ_COMMITTED)
@Override
public void renewBenefitUser(String benefitId, Boolean isRenew) {
if (!isRenew) {
//如果是重置就直接删除福利名单
dao().clear(BenefitUser.class, Cnd.where("benefitId", "=", benefitId));
dao().clear(BenefitUserSelection.class, Cnd.where("benefitId", "=", benefitId));
}
//找到不是福利会员的并且在福利名单中的删除
List<View_user> notUserList = dao().query(View_user.class,
Cnd.where("welfareMember", "=", 0)
.or("welfareMember", "is", null));
List<String> ids = notUserList.stream().map(View_user::getId).toList();
dao().clear(BenefitUser.class, Cnd.where(BenefitUser::getBenefitId, "=", benefitId).and(BenefitUser::getUserId, "in", ids));
dao().clear(BenefitUserSelection.class, Cnd.where(BenefitUserSelection::getBenefitId, "=", benefitId).and(BenefitUserSelection::getSelectUserId, "in", ids));
//找出在福利名单中的
List<String> benefitUserIds = dao().query(BenefitUser.class,
Cnd.where(BenefitUser::getBenefitId, "=", benefitId)).stream().map(BenefitUser::getUserId).toList();
//找出是福利会员不在 BenefitUser 中的 userId并且排除本身就在福利名单中的人
List<View_user> userList = dao().query(View_user.class,
Cnd.where("welfareMember", "=", 1)
.andEX("id", "not in", benefitUserIds));
addBenefitUser(userList, benefitId);
}
private void addBenefitUser(List<View_user> userList, String benefitId) {
List<BenefitUser> benefitUserList = new ArrayList<>();
BenefitProject project = fetch(benefitId);
userList.forEach(v -> {
BenefitUser benefitUser = new BenefitUser();
benefitUser.setBenefitId(benefitId);
benefitUser.setUserId(v.getId());
benefitUser.setUserName(v.getUsername());
benefitUser.setLoginName(v.getLoginname());
benefitUser.setUnionId(v.getUnionId());
benefitUser.setUnitId(v.getUnitId());
benefitUser.setPersonType(v.getPersonType());
benefitUser.setUserState(v.getUserState());
if (project.getProvideMode().equals("BENEFIT_PROVIDE_MODE_ONE") && !project.getSignMode().equals("BENEFIT_SIGN_MODE_TWO")) {
//如果发放模式为统一发放并且不需要签字的话默认设置为已签收
benefitUser.setIsChoice(true);
}
benefitUserList.add(benefitUser);
});
insert(benefitUserList);
}
@Override
public BenefitProject findOne(String id) {
BenefitProject benefitProject = fetch(id);
fetchLinks(benefitProject, "benefitGoodsList", Cnd.NEW().asc("goodsSort"));
fetchLinks(benefitProject.getBenefitGoodsList(), "benefitGoodsSpecificationsList", Cnd.NEW().asc("specificationsSort"));
List<BenefitUserSelection> selectionList = dao().query(BenefitUserSelection.class, Cnd.where(BenefitUserSelection::getBenefitId, "=", id));
benefitProject.getBenefitGoodsList().forEach(bg -> {
int sum = selectionList.stream().filter(x -> x.getGoodsId().equals(bg.getId())).mapToInt(BenefitUserSelection::getSelectNum).sum();
bg.setChoiceNum(sum);
});
List<BenefitGoods> goodsList = benefitProject.getBenefitGoodsList().stream().sorted(Comparator.comparingInt(BenefitGoods::getChoiceNum).reversed()).toList();
benefitProject.setBenefitGoodsList(goodsList);
return benefitProject;
}
@Override
public List<BenefitProject> getProjectGoodsList() {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 格式化日期
String formattedDate = currentDate.format(formatter);
//获取当前时间段的项目
List<BenefitProject> projectList = this.query(Cnd.NEW()
.and(BenefitProject::getStartChoiceTime, "<=", formattedDate)
.and(BenefitProject::getEndChoiceTime, ">=", formattedDate)
.and(BenefitProject::getIsUnseal, "=", true).desc(BenefitProject::getStartChoiceTime));
// 获取当前项目下的商品
List<BenefitGoods> goodsList = benefitGoodsService.query(Cnd.NEW()
.and(BenefitGoods::getBenefitId, "in", projectList.stream().map(BenefitProject::getId).collect(Collectors.toList()))
.and(BenefitGoods::getStatus, "=", 1));
// 使用 groupingBy 将商品分配到项目
Map<String, List<BenefitGoods>> goodsMap = goodsList.stream()
.collect(Collectors.groupingBy(BenefitGoods::getBenefitId));
// 将商品分配到对应的项目
projectList.forEach(project -> project.setBenefitGoodsList(goodsMap.getOrDefault(project.getId(), List.of())));
return projectList;
}
}
@@ -0,0 +1,181 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.BenefitGoods;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import com.budwk.app.zhgh.benefit.service.BenefitStatisticsService;
import org.apache.poi.ss.usermodel.Workbook;
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.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.IntStream;
/**
* @ClassName BenefitStatisticsServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/21 下午4:00
*/
@IocBean(args = {"refer:dao"})
public class BenefitStatisticsServiceImpl extends BaseServiceImpl<BenefitUserSelection> implements BenefitStatisticsService {
public BenefitStatisticsServiceImpl(Dao dao) {
super(dao);
}
@Override
public NutMap pageData(String benefitId, String unionId) {
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SCHOOL_UNION_WELFARE_ADMIN.name())) {
cnd.and("id", "=", SecurityUtil.getUnionId());
}
cnd.andEX("id", "=", unionId);
cnd.asc("unionCode");
Sql sqlUnion = Sqls.create("select * from sys_union $condition");
sqlUnion.setCondition(cnd);
List<NutMap> sysUnions = listMap(sqlUnion);
Sql sqlViewList = Sqls.create("SELECT * FROM benefit_user where benefitId=@benefitId and unionId is not null").setParam("benefitId", benefitId);
List<NutMap> viewMap = listMap(sqlViewList);
//循环每个分工会
sysUnions.forEach(v -> {
//找出这个分工会的人数
List<NutMap> collect = viewMap.stream().filter(view -> view.getString("unionId").equals(v.getString("id"))).toList();
v.addv("teacherSum", collect.size());
});
//获取商品列表
List<BenefitGoods> goodsList = dao().query(BenefitGoods.class, Cnd.where("benefitId", "=", benefitId));
goodsList.forEach(g -> {
dao().fetchLinks(g, "benefitGoodsSpecificationsList");
});
//所有选择的人
List<NutMap> userSelectionList = getUserSelectionByBenefitId(benefitId);
for (NutMap union : sysUnions) {
//每个分工会选择的人数
List<NutMap> unionUserSelectionList = userSelectionList.stream().filter(x -> x.getString("unionId").equals(union.getString("id"))).toList();
goodsList.forEach(g -> {
IntStream selectNum = unionUserSelectionList.stream().filter(sel -> sel.getString("goodsId").equals(g.getId())).mapToInt(x -> x.getInt("selectNum"));
union.put(g.getName(), selectNum.sum());
if (ObjectUtil.isNotEmpty(g.getBenefitGoodsSpecificationsList())) {
g.getBenefitGoodsSpecificationsList().forEach(spec -> {
IntStream specificationsSelectNum = unionUserSelectionList.stream().filter(sel -> ObjectUtil.isNotEmpty(sel.getString("specificationsId")) && sel.getString("specificationsId").equals(spec.getId())).mapToInt(x -> x.getInt("selectNum"));
union.put(spec.getName(), specificationsSelectNum.sum());
});
}
});
union.put("selectTotalCount", unionUserSelectionList.stream().map(u -> u.getString("selectUserId")).distinct().count());
union.put("notSelectTotalCount", union.getInt("teacherSum") - union.getInt("selectTotalCount"));
}
//表格列数据
List<NutMap> labelList = new ArrayList<>();
labelList.add(NutMap.NEW().addv("label", "本次福利会员人数").addv("prop", "teacherSum"));
goodsList.forEach(v -> {
if (!v.getBenefitGoodsSpecificationsList().isEmpty()) {
labelList.add(NutMap.NEW().addv("label", v.getName()).addv("prop", v.getName()).addv("isHasChildren", true).addv("benefitGoodsSpecificationsList", v.getBenefitGoodsSpecificationsList()));
} else {
labelList.add(NutMap.NEW().addv("label", v.getName()).addv("prop", v.getName()).addv("isHasChildren", false));
}
});
labelList.add(NutMap.NEW().addv("label", "参加人数").addv("prop", "selectTotalCount"));
labelList.add(NutMap.NEW().addv("label", "未选人数").addv("prop", "notSelectTotalCount"));
return NutMap.NEW().addv("tableList", sysUnions).addv("tableColumn", labelList);
}
@Override
public List<NutMap> getUserSelectionByBenefitId(String benefitId) {
Sql sql = Sqls.create("""
SELECT
bus.*,
bu.unionId
FROM
benefit_user_selection bus
LEFT JOIN benefit_user bu ON bus.selectUserId = bu.userId
AND bu.benefitId = bus.benefitId
WHERE
bus.benefitId = @benefitId AND bu.unionId IS NOT NULL
""").setParam("benefitId", benefitId);
return listMap(sql);
}
@Override
public void openExportSummary(String benefitId, String unionId, HttpServletResponse response) {
NutMap dataMap = pageData(benefitId, unionId);
List<ExcelExportEntity> entityList = new ArrayList<>();
List<NutMap> labelList = dataMap.getAsList("tableColumn", NutMap.class);
List<NutMap> list = dataMap.getAsList("tableList", NutMap.class);
NutMap map = NutMap.NEW().setv("name", "合计");
labelList.forEach(o -> {
List<Integer> numList = list.stream().map(v -> v.getInt(o.getString("prop"))).toList();
int sum = numList.stream().mapToInt(Integer::intValue).sum();
map.setv(o.getString("prop"), sum);
});
list.add(map);
labelList.add(0, NutMap.NEW().addv("label", "所属工会").addv("prop", "name"));
labelList.forEach(v -> {
entityList.add(new ExcelExportEntity(v.getString("label"), v.getString("prop"), 20));
});
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("汇总表", ""), entityList, list);
CommonDownloadUtil.download("汇总表.xlsx", workbook, response);
}
@Override
public void doSelectByAdmin(String benefitId, String benefitGoodsList) {
List<BenefitUser> benefitUserList = dao().query(BenefitUser.class,
Cnd.where(BenefitUser::getBenefitId, "=", benefitId).and(BenefitUser::getIsChoice, "=", 0));
List<String> userIds = benefitUserList.stream().map(BenefitUser::getUserId).toList();
List<NutMap> optionList = Json.fromJsonAsList(NutMap.class, benefitGoodsList);
List<BenefitUserSelection> insertList = new ArrayList<>();
userIds.forEach(id -> {
List<BenefitUserSelection> userSelections = optionList.stream().filter(v -> v.getInt("selectNum") > 0).map(v -> {
BenefitUserSelection selection = new BenefitUserSelection();
selection.setSelectTime(new Date());
selection.setBenefitId(benefitId);
selection.setSelectUserId(id);
selection.setGoodsId(v.getString("id"));
selection.setReceiveAddress(null);
selection.setSpecificationsId(v.getString("specificationsId"));
selection.setShopAddress(v.getString("shopAddress"));
selection.setSelectNum(v.getInt("selectNum"));
return selection;
}).toList();
insertList.addAll(userSelections);
});
dao().insert(insertList);
dao().update(BenefitUser.class,
Chain.make("isChoice", true),
Cnd.where(BenefitUser::getBenefitId, "=", benefitId)
.and(BenefitUser::getUserId, "in", userIds));
}
}
@@ -0,0 +1,136 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.param.BenefitUserPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitUserSelectionListService;
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.IocBean;
import org.nutz.lang.Strings;
/**
* @ClassName BenefitUserSelectionListServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/20 下午7:33
*/
@IocBean(args = {"refer:dao"})
public class BenefitUserSelectionListServiceImpl extends BaseServiceImpl<BenefitUser> implements BenefitUserSelectionListService {
public BenefitUserSelectionListServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(BenefitUserPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
bu.id,
bu.userId,
bu.personType,
bu.userState,
bu.userName,
bu.loginName,
bu.benefitId,
bu.isChoice,
us.sex,
it.`name` unitName,
un.`name` unionName,
bp.`year`,
bp.`name` benefitName,
bp.startChoiceTime,
bp.endChoiceTime,
bp.provideMode,
bp.signMode,
GROUP_CONCAT( DISTINCT bg.`name`, 'x', bus.selectNum ) AS giftList,
GROUP_CONCAT(DISTINCT bg.`name`, '', COALESCE( bus.shopAddress,bus.receiveAddress)) AS receiveAddressList,
COALESCE( bu.userSign,bus.userSign) userSign,
bp.giftName
FROM
benefit_user bu
LEFT JOIN sys_user us ON us.id = bu.userId
LEFT JOIN sys_unit it ON it.id = bu.unitId
LEFT JOIN sys_union un ON un.id = bu.unionId
LEFT JOIN benefit_project bp ON bp.id = bu.benefitId
LEFT JOIN benefit_user_selection bus ON bu.benefitId = bus.benefitId
AND bus.selectUserId = bu.userId
LEFT JOIN benefit_goods bg ON bg.id = bus.goodsId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("bu.benefitId", "=", pageForm.getBenefitId());
cnd.andEX("bu.unionId", "=", pageForm.getUnionId());
cnd.andEX("bu.unitId", "in", pageForm.getUnitIds());
cnd.andEX("bu.personType", "in", pageForm.getPersonTypes());
cnd.andEX("bu.userState", "in", pageForm.getUserStates());
cnd.and("bu.benefitId", "=", pageForm.getBenefitId());
cnd.andEX("bus.goodsId", "=", pageForm.getGoodsId());
cnd.andEX("bu.isChoice", "=", ObjectUtil.isNull(pageForm.getIsChoice()) ? null : pageForm.getIsChoice());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword()) && StrUtil.isNotBlank(pageForm.getSearchName())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.groupBy("bu.id");
if (Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.asc("it.unitcode").asc("bu.loginName");
}
sql.setCondition(cnd);
return sql;
}
@Override
public Sql getExportSql(BenefitUserPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
bu.loginName,
bu.userName,
bu.personType,
bu.userState,
us.sex,
it.`name` unitName,
un.`name` unionName,
bp.provideMode,
bp.signMode,
bus.selectNum,
COALESCE ( bus.shopAddress, bus.receiveAddress ) receiveAddress,
COALESCE ( bp.giftName, bg.`name` ) giftName,
bgs.`name` specificationsName
FROM
benefit_user bu
LEFT JOIN sys_user us ON us.id = bu.userId
LEFT JOIN sys_unit it ON it.id = bu.unitId
LEFT JOIN sys_union un ON un.id = bu.unionId
LEFT JOIN benefit_project bp ON bp.id = bu.benefitId
LEFT JOIN benefit_user_selection bus ON bu.benefitId = bus.benefitId
AND bus.selectUserId = bu.userId
LEFT JOIN benefit_goods_specifications bgs ON bgs.id = bus.specificationsId
LEFT JOIN benefit_goods bg ON bg.id = bus.goodsId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("bu.benefitId", "=", pageForm.getBenefitId());
cnd.andEX("bu.unionId", "=", pageForm.getUnionId());
cnd.andEX("bu.unitId", "=", pageForm.getUnitId());
cnd.andEX("bu.personType", "=", pageForm.getPersonType());
cnd.andEX("bu.userState", "=", pageForm.getUserState());
cnd.and("bu.benefitId", "=", pageForm.getBenefitId());
cnd.andEX("bus.goodsId", "=", pageForm.getGoodsId());
cnd.andEX("bu.isChoice", "=", ObjectUtil.isNull(pageForm.getIsChoice()) ? null : pageForm.getIsChoice());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword()) && StrUtil.isNotBlank(pageForm.getSearchName())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.asc("it.unitcode").asc("bu.loginName");
sql.setCondition(cnd);
return sql;
}
}
@@ -0,0 +1,59 @@
package com.budwk.app.zhgh.benefit.service.impl;
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.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.service.BenefitUserSelectionMineService;
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.IocBean;
/**
* @ClassName BenefitUserSelectionMineServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/20 下午4:45
*/
@IocBean(args = {"refer:dao"})
public class BenefitUserSelectionMineServiceImpl extends BaseServiceImpl<BenefitUser> implements BenefitUserSelectionMineService {
public BenefitUserSelectionMineServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination pageData(PageForm pageForm, String benefitId, Integer year) {
Sql sql = Sqls.create("""
SELECT
bu.*,
bp.`year`,
bp.`name` benefitName,
bp.startChoiceTime,
bp.endChoiceTime,
bp.provideMode,
bp.signMode,
bp.cover,
GROUP_CONCAT( DISTINCT bg.`name`, 'x', bus.selectNum ) AS giftList,
bp.giftName
FROM
benefit_user bu
LEFT JOIN benefit_project bp ON bp.id = bu.benefitId
LEFT JOIN benefit_user_selection bus ON bu.benefitId = bus.benefitId
AND bus.selectUserId = @selectUserId
LEFT JOIN benefit_goods bg ON bg.id = bus.goodsId
$condition
""").setParam("selectUserId", SecurityUtil.getUserId());
Cnd cnd = Cnd.NEW();
cnd.andEX("bu.benefitId", "=", benefitId);
cnd.and("bp.isUnseal", "=", 1);
cnd.and("bu.userId", "=", SecurityUtil.getUserId());
cnd.andEX("bp.year", "=", year);
cnd.groupBy("bu.id");
sql.setCondition(cnd);
Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return pagination;
}
}
@@ -0,0 +1,51 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.models.BenefitUserSelection;
import com.budwk.app.zhgh.benefit.service.BenefitUserSelectionService;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
import java.util.Date;
import java.util.List;
/**
* @ClassName BenefitUserSelectionServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/18 上午9:46
*/
@IocBean(args = {"refer:dao"})
public class BenefitUserSelectionServiceImpl extends BaseServiceImpl<BenefitUserSelection> implements BenefitUserSelectionService {
public BenefitUserSelectionServiceImpl(Dao dao) {
super(dao);
}
@Override
public void submit(BenefitUserSelection[] benefitUserSelection, String benefitId, String userId) {
clear(Cnd.where("benefitId", "=", benefitId)
.and("selectUserId", "=", userId));
for (BenefitUserSelection selection : benefitUserSelection) {
selection.setSelectUserId(userId);
selection.setSelectTime(new Date());
}
insert(benefitUserSelection);
dao().update(BenefitUser.class,
Chain.make("isChoice", true),
Cnd.where("benefitId", "=", benefitId)
.and("userId", "=", userId));
}
@Override
public List<BenefitUserSelection> selectSelectionBenefit(String benefitId, String userId) {
if (ObjectUtil.isNull(userId)) {
userId = SecurityUtil.getUserId();
}
return query(Cnd.where("benefitId", "=", benefitId).andEX("selectUserId", "=", userId));
}
}
@@ -0,0 +1,181 @@
package com.budwk.app.zhgh.benefit.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.easyexcel.EasyExcelUtil;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.benefit.mode.BenefitUserTemp;
import com.budwk.app.zhgh.benefit.models.BenefitUser;
import com.budwk.app.zhgh.benefit.param.BenefitUserPageForm;
import com.budwk.app.zhgh.benefit.service.BenefitUserService;
import org.apache.poi.ss.formula.functions.T;
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.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.upload.TempFile;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName BenefitUserServiceImpl
* @Description TODO
* @Author zhf
* @Date 2025/2/12 上午11:16
*/
@IocBean(args = {"refer:dao"})
public class BenefitUserServiceImpl extends BaseServiceImpl<BenefitUser> implements BenefitUserService {
public BenefitUserServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSql(BenefitUserPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
bu.*,
us.sex,
us.mobile,
it.`name` unitName,
un.`name` unionName
FROM
`benefit_user` bu
LEFT JOIN sys_user us ON us.id = bu.userId
LEFT JOIN sys_unit it ON it.id = bu.unitId
LEFT JOIN sys_union un ON un.id = bu.unionId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("bu.unionId", "=", pageForm.getUnionId());
cnd.andEX("bu.unitId", "in", pageForm.getUnitIds());
cnd.andEX("bu.personType", "in", pageForm.getPersonTypes());
cnd.andEX("bu.userState", "in", pageForm.getUserStates());
cnd.and("bu.benefitId", "=", pageForm.getBenefitId());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword()) && StrUtil.isNotBlank(pageForm.getSearchName())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.asc("it.unitcode");
sql.setCondition(cnd);
return sql;
}
@Override
public Pagination getSelectNotBenefitUser(BenefitUserPageForm pageForm) {
List<BenefitUser> benefitUserList = query(Cnd.where("benefitId", "=", pageForm.getBenefitId()));
List<String> userIds = benefitUserList.stream().map(BenefitUser::getUserId).collect(Collectors.toList());
Sql sql = Sqls.create("""
SELECT
id,
loginname,
username,
userState,
personType,
unitName,
unionName,
unitcode
FROM
`vw_user`
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("id", "not in", userIds);
cnd.and("unionCode", "is not", null);
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
cnd.andEX("personType", "=", pageForm.getPersonType());
cnd.andEX("userState", "=", pageForm.getUserState());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword()) && StrUtil.isNotBlank(pageForm.getSearchName())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.asc("unitcode");
sql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void doBenefitUser(List<String> ids, String benefitId) {
List<View_user> userList = dao().query(View_user.class, Cnd.NEW().and("id", "in", ids));
List<BenefitUser> welfareLists = userList.stream().map(v -> {
BenefitUser benefitUser = new BenefitUser();
benefitUser.setBenefitId(benefitId);
benefitUser.setUserId(v.getId());
benefitUser.setUserName(v.getUsername());
benefitUser.setLoginName(v.getLoginname());
benefitUser.setUnionId(v.getUnionId());
benefitUser.setUnitId(v.getUnitId());
benefitUser.setPersonType(v.getPersonType());
benefitUser.setUserState(v.getUserState());
return benefitUser;
}).collect(Collectors.toList());
insert(welfareLists);
}
@Override
public Result doImportBenefitUser(TempFile file, String businessId, Boolean isFlag) {
List<T> ts = EasyExcelUtil.syncReadModel(file.getFile(), BenefitUserTemp.class, 0, 1);
List<BenefitUserTemp> mdList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(BenefitUserTemp.class);
List<String> loginNames = mdList.stream().map(BenefitUserTemp::getLoginName).collect(Collectors.toList());
List<View_user> sysUsers = dao().query(View_user.class, Cnd.where("loginname", "in", loginNames));
if (isFlag) {
clear(Cnd.where("benefitId", "=", businessId));
}
//查询这个福利现有的福利名单
List<BenefitUser> benefitUsers = query(Cnd.where("benefitId", "=", businessId));
//返回错误记录
List<BenefitUserTemp> errorInfos = new ArrayList<>();
//添加福利名单数据
List<BenefitUser> benefitUserList = new ArrayList<>();
for (BenefitUserTemp v : mdList) {
View_user user = sysUsers.stream().filter(s -> s.getLoginname().equals(v.getLoginName())).findFirst().orElse(null);
if (user != null) {
if (benefitUsers.stream().anyMatch(s -> s.getUserId().equals(user.getId()))) {
v.setErrorInfo("福利名单中已存在无法在添加");
errorInfos.add(v);
continue;
}
BenefitUser benefitUser = new BenefitUser();
benefitUser.setUserId(user.getId());
benefitUser.setBenefitId(businessId);
benefitUser.setUnionId(user.getUnionId());
benefitUser.setUnitId(user.getUnitId());
benefitUser.setPersonType(user.getPersonType());
benefitUser.setUserState(user.getUserState());
benefitUser.setLoginName(user.getLoginname());
benefitUser.setUserName(user.getUsername());
benefitUserList.add(benefitUser);
} else {
v.setErrorInfo("数据库暂无此人请检查工号");
errorInfos.add(v);
}
}
insert(benefitUserList);
//如果有错误数据就返回给前端
if (Lang.isNotEmpty(errorInfos)) {
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", mdList.size());
nutMap.setv("successCount", Math.max(mdList.size() - errorInfos.size(), 0));
nutMap.setv("errorCount", errorInfos.size());
nutMap.setv("errorList", errorInfos.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getErrorInfo());
}).collect(Collectors.toList()));
return Result.success(nutMap);
}
return Result.success("导入成功");
}
}