Commit 3f614dd9 authored by fangxinjiang's avatar fangxinjiang

Merge branch 'develop'

parents 1f98ba00 a09a352f
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TPersonnelRoster;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author fxj
* @date 2023-06-13 15:42:17
*/
@Data
public class TPersonnelRosterSearchVo extends TPersonnelRoster {
/**
* 多选导出或删除等操作
*/
@Schema(description = "选中ID,多个逗号分割")
private String ids;
/**
* 创建时间区间 [开始时间,结束时间]
*/
@Schema(description = "创建时间区间")
private LocalDateTime[] createTimes;
/**
* @Author fxj
* 查询数据起
**/
@Schema(description = "查询limit 开始")
private int limitStart;
/**
* @Author fxj
* 查询数据止
**/
@Schema(description = "查询limit 数据条数")
private int limitEnd;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TPersonnelRoster;
import com.yifu.cloud.plus.v1.yifu.archives.service.TPersonnelRosterService;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TPersonnelRosterSearchVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
*
*
* @author fxj
* @date 2023-06-13 15:42:17
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/tpersonnelroster" )
@Tag(name = "员工花名册")
public class TPersonnelRosterController {
private final TPersonnelRosterService tPersonnelRosterService;
/**
* 简单分页查询
* @param page 分页对象
* @param tPersonnelRoster
* @return
*/
@Operation(description = "简单分页查询")
@GetMapping("/page")
public R<IPage<TPersonnelRoster>> getTPersonnelRosterPage(Page<TPersonnelRoster> page, TPersonnelRosterSearchVo tPersonnelRoster) {
return new R<>(tPersonnelRosterService.getTPersonnelRosterPage(page,tPersonnelRoster));
}
/**
* 不分页查询
* @param tPersonnelRoster
* @return
*/
@Operation(summary = "不分页查询", description = "不分页查询")
@PostMapping("/noPage" )
public R<List<TPersonnelRoster>> getTPersonnelRosterNoPage(@RequestBody TPersonnelRosterSearchVo tPersonnelRoster) {
return R.ok(tPersonnelRosterService.noPageDiy(tPersonnelRoster));
}
/**
* 通过id查询
* @param id id
* @return R
*/
@Operation(summary = "通过id查询", description = "通过id查询:hasPermission('demo_tpersonnelroster_get')")
@GetMapping("/{id}" )
@PreAuthorize("@pms.hasPermission('demo_tpersonnelroster_get')" )
public R<TPersonnelRoster> getById(@PathVariable("id" ) String id) {
return R.ok(tPersonnelRosterService.getById(id));
}
/**
* 新增
* @param tPersonnelRoster
* @return R
*/
@Operation(summary = "新增", description = "新增:hasPermission('demo_tpersonnelroster_add')")
@SysLog("新增" )
@PostMapping
@PreAuthorize("@pms.hasPermission('demo_tpersonnelroster_add')" )
public R<Boolean> save(@RequestBody TPersonnelRoster tPersonnelRoster) {
return R.ok(tPersonnelRosterService.save(tPersonnelRoster));
}
/**
* 修改
* @param tPersonnelRoster
* @return R
*/
@Operation(summary = "修改", description = "修改:hasPermission('demo_tpersonnelroster_edit')")
@SysLog("修改" )
@PutMapping
@PreAuthorize("@pms.hasPermission('demo_tpersonnelroster_edit')" )
public R<Boolean> updateById(@RequestBody TPersonnelRoster tPersonnelRoster) {
return R.ok(tPersonnelRosterService.updateById(tPersonnelRoster));
}
/**
* 通过id删除
* @param id id
* @return R
*/
@Operation(summary = "通过id删除", description = "通过id删除:hasPermission('demo_tpersonnelroster_del')")
@SysLog("通过id删除" )
@DeleteMapping("/{id}" )
@PreAuthorize("@pms.hasPermission('demo_tpersonnelroster_del')" )
public R<Boolean> removeById(@PathVariable String id) {
return R.ok(tPersonnelRosterService.removeById(id));
}
/**
* 批量导出
* @author fxj
* @date 2023-06-13 15:42:17
**/
@Operation(description = "导出 hasPermission('demo_tpersonnelroster-export')")
@PostMapping("/export")
@PreAuthorize("@pms.hasPermission('demo_tpersonnelroster-export')")
public void export(HttpServletResponse response, @RequestBody TPersonnelRosterSearchVo searchVo) {
tPersonnelRosterService.listExport(response,searchVo);
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TPersonnelRoster;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
*
*
* @author fxj
* @date 2023-06-13 15:42:17
*/
@Mapper
public interface TPersonnelRosterMapper extends BaseMapper<TPersonnelRoster> {
/**
* 简单分页查询
* @param tPersonnelRoster
* @return
*/
IPage<TPersonnelRoster> getTPersonnelRosterPage(Page<TPersonnelRoster> page, @Param("tPersonnelRoster") TPersonnelRoster tPersonnelRoster);
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TPersonnelRoster;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TPersonnelRosterSearchVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
/**
*
*
* @author fxj
* @date 2023-06-13 15:42:17
*/
public interface TPersonnelRosterService extends IService<TPersonnelRoster> {
/**
* 简单分页查询
* @param tPersonnelRoster
* @return
*/
IPage<TPersonnelRoster> getTPersonnelRosterPage(Page<TPersonnelRoster> page, TPersonnelRosterSearchVo tPersonnelRoster);
void listExport(HttpServletResponse response, TPersonnelRosterSearchVo searchVo);
List<TPersonnelRoster> noPageDiy(TPersonnelRosterSearchVo searchVo);
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ArrayUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TPersonnelRoster;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.TPersonnelRosterMapper;
import com.yifu.cloud.plus.v1.yifu.archives.service.TPersonnelRosterService;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TPersonnelRosterSearchVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TPersonnelRosterVo;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* @author fxj
* @date 2023-06-13 15:42:17
*/
@Log4j2
@Service
public class TPersonnelRosterServiceImpl extends ServiceImpl<TPersonnelRosterMapper, TPersonnelRoster> implements TPersonnelRosterService {
/**
* 简单分页查询
* @param tPersonnelRoster
* @return
*/
@Override
public IPage<TPersonnelRoster> getTPersonnelRosterPage(Page<TPersonnelRoster> page, TPersonnelRosterSearchVo tPersonnelRoster){
return baseMapper.getTPersonnelRosterPage(page,tPersonnelRoster);
}
/**
* 批量导出
* @param searchVo
* @return
*/
@Override
public void listExport(HttpServletResponse response, TPersonnelRosterSearchVo searchVo){
String fileName = "批量导出" + DateUtil.getThisTime() + ".xlsx";
//获取要导出的列表
List<TPersonnelRoster> list = new ArrayList<>();
long count = noPageCountDiy(searchVo);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType(CommonConstants.MULTIPART_FORM_DATA);
response.setCharacterEncoding("utf-8");
response.setHeader(CommonConstants.CONTENT_DISPOSITION, CommonConstants.ATTACHMENT_FILENAME + URLEncoder.encode(fileName , CommonConstants.UTF8));
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,然后文件流会自动关闭
//EasyExcel.write(out, TEmpBadRecord.class).sheet("不良记录").doWrite(list);
ExcelWriter excelWriter = EasyExcel.write(out, TPersonnelRoster.class).build();
int index = 0;
if (count > CommonConstants.ZERO_INT){
for (int i = 0; i <= count; ) {
// 获取实际记录
searchVo.setLimitStart(i);
searchVo.setLimitEnd(CommonConstants.EXCEL_EXPORT_LIMIT);
list = noPageDiy(searchVo);
if (Common.isNotNull(list)){
ExcelUtil<TPersonnelRoster> util = new ExcelUtil<>(TPersonnelRoster.class);
for (TPersonnelRoster vo:list){
util.convertEntity(vo,null,null,null);
}
}
if (Common.isNotNull(list)){
WriteSheet writeSheet = EasyExcel.writerSheet(""+index).build();
excelWriter.write(list,writeSheet);
index++;
}
i = i + CommonConstants.EXCEL_EXPORT_LIMIT;
if (Common.isNotNull(list)){
list.clear();
}
}
}else {
WriteSheet writeSheet = EasyExcel.writerSheet(""+index).build();
excelWriter.write(list,writeSheet);
}
if (Common.isNotNull(list)){
list.clear();
}
out.flush();
excelWriter.finish();
}catch (Exception e){
log.error("执行异常" ,e);
}finally {
try {
if (null != out) {
out.close();
}
} catch (IOException e) {
log.error("执行异常", e);
}
}
}
@Override
public List<TPersonnelRoster> noPageDiy(TPersonnelRosterSearchVo searchVo) {
LambdaQueryWrapper<TPersonnelRoster> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)){
wrapper.in(TPersonnelRoster::getId,idList);
}
if (searchVo.getLimitStart() >= 0 && searchVo.getLimitEnd() > 0){
wrapper.last(" limit "+ searchVo.getLimitStart() +","+ searchVo.getLimitEnd());
}
wrapper.orderByDesc(BaseEntity::getCreateTime);
return baseMapper.selectList(wrapper);
}
private Long noPageCountDiy(TPersonnelRosterSearchVo searchVo) {
LambdaQueryWrapper<TPersonnelRoster> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)){
wrapper.in(TPersonnelRoster::getId,idList);
}
return baseMapper.selectCount(wrapper);
}
private LambdaQueryWrapper buildQueryWrapper(TPersonnelRosterSearchVo entity){
LambdaQueryWrapper<TPersonnelRoster> wrapper = Wrappers.lambdaQuery();
if (ArrayUtil.isNotEmpty(entity.getCreateTimes())) {
wrapper.ge(TPersonnelRoster::getCreateTime, entity.getCreateTimes()[0])
.le(TPersonnelRoster::getCreateTime,
entity.getCreateTimes()[1]);
}
if (Common.isNotNull(entity.getCreateName())){
wrapper.eq(TPersonnelRoster::getCreateName,entity.getCreateName());
}
return wrapper;
}
}
package com.yifu.cloud.plus.v1.yifu.common.dapr.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @Author fxj
* @Date 2022/7/4
* @Description
* @Version 1.0
*/
@Data
@Component
@PropertySource("classpath:daprConfig.properties")
@ConfigurationProperties(value = "dapr.msg", ignoreInvalidFields = false)
public class DaprMsgProperties {
/*
* @author fxj
* @date 14:34
* @Description dapr sidercar url 如:http://localhost:3005/v1.0/invoke/
**/
String appUrl;
/*
* @author fxj
* @date 14:35
* @decription app_id 如:"yifu_upms_sider"
**/
String appId;
String appPort;
String httpPort;
String grpcPort;
String metricsPort;
}
dapr.upms.appUrl=http://127.0.0.1:3500/v1.0/invoke/
dapr.upms.appUrl=http://yifu-upms.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
dapr.upms.appId=yifu-upms
dapr.check.appUrl=http://127.0.0.1:3500/v1.0/invoke/
#\u6D4B\u8BD5\u73AF\u5883
#dapr.check.appUrl=http://yifu-check.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
#\u672C\u5730
dapr.check.appUrl=http://yifu-check.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
dapr.check.appId=yifu-check
#\u751F\u4EA7
dapr.archives.appUrl=http://127.0.0.1:3500/v1.0/invoke/
dapr.archives.appId=yifu-archives
#\u751F\u4EA7
dapr.social.appUrl=http://127.0.0.1:3500/v1.0/invoke/
dapr.social.appId=yifu-social
#\u672C\u5730
dapr.archives.appUrl=http://yifu-archives.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
dapr.archives.appId=yifu-archives
#\u751F\u4EA7
dapr.salary.appUrl=http://127.0.0.1:3500/v1.0/invoke/
dapr.salary.appId=yifu-salary
#\u751F\u4EA7
dapr.insurances.appUrl=http://127.0.0.1:3500/v1.0/invoke/
dapr.insurances.appId=yifu-insurances
dapr.social.appUrl=http://yifu-social.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
dapr.social.appId=yifu-social
#\u6D4B\u8BD5\u73AF\u5883-B\u7AEF\u670D\u52A1
dapr.business.appUrl=http://127.0.0.1:3500/v1.0/invoke/
dapr.business.appUrl=http://yifu-business.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
dapr.business.appId=yifu-business
#\u6D4B\u8BD5\u73AF\u5883-\u6D88\u606F\u63D0\u9192\u670D\u52A1
dapr.msg.appUrl=http://yifu-msg.qas-mvp.svc.cluster.local:3500/v1.0/invoke/
dapr.msg.appId=yifu-msg
\ No newline at end of file
......@@ -28,7 +28,7 @@ seata:
enable-degrade: false # 降级开关
disable-global-transaction: false # 禁用全局事务(默认false)
grouplist:
default: 192.168.0.153:33091
default: 192.168.1.65:33091
transport:
shutdown:
wait: 3
......
package com.yifu.cloud.plus.v1.job.compont;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants;
import com.yifu.cloud.plus.v1.yifu.common.dapr.config.DaprMsgProperties;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.HttpDaprUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Author fxj
* @Description 定時任務--定时生成 超时提醒
* @Date 19:57 2023/5/30
* @Param
* @return
**/
@Component(value = "msgTask")
@Slf4j
@EnableConfigurationProperties(DaprMsgProperties.class)
public class MsgTask {
@Autowired
private DaprMsgProperties daprMsgProperties;
/**
* @Author fxj
* @Description 每29分钟刷新 超时待办提醒
* @Date 20:01 2023/5/30
* @Param
* @return
**/
public void createOderOverTimeMsg() {
log.info("-------------每29分钟刷新 超时待办提醒-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprMsgProperties.getAppUrl(), daprMsgProperties.getAppId(),
"/msg/inner/updateOverTimeMsg", "", Object.class,
SecurityConstants.FROM_IN);
log.info("-------------每29分钟刷新 超时待办提醒定时任务结束------------");
}
}
\ No newline at end of file
......@@ -127,5 +127,18 @@ public class SalaryTask {
log.info("------------定时生成本期申报-定时任务结束------------");
}
/**
* @Author hgw
* @Description 前12月平均工资(MVP-TDC接口)
* @Date 2023-6-19 16:31:32
* @Param
* @return
**/
public void doCreateAverageSalary() {
log.info("------------定时生成【前12月平均工资】-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprSalarylProperties.getAppUrl(),daprSalarylProperties.getAppId(),"/taveragesalary/inner/doCreateAverageSalary","", Object.class, SecurityConstants.FROM_IN);
log.info("------------定时生成【前12月平均工资】-定时任务结束------------");
}
}
\ No newline at end of file
......@@ -22,21 +22,20 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.time.LocalDateTime;
/**
* @author fxj
* @date 2023-06-01 10:41:25
*/
@Data
@TableName("msg_info")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "EKP 消息提醒")
public class MsgInfo extends BaseEntity {
public class MsgInfo {
/**
* id
......@@ -46,20 +45,20 @@ public class MsgInfo extends BaseEntity {
@Schema(description = "id")
private String id;
/**
* orderId
* 订单号
*/
@ExcelAttribute(name = "orderId", maxLength = 50)
@ExcelAttribute(name = "订单号", maxLength = 50)
@Length(max = 50, message = "orderId不能超过50个字符")
@ExcelProperty("orderId")
@Schema(description = "orderId")
@ExcelProperty("订单号")
@Schema(description = "订单号")
private String orderId;
/**
* 订单号
* URL
*/
@ExcelAttribute(name = "订单号", maxLength = 200)
@Length(max = 200, message = "订单号不能超过200个字符")
@ExcelProperty("订单号")
@Schema(description = "订单号")
@ExcelAttribute(name = "URL", maxLength = 200)
@Length(max = 200, message = "URL不能超过200个字符")
@ExcelProperty("URL")
@Schema(description = "URL")
private String url;
/**
* 提交人
......@@ -85,7 +84,7 @@ public class MsgInfo extends BaseEntity {
@Length(max = 1, message = "0 未阅 1 已阅不能超过1个字符")
@ExcelProperty("0 未阅 1 已阅")
@Schema(description = "0 未阅 1 已阅")
private String read;
private String readStatus;
/**
* 提醒人
*/
......@@ -95,4 +94,14 @@ public class MsgInfo extends BaseEntity {
@Schema(description = "提醒人")
private String alertUser;
private LocalDateTime createTime;
/**
* 项目名称
*/
@ExcelAttribute(name = "项目名称", maxLength = 50)
@Length(max = 50, message = "项目名称不能超过1个字符")
@ExcelProperty("项目名称")
@Schema(description = "项目名称")
private String domainName;
}
......@@ -10,13 +10,9 @@ import org.springframework.stereotype.Component;
* @Description
* @Version 1.0
*/
@Component
@PropertySource("classpath:application.yml")
@ConfigurationProperties(value = "ekp", ignoreInvalidFields = false)
public interface MesConstants {
/**
* 項目订单URL
**/
String orderUrl ="";
String orderUrl ="http://ekp.wanxinwork.com/sys/modeling/main/modelingAppView.do?method=modelView&listviewId=185943766d6e9ff50d8fea1414eaf460&fdId=";
}
......@@ -86,7 +86,7 @@ public class MsgInfoController {
@Operation(summary = "每29分钟刷新 超时待办提醒", description = "每29分钟刷新 超时待办提醒")
@Inner
@PostMapping("/inner/updateOverTimeMsg")
public void everyMonthUpdateSalaryStatus() {
public void updateOverTimeMsg() {
msgInfoService.updateOverTimeMsg();
}
}
......@@ -16,6 +16,7 @@
*/
package com.yifu.cloud.plus.v1.msg.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -30,9 +31,14 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*
......@@ -82,7 +88,9 @@ public class MsgInfoServiceImpl extends ServiceImpl<MsgInfoMapper, MsgInfo> impl
if (Common.isNotNull(save)){
save.setCreateTime(LocalDateTime.now());
save.setUrl(MesConstants.orderUrl+vo.getOrderId());
save.setAlertUser(vo.getAlertUser().replace("\"",""));
baseMapper.insert(save);
log.error(JSON.toJSONString(save));
}
}
// 变更提醒
......@@ -92,7 +100,9 @@ public class MsgInfoServiceImpl extends ServiceImpl<MsgInfoMapper, MsgInfo> impl
save.setCreateTime(LocalDateTime.now());
save.setUrl(MesConstants.orderUrl+save.getOrderId());
save.setAlertType(CommonConstants.TWO_STRING);
save.setAlertUser(vo.getAlertUser().replace("\"",""));
baseMapper.insert(save);
log.error(JSON.toJSONString(save));
}
}
}
......@@ -108,18 +118,55 @@ public class MsgInfoServiceImpl extends ServiceImpl<MsgInfoMapper, MsgInfo> impl
* @Param
* @return
**/
@Transactional
@Override
public void updateOverTimeMsg() {
// 1. 删除未读的超时,如果有继续生成
baseMapper.delete(Wrappers.<MsgInfo>query().lambda()
.eq(MsgInfo::getReadStatus,CommonConstants.ZERO_STRING)
.eq(MsgInfo::getAlertType,CommonConstants.ONE_STRING));
List<MsgInfo> temps = baseMapper.selectList(Wrappers.<MsgInfo>query().lambda()
.eq(MsgInfo::getAlertType,CommonConstants.ONE_STRING)
.eq(MsgInfo::getReadStatus,CommonConstants.ONE_STRING));
Map<String,MsgInfo> tempMap = new HashMap<>();
if (Common.isNotNull(temps)){
for (MsgInfo msg:temps){
tempMap.put(msg.getOrderNo(),msg);
}
}
List<MsgInfo> msgInfos = baseMapper.getMsgByTask();
List<MsgInfo> saves = new ArrayList<>();
if (Common.isNotNull(msgInfos)){
//1.先删除
baseMapper.delete(Wrappers.<MsgInfo>query().lambda().eq(MsgInfo::getAlertType,CommonConstants.ONE_STRING));
//2. 重新生成
MsgInfo temp;
for (MsgInfo ms:msgInfos){
temp = tempMap.get(ms.getOrderNo());
if (Common.isNotNull(temp)){
tempMap.remove(ms.getOrderNo());
continue;
}
ms.setCreateTime(LocalDateTime.now());
ms.setUrl(MesConstants.orderUrl+ms.getOrderId());
saves.add(ms);
}
if (Common.isNotNull(tempMap)){
this.removeByIds(tempMap.values());
}
if (Common.isNotNull(saves)){
this.saveBatch(saves);
// 发给李鑫
for (MsgInfo sv:saves){
sv.setId(null);
sv.setAlertUser("lixin");
}
this.saveBatch(saves);
// 发给高叶卉
for (MsgInfo sv:saves){
sv.setId(null);
sv.setAlertUser("gaoyh");
}
this.saveBatch(saves);
}
this.saveBatch(msgInfos);
}
}
}
......@@ -26,6 +26,7 @@ mybatis-plus:
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
spring:
application:
......@@ -62,7 +63,4 @@ springdoc:
#分组名
- group: mail
#按包路径匹配
packagesToScan: com.yifu.cloud.plus.v1.msg.controller
ekp:
orderUrl: http://36.7.147.19:28080/sys/modeling/main/modelingAppView.do?method=modelView&listviewId=185943766d6e9ff50d8fea1414eaf460&fdId=
\ No newline at end of file
packagesToScan: com.yifu.cloud.plus.v1.msg.controller
\ No newline at end of file
......@@ -30,8 +30,9 @@
<result property="orderNo" column="ORDER_NO"/>
<result property="alertType" column="ALERT_TYPE"/>
<result property="createTime" column="CREATE_TIME"/>
<result property="read" column="READ"/>
<result property="readStatus" column="READ_STATUS"/>
<result property="alertUser" column="ALERT_USER"/>
<result property="domainName" column="DOMAIN_NAME"/>
</resultMap>
<sql id="Base_Column_List">
a.ID,
......@@ -40,8 +41,9 @@
a.ORDER_NO,
a.ALERT_TYPE,
a.CREATE_TIME,
a.READ,
a.ALERT_USER
a.READ_STATUS,
a.ALERT_USER,
a.DOMAIN_NAME
</sql>
<sql id="msgInfo_where">
<if test="msgInfo != null">
......@@ -63,8 +65,8 @@
<if test="msgInfo.createTime != null">
AND a.CREATE_TIME = #{msgInfo.createTime}
</if>
<if test="msgInfo.read != null and msgInfo.read.trim() != ''">
AND a.READ = #{msgInfo.read}
<if test="msgInfo.readStatus != null and msgInfo.readStatus.trim() != ''">
AND a.READ_STATUS = #{msgInfo.readStatus}
</if>
<if test="msgInfo.alertUser != null and msgInfo.alertUser.trim() != ''">
AND a.ALERT_USER = #{msgInfo.alertUser}
......@@ -93,31 +95,38 @@
<select id="getMsgByOrderId" resultMap="msgInfoMap">
SELECT
p.fd_name alertUser,
a.fd_3ac901c5184274 orderNo,
a.fd_id orderId,
'0' as alertType
a.fd_3ac901ba3b9d3e domain_name,
p.fd_name ALERT_USER,
a.fd_3ac901c5184274 ORDER_NO,
a.fd_id ORDER_ID,
'0' as ALERT_TYPE
FROM
ekp_ea33075576149bb8a4f5 a
LEFT JOIN sys_org_element p on a.fd_3b0aff6781fa86 = p.fd_id
WHERE
a.ORDER_ID = #{orderId} limit 1
a.fd_id = #{orderId} limit 1
</select>
<!-- 加急(2-3小时)|1 紧急(3-5小时)|4 常规(5-8小时)|7 -->
<select id="getMsgByTask" resultMap="msgInfoMap">
select
<!-- 加急(2-3小时)|1 紧急(3-5小时)|4 常规(5-8小时)|7 -->
o.fd_name alertUser,
b1.fd_3ac901c5184274 orderNo,
b1.fd_id orderId,
'1' as alertType
FROM lbpm_workitem a
LEFT JOIN lbpm_node e on e.fd_id= a.fd_node_id
LEFT JOIN lbpm_process p on p.fd_id=e.fd_process_id
LEFT JOIN ekp_ea33075576149bb8a4f5 b1 on p.fd_model_id=b1.fd_id
LEFT JOIN sys_org_element o on o.fd_id=fd_expected_id
where
e.fd_fact_node_id='N5' and b1.fd_id is not null;
and DATE_ADD(NOW(),INTERVAL 30 MINUTE) > IF(b1.fd_3b779ba2168eea=1,DATE_ADD(a.fd_start_date,INTERVAL 3 HOUR),IF(b1.fd_3b779ba2168eea=4,DATE_ADD(a.fd_start_date,INTERVAL 5 HOUR),DATE_ADD(a.fd_start_date,INTERVAL 8 HOUR)))
SELECT * from (
SELECT
b1.fd_3ac901ba3b9d3e domain_name,
o.fd_no ALERT_USER,
b1.fd_3ac901c5184274 ORDER_NO,
b1.fd_id ORDER_ID,
'1' AS ALERT_TYPE,
DATE_ADD(NOW(), INTERVAL 30 MINUTE) as 'date1',
IF(b1.fd_3b779ba2168eea = 1,DATE_ADD(a.fd_start_date,INTERVAL 3 HOUR),IF(b1.fd_3b779ba2168eea = 4,DATE_ADD(a.fd_start_date,INTERVAL 5 HOUR),DATE_ADD(a.fd_start_date,INTERVAL 8 HOUR))) as 'date2'
FROM
lbpm_workitem a
LEFT JOIN lbpm_node e ON e.fd_id = a.fd_node_id
LEFT JOIN lbpm_process p ON p.fd_id = e.fd_process_id
LEFT JOIN ekp_ea33075576149bb8a4f5 b1 ON p.fd_model_id = b1.fd_id
LEFT JOIN sys_org_element o ON o.fd_id = fd_expected_id
WHERE
e.fd_fact_node_id = 'N5'
AND b1.fd_id IS NOT NULL
) x
where x.date1 > date2
</select>
</mapper>
package com.yifu.cloud.plus.v1.yifu.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
@Data
public class OrderAttVo implements Serializable {
private static final long serialVersionUID = 6620652346415180825L;
/**
* 订单编号
*/
@Schema(description = "订单编号")
private String orderNo;
/**
* 订标识
*/
@Schema(description = "唯一标识")
private String file1;
/**
* 附件
*/
@Schema(description = "附件")
private MultipartFile[] file;
}
......@@ -3,13 +3,17 @@ package com.yifu.cloud.plus.v1.yifu.order.controller;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.order.service.TOrderService;
import com.yifu.cloud.plus.v1.yifu.order.vo.OrderAddVO;
import com.yifu.cloud.plus.v1.yifu.order.vo.OrderAttVo;
import com.yifu.cloud.plus.v1.yifu.order.vo.OrderReplyAddVO;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
......@@ -23,6 +27,7 @@ import java.io.IOException;
@RequiredArgsConstructor
@RequestMapping("/ekp/order")
@Tag(name = "接收ekp订单相关")
@Slf4j
public class EkpOrderController {
@Resource
private TOrderService tOrderService;
......@@ -38,9 +43,27 @@ public class EkpOrderController {
@Schema(description = "接收处理ekp订单")
@PostMapping(value = "/receiveOrder")
public R receiveOrder(OrderAddVO vo) throws IOException {
log.error("vo.getCreateTime()111="+vo.getCreateTime());
log.error("vo.getCreateTime()222="+vo.getDeptNo());
log.error("vo.getCreateTime()333="+vo.getOrderNo());
return tOrderService.receiveOrder(vo);
}
/**
* 接收处理ekp
*
* @author licancan
* @param vo
* @return {@link R}
* @throws IOException
*/
@Schema(description = "接收处理ekp附件")
@PostMapping(value = "/receiveOrderNew")
public R receiveOrder(OrderAttVo vo) throws IOException {
return tOrderService.receiveOrderNew(vo);
}
/**
* 接收处理ekp订单回复
*
......
......@@ -99,6 +99,18 @@ public interface TOrderService extends IService<TOrder> {
*/
R receiveOrder(OrderAddVO vo) throws IOException;
/**
* 接收处理ekp附件
*
* @author licancan
* @param vo
* @return {@link R}
* @throws IOException
*/
R receiveOrderNew(OrderAttVo vo ) throws IOException;
/**
* 接收处理ekp订单回复
*
......
package com.yifu.cloud.plus.v1.yifu.salary.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 前12月平均工资(MVP-TDC接口)
* 保留上月与本月,删除上上月数据,用以比对差异部分,推送到TDC
*
* @author hgw
* @date 2023-6-19 15:54:50
*/
@Getter
@Setter
@TableName("t_average_salary")
@Tag(name = "前12月平均工资")
public class TAverageSalary implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty(value = "id")
private String id;
/**
* 身份证号
*/
@ExcelAttribute(name = "身份证号", maxLength = 25)
@Length(max = 25, message = "身份证号不能超过25个字符")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("身份证号")
private String empIdcard;
/**
* 应发薪酬(劳务费、稿酬)
*/
@ExcelAttribute(name = "应发薪酬")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("应发薪酬")
private BigDecimal averageSalary;
/**
* 结算月
*/
@ExcelAttribute(name = "生成月", isNotEmpty = true, errorInfo = "生成月不能为空", maxLength = 6)
@NotBlank(message = "生成月不能为空")
@Length(max = 6, message = "生成月不能超过20个字符")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("生成月")
private String createMonth;
}
package com.yifu.cloud.plus.v1.yifu.salary.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 前12月平均工资(MVP-TDC接口)
* 保留上月与本月,删除上上月数据,用以比对差异部分,推送到TDC
*
* @author hgw
* @date 2023-6-19 15:54:50
*/
@Data
public class TAverageSalaryVo implements Serializable {
/**
* 身份证号
*/
@ExcelAttribute(name = "身份证号", maxLength = 25)
@Length(max = 25, message = "身份证号不能超过25个字符")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("身份证号")
private String empIdcard;
/**
* 应发薪酬(劳务费、稿酬)
*/
@ExcelAttribute(name = "应发薪酬")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("应发薪酬")
private BigDecimal averageSalary;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.salary.controller;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ResultConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.redis.RedisDistributedLock;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import com.yifu.cloud.plus.v1.yifu.salary.service.TAverageSalaryService;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TAverageSalaryVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 前12月平均工资(MVP-TDC接口)
*
* @author hgw
* @date 2023-6-19 16:27:44
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/taveragesalary")
@Tag(name = "前12月平均工资(MVP-TDC接口)")
public class TAverageSalaryController {
private final TAverageSalaryService tAverageSalaryService;
/**
* @Description: 定时任务-前12月平均工资
* @Author: hgw
* @Date: 2023-6-19 16:29:50
* @return: com.yifu.cloud.v1.common.core.util.R<java.lang.String>
**/
@Inner
@Operation(description = "定时任务-前12月平均工资")
@PostMapping("/inner/doCreateAverageSalary")
public void doCreateAverageSalary() {
tAverageSalaryService.createAverageSalary();
}
/**
* @Author fxj
* @Description 获取-前12月平均工资数据
* @Date 10:20 2023/6/20
* @Param
* @return
**/
@Operation(description = "获取-前12月平均工资数据")
@GetMapping("/getAverageSalary")
public R<List<TAverageSalaryVo>> getAverageSalary(String idNum) {
// 获取redis分布式事务锁
String key = CacheConstants.PAYMENT_DISPATCH_BATCH_ADD_IMPORT + CommonConstants.DOWN_LINE_STRING + "getAverageSalary";
String requestId;
try {
requestId = RedisDistributedLock.getLock(key,"10");
} catch (Exception e) {
throw new RuntimeException(ResultConstants.NO_GETLOCK_DATA+CommonConstants.DOWN_LINE_STRING+e.getMessage());
}
try {
if (Common.isNotNull(requestId)) {
//主动释放锁
return tAverageSalaryService.getAverageSalary(idNum);
} else {
return R.failed(ResultConstants.NO_GETLOCK_DATA);
}
}finally {
//主动释放锁
RedisDistributedLock.unlock(key, requestId);
}
}
}
package com.yifu.cloud.plus.v1.yifu.salary.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TAverageSalary;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TAverageSalaryVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 前12月平均工资(MVP-TDC接口)
*
* @author hgw
* @date 2023-6-19 16:24:41
*/
@Mapper
public interface TAverageSalaryMapper extends BaseMapper<TAverageSalary> {
/**
* 删除多余的数据
*
* @return
*/
int deleteByCreateMonth();
/**
* @param
* @Description: 新增新数据
* @Author: hgw
* @Date: 2023/6/19 16:10
* @return: int
**/
int insertAverageSalary();
/**
* @return
* @Author fxj
* @Description 获取-前12月平均工资数据 取值增量
* @Date 10:26 2023/6/20
* @Param
**/
List<TAverageSalaryVo> getAverageSalary(@Param("idNum") List<String> idNum);
}
package com.yifu.cloud.plus.v1.yifu.salary.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TAverageSalary;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TAverageSalaryVo;
import java.util.List;
/**
* @Author hgw
* @Description 前12月平均工资(MVP-TDC接口)
* @Date 2023-6-19 16:25:54
**/
public interface TAverageSalaryService extends IService<TAverageSalary> {
/**
* @Description: 删除本月与上上月数据,生成本月数据
* @Author: hgw
* @Date: 2023/6/19 16:26
* @return: void
**/
void createAverageSalary();
R<List<TAverageSalaryVo>> getAverageSalary(String idNum);
}
package com.yifu.cloud.plus.v1.yifu.salary.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TAverageSalary;
import com.yifu.cloud.plus.v1.yifu.salary.mapper.TAverageSalaryMapper;
import com.yifu.cloud.plus.v1.yifu.salary.service.TAverageSalaryService;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TAverageSalaryVo;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author hgw
* @Description 前12月平均工资(MVP-TDC接口)
* @Date 2023-6-19 16:25:16
**/
@Service("tAverageSalaryService")
public class TAverageSalaryServiceImpl extends ServiceImpl<TAverageSalaryMapper, TAverageSalary> implements TAverageSalaryService {
/**
* @Description: 删除本月与上上月数据,生成本月数据
* @Author: hgw
* @Date: 2023/6/19 16:32
* @return: void
**/
@Override
public void createAverageSalary() {
baseMapper.deleteByCreateMonth();
baseMapper.insertAverageSalary();
}
/**
* @return
* @Author fxj
* @Description 获取-前12月平均工资数据
* @Date 10:25 2023/6/20
* @Param
**/
@Override
public R<List<TAverageSalaryVo>> getAverageSalary(String idNum) {
return R.ok(baseMapper.getAverageSalary(Common.getList(idNum)), CommonConstants.RESULT_DATA_SUCESS);
}
}
......@@ -39,6 +39,7 @@ security:
- /v3/api-docs
- /actuator/**
- /swagger-ui/**
- /taveragesalary/getAverageSalary
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.salary.mapper.TAverageSalaryMapper">
<resultMap id="tAverageSalaryMap" type="com.yifu.cloud.plus.v1.yifu.salary.entity.TAverageSalary">
<id property="id" column="ID"/>
<result property="empIdcard" column="EMP_IDCARD"/>
<result property="averageSalary" column="AVERAGE_SALARY"/>
<result property="createMonth" column="CREATE_MONTH"/>
</resultMap>
<resultMap id="tAverageSalaryVoMap" type="com.yifu.cloud.plus.v1.yifu.salary.vo.TAverageSalaryVo">
<result property="empIdcard" column="EMP_IDCARD"/>
<result property="averageSalary" column="AVERAGE_SALARY"/>
</resultMap>
<!-- 删除不需要的数据 -->
<delete id="deleteByCreateMonth">
delete
from t_average_salary
where CREATE_MONTH in (
DATE_FORMAT(now(), '%Y%m'), DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 2 MONTH), '%Y%m')
)
</delete>
<!-- 生成需要的数据 -->
<insert id="insertAverageSalary">
insert into t_average_salary
select CONCAT(DATE_FORMAT(now(), '%Y%m-'), a.ID) ID
, a.EMP_IDCARD
, round(sum(a.RELAY_SALARY) / ifnull(count(DISTINCT a.SALARY_MONTH), 1), 2) AVERAGE_SALARY
, DATE_FORMAT(now(), '%Y%m') CREATE_MONTH
from t_salary_account a
where a.SALARY_MONTH >= date_format(DATE_SUB(NOW(), INTERVAL 1 YEAR), '%Y%m')
GROUP BY a.EMP_IDCARD
</insert>
<select id="getAverageSalary" resultMap="tAverageSalaryVoMap">
select x.* from
(select a.EMP_IDCARD,a.AVERAGE_SALARY from view_average_cur_month a) x
LEFT JOIN
(select a.EMP_IDCARD,a.AVERAGE_SALARY from view_average_last_month a) y
on x.EMP_IDCARD=y.EMP_IDCARD
where (x.AVERAGE_SALARY <![CDATA[ <> ]]> IFNULL(y.AVERAGE_SALARY,-1))
<if test="idNum != null and idNum.size > 0">
AND x.EMP_IDCARD in
<foreach item="item" index="index" collection="idNum" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment