!246 排班优化加上一键复制功能,营养知识列表、视频列表加上创建时间

Merge pull request !246 from 德仔/xzj
This commit is contained in:
德仔 2021-05-14 21:01:42 +08:00 committed by Gitee
commit 057a0f51d6
13 changed files with 242 additions and 14 deletions

View File

@ -2,6 +2,8 @@ package com.stdiet.web.controller.custom;
import java.util.Date;
import java.util.List;
import com.stdiet.common.utils.DateUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -84,7 +86,12 @@ public class SysLiveSchedulController extends BaseController
//下播,补全下播时间
if (sysLiveSchedul.getLiveStatus() != null && sysLiveSchedul.getLiveStatus().longValue() == 2
&& sysLiveSchedul.getLiveEndTime() == null){
sysLiveSchedul.setLiveEndTime(new Date());
Date now = new Date();
if(!DateUtils.isSameDay(now,sysLiveSchedul.getLiveStartTime())){
sysLiveSchedul.setLiveEndTime(DateUtils.getLastMinuteDate(sysLiveSchedul.getLiveStartTime()));
}else{
sysLiveSchedul.setLiveEndTime(now);
}
}
int row = sysLiveSchedulService.insertSysLiveSchedul(sysLiveSchedul);
if(row > 0){
@ -96,7 +103,11 @@ public class SysLiveSchedulController extends BaseController
if(lastLiveSchedul != null && lastLiveSchedul.getLiveStatus().longValue() == 1){
lastLiveSchedul.setLiveStatus(2L);
if(lastLiveSchedul.getLiveEndTime() == null){
lastLiveSchedul.setLiveEndTime(sysLiveSchedul.getLiveStartTime());
if(!DateUtils.isSameDay(lastLiveSchedul.getLiveStartTime(),sysLiveSchedul.getLiveStartTime())){
lastLiveSchedul.setLiveEndTime(DateUtils.getLastMinuteDate(lastLiveSchedul.getLiveStartTime()));
}else{
lastLiveSchedul.setLiveEndTime(sysLiveSchedul.getLiveStartTime());
}
}
row = sysLiveSchedulService.updateSysLiveSchedul(lastLiveSchedul);
}
@ -121,7 +132,12 @@ public class SysLiveSchedulController extends BaseController
//下播,补全下播时间
if (sysLiveSchedul.getLiveStatus() != null && sysLiveSchedul.getLiveStatus().longValue() == 2
&& sysLiveSchedul.getLiveEndTime() == null){
sysLiveSchedul.setLiveEndTime(new Date());
Date now = new Date();
if(!DateUtils.isSameDay(now,sysLiveSchedul.getLiveStartTime())){
sysLiveSchedul.setLiveEndTime(DateUtils.getLastMinuteDate(sysLiveSchedul.getLiveStartTime()));
}else{
sysLiveSchedul.setLiveEndTime(now);
}
}
int row = sysLiveSchedulService.updateSysLiveSchedulById(sysLiveSchedul);
if(row > 0){
@ -133,7 +149,11 @@ public class SysLiveSchedulController extends BaseController
if(lastLiveSchedul != null && lastLiveSchedul.getLiveStatus().longValue() == 1){
lastLiveSchedul.setLiveStatus(2L);
if(lastLiveSchedul.getLiveEndTime() == null){
lastLiveSchedul.setLiveEndTime(sysLiveSchedul.getLiveStartTime());
if(!DateUtils.isSameDay(lastLiveSchedul.getLiveStartTime(),sysLiveSchedul.getLiveStartTime())){
lastLiveSchedul.setLiveEndTime(DateUtils.getLastMinuteDate(lastLiveSchedul.getLiveStartTime()));
}else{
lastLiveSchedul.setLiveEndTime(sysLiveSchedul.getLiveStartTime());
}
}
row = sysLiveSchedulService.updateSysLiveSchedul(lastLiveSchedul);
}
@ -178,7 +198,11 @@ public class SysLiveSchedulController extends BaseController
if(lastLiveSchedul != null && lastLiveSchedul.getLiveStatus().longValue() == 1){
lastLiveSchedul.setLiveStatus(2L);
if(lastLiveSchedul.getLiveEndTime() == null){
lastLiveSchedul.setLiveEndTime(sysLiveSchedul.getLiveStartTime());
if(!DateUtils.isSameDay(lastLiveSchedul.getLiveStartTime(),sysLiveSchedul.getLiveStartTime())){
lastLiveSchedul.setLiveEndTime(DateUtils.getLastMinuteDate(lastLiveSchedul.getLiveStartTime()));
}else{
lastLiveSchedul.setLiveEndTime(sysLiveSchedul.getLiveStartTime());
}
}
row = sysLiveSchedulService.updateSysLiveSchedul(lastLiveSchedul);
}
@ -188,10 +212,25 @@ public class SysLiveSchedulController extends BaseController
}else{
SysLiveSchedul newLiveSchedul = sysLiveSchedulService.selectSysLiveSchedulById(sysLiveSchedul.getId());
if(newLiveSchedul != null && newLiveSchedul.getLiveEndTime() == null){
sysLiveSchedul.setLiveEndTime(new Date());
Date now = new Date();
if(!DateUtils.isSameDay(now,newLiveSchedul.getLiveStartTime())){
sysLiveSchedul.setLiveEndTime(DateUtils.getLastMinuteDate(newLiveSchedul.getLiveStartTime()));
}else{
sysLiveSchedul.setLiveEndTime(now);
}
}
row = sysLiveSchedulService.updateSysLiveSchedul(sysLiveSchedul);
}
return toAjax(row);
}
/**
* 复制上次直播记录
*/
@PreAuthorize("@ss.hasPermi('custom:liveSchedul:add')")
@Log(title = "复制上次直播记录", businessType = BusinessType.INSERT)
@GetMapping(value = "/copyLastTimeLiveSchedul")
public AjaxResult copyLastTimeLiveSchedul(){
return sysLiveSchedulService.copyLastTimeLiveSchedul();
}
}

View File

@ -169,7 +169,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
* LocalDateTime对象转Date
* */
public static Date localDateTimeToDate(LocalDateTime localDateTime){
ZonedDateTime zdt = LocalDateTime.now().atZone(ZoneId.systemDefault());
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
@ -193,8 +193,42 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
return date.format(fmt);
}
public static String localDateTimeToString(LocalDateTime date, String pattern){
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
return date.format(fmt);
}
public static LocalDate stringToLocalDate(String date, String pattern){
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
return LocalDate.parse(date, fmt);
}
/**
* 获取当前Date型日期
*
* @return Date() 当前日期
*/
public static Date dateToDate(Date date)
{
return parseDate(DateFormatUtils.format(date, YYYY_MM_DD));
}
/**
* 判断两个日期是否同一天
* @param dateOne
* @param dateTwo
* @return
*/
public static boolean isSameDay(Date dateOne, Date dateTwo){
return dateToDate(dateOne).getTime() == dateToDate(dateTwo).getTime();
}
/**
* 获取该日期的最后一秒对应时间
* @param date
* @return
*/
public static Date getLastMinuteDate(Date date){
return new Date(dateToDate(date).getTime()+(24 * 60 * 60 * 1000 - 1000));
}
}

View File

@ -26,4 +26,6 @@ public class NutritionQuestionResponse implements Serializable {
/** 小程序是否显示0不显示 1显示 */
private String showFlag;
private String createTime;
}

View File

@ -77,4 +77,17 @@ public interface SysLiveSchedulMapper
* @return
*/
public SysLiveSchedul getLastLiveSchedulById(SysLiveSchedul sysLiveSchedul);
/**
* 获取所有计划
* @param sysLiveSchedul
* @return
*/
public List<SysLiveSchedul> getAllLiveSchedulByDate(SysLiveSchedul sysLiveSchedul);
/**
* 获取最后一次直播计划
* @return
*/
public SysLiveSchedul getLastLiveSchedul();
}

View File

@ -1,6 +1,8 @@
package com.stdiet.custom.service;
import java.util.List;
import com.stdiet.common.core.domain.AjaxResult;
import com.stdiet.custom.domain.SysLiveSchedul;
/**
@ -77,4 +79,10 @@ public interface ISysLiveSchedulService
* @return
*/
public SysLiveSchedul getLastLiveSchedulById(SysLiveSchedul sysLiveSchedul);
/**
* 复制上一次直播间计划并将上次的直播计划状态全部改为未开播
* @return
*/
public AjaxResult copyLastTimeLiveSchedul();
}

View File

@ -1,7 +1,13 @@
package com.stdiet.custom.service.impl;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import com.stdiet.common.core.domain.AjaxResult;
import com.stdiet.common.utils.DateUtils;
import com.stdiet.common.utils.SecurityUtils;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -123,4 +129,53 @@ public class SysLiveSchedulServiceImpl implements ISysLiveSchedulService
public SysLiveSchedul getLastLiveSchedulById(SysLiveSchedul sysLiveSchedul){
return sysLiveSchedulMapper.getLastLiveSchedulById(sysLiveSchedul);
}
/**
* 复制上一次直播间计划并将上次的直播计划状态全部改为未开播
* @return
*/
@Override
public AjaxResult copyLastTimeLiveSchedul(){
AjaxResult result = AjaxResult.success();
//获取上一次直播时间
SysLiveSchedul lastLiveSchedul = sysLiveSchedulMapper.getLastLiveSchedul();
if(lastLiveSchedul == null){
return AjaxResult.error("不存在直播记录,无法复制");
}
Date nowDate = new Date();
LocalDate nowLocalDate = DateUtils.dateToLocalDate(nowDate);
if(DateUtils.isSameDay(lastLiveSchedul.getLiveSchedulDate(), nowDate)){
return AjaxResult.error("今日已存在直播记录,无法复制");
}
//获取上一次所有计划
List<SysLiveSchedul> list = sysLiveSchedulMapper.getAllLiveSchedulByDate(lastLiveSchedul);
if(list != null && list.size() > 0){
int row = 0;
for (SysLiveSchedul schedul : list) {
schedul.setLiveStatus(0L);
schedul.setCreateTime(new Date());
schedul.setUpdateTime(null);
schedul.setCreateBy(SecurityUtils.getLoginUser().getUser().getUserId()+"");
schedul.setUpdateBy(null);
schedul.setLiveSchedulDate(DateUtils.dateToDate(nowDate));
if(schedul.getLiveStartTime() != null) {
LocalDateTime liveStartTime = DateUtils.dateToLocalDateTime(schedul.getLiveStartTime());
schedul.setLiveStartTime(DateUtils.localDateTimeToDate(LocalDateTime.of(nowLocalDate.getYear(),nowLocalDate.getMonthValue(),nowLocalDate.getDayOfMonth(),
liveStartTime.getHour(),liveStartTime.getMinute())));
System.out.println(liveStartTime.getHour() + "-" +liveStartTime.getMinute());
}
if(schedul.getLiveEndTime() != null) {
LocalDateTime liveEndTime = DateUtils.dateToLocalDateTime(schedul.getLiveEndTime());
schedul.setLiveEndTime(DateUtils.localDateTimeToDate(LocalDateTime.of(nowLocalDate.getYear(),nowLocalDate.getMonthValue(),nowLocalDate.getDayOfMonth(),
liveEndTime.getHour(),liveEndTime.getMinute())));
System.out.println(liveEndTime.getHour() + "-" +liveEndTime.getMinute());
}
row = sysLiveSchedulMapper.insertSysLiveSchedul(schedul);
}
}else{
return AjaxResult.error("不存在直播记录,无法复制");
}
return result;
}
}

View File

@ -40,7 +40,7 @@ public class SysNutritionQuestionServiceImpl implements ISysNutritionQuestionSer
public String index_path;
//建立索引的字段名称
public static final String[] index_field_array = {"id", "title", "content", "key", "showFlag"};
public static final String[] index_field_array = {"id", "title", "content", "key", "showFlag", "createTime"};
//查询字段
public static final String[] index_select_field_array = {"title", "content", "key"};
@ -275,7 +275,8 @@ public class SysNutritionQuestionServiceImpl implements ISysNutritionQuestionSer
private NutritionQuestionResponse documentToNutritionQuestion(Document document){
NutritionQuestionResponse nutritionQuestionResponse = new NutritionQuestionResponse();
for (String fieldName : index_field_array) {
ReflectUtils.setFieldValue(nutritionQuestionResponse, fieldName, document.get(fieldName));
String value = document.get(fieldName);
ReflectUtils.setFieldValue(nutritionQuestionResponse, fieldName, StringUtils.isEmpty(value) ? "" : value);
}
return nutritionQuestionResponse;
}
@ -288,7 +289,12 @@ public class SysNutritionQuestionServiceImpl implements ISysNutritionQuestionSer
private Document nutritionQuestionToDocument(SysNutritionQuestion sysNutritionQuestion){
Document document = new Document();
for (String fieldName : index_field_array) {
TextField field = new TextField(fieldName, ReflectUtils.getFieldValue(sysNutritionQuestion, fieldName)+"", Field.Store.YES);
TextField field = null;
if("createTime".equals(fieldName)){
field = new TextField(fieldName, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,sysNutritionQuestion.getCreateTime()), Field.Store.YES);
} else{
field = new TextField(fieldName, ReflectUtils.getFieldValue(sysNutritionQuestion, fieldName)+"", Field.Store.YES);
}
if(nutritionQuestionBoostMap.containsKey(fieldName)){
field.setBoost(nutritionQuestionBoostMap.get(fieldName).floatValue());
}

View File

@ -208,6 +208,19 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setOperatorId(null);
sysOrder.setOperatorAssisId(null);
}
if(oldSysOrder.getStartTime() == null){//确保提成计算时间不为空
sysOrder.setCommissStartTime(sysOrder.getOrderTime());
}
//如果更新了开始服务时间需要判断是否需要同步提成计算时间
if (oldSysOrder.getStartTime() != null && sysOrder.getStartTime() != null
&& ChronoUnit.DAYS.between(DateUtils.dateToLocalDate(oldSysOrder.getStartTime()), DateUtils.dateToLocalDate(sysOrder.getStartTime())) != 0) {
//本月第一天
LocalDate monthStart = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
//旧的开始时间和新的开始时间都要需要大于本月第一天
if(oldSysOrder.getCommissStartTime() != null && ChronoUnit.DAYS.between(monthStart, DateUtils.dateToLocalDate(oldSysOrder.getCommissStartTime())) >= 0 && ChronoUnit.DAYS.between(monthStart, DateUtils.dateToLocalDate(sysOrder.getStartTime())) >= 0){
sysOrder.setCommissStartTime(sysOrder.getStartTime());
}
}
//更新订单
int row = sysOrderMapper.updateSysOrder(sysOrder);
// 审核后的订单才生成食谱
@ -300,7 +313,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
for (SysOrder sysOrder : orderList) {
LocalDate newStartTime = null;
//判断是否提成单拆分单中的副单体验单,定金单
if(sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) ||
if(sysOrder.getStartTime() == null || sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) ||
"2".equals(sysOrder.getOrderType()) || "1".equals(sysOrder.getOrderMoneyType())){
continue;
}
@ -310,7 +323,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
//本月第一天
LocalDate monthStart = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
//旧的开始时间和新的开始时间都要需要大于本月第一天
if(ChronoUnit.DAYS.between(monthStart, DateUtils.dateToLocalDate(sysOrder.getStartTime())) >= 0 && ChronoUnit.DAYS.between(monthStart, newStartTime) >= 0){
if(sysOrder.getCommissStartTime() != null && ChronoUnit.DAYS.between(monthStart, DateUtils.dateToLocalDate(sysOrder.getCommissStartTime())) >= 0 && ChronoUnit.DAYS.between(monthStart, newStartTime) >= 0){
sysOrder.setCommissStartTime(DateUtils.localDateToDate(newStartTime));
}
sysOrder.setStartTime(DateUtils.localDateToDate(newStartTime));

View File

@ -193,4 +193,22 @@
from sys_live_schedul
where id <![CDATA[ < ]]> #{id} and del_flag = 0 and live_room = #{liveRoom} order by live_start_time desc limit 1
</select>
<!-- 根据时间查询所有直播计划 -->
<select id="getAllLiveSchedulByDate" parameterType="SysLiveSchedul" resultMap="SysLiveSchedulResultSigle">
select
<include refid="selectSysLiveSchedulVo"/>
from sys_live_schedul where del_flag = 0 and live_schedul_date = #{liveSchedulDate}
order by live_start_time asc
</select>
<!-- 查最后一次直播计划 -->
<select id="getLastLiveSchedul" resultMap="SysLiveSchedulResultSigle">
select
<include refid="selectSysLiveSchedulVo"/>
from sys_live_schedul
where del_flag = 0 order by live_schedul_date desc limit 1
</select>
</mapper>

View File

@ -61,3 +61,14 @@ export function updateLiveStatus(data) {
params: data
})
}
// 复制上次直播记录
export function copyLastTimeLiveSchedul() {
return request({
url: '/custom/liveSchedul/copyLastTimeLiveSchedul',
method: 'get',
params: {}
})
}

View File

@ -96,6 +96,15 @@
v-hasPermi="['custom:liveSchedul:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
size="mini"
@click="copyLastTimeLiveSchedul"
v-hasPermi="['custom:liveSchedul:add']"
>一键复制上次记录</el-button>
</el-col>
<!--<el-col :span="1.5">
<el-button
type="warning"
@ -339,7 +348,7 @@
</template>
<script>
import { listLiveSchedul, getLiveSchedul, delLiveSchedul, addLiveSchedul, updateLiveSchedul, exportLiveSchedul,updateLiveStatus } from "@/api/custom/liveSchedul";
import { listLiveSchedul, getLiveSchedul, delLiveSchedul, addLiveSchedul, updateLiveSchedul, exportLiveSchedul,updateLiveStatus,copyLastTimeLiveSchedul } from "@/api/custom/liveSchedul";
import { listWxAccount } from "@/api/custom/wxAccount";
import AutoHideInfo from "@/components/AutoHideInfo";
import dayjs from "dayjs";
@ -597,6 +606,17 @@ export default {
},
wxAccountFormat(row){
return (row.wxAccountList != null && row.wxAccountList.length > 0) ? row.wxAccountList : [];
},
copyLastTimeLiveSchedul(){
copyLastTimeLiveSchedul().then(response => {
if (response.code === 200) {
this.msgSuccess("一键复制成功");
this.getList();
}else{
this.msgError(response.msg);
}
});
}
}
};

View File

@ -112,7 +112,11 @@
</el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">

View File

@ -134,6 +134,11 @@
</el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="200">
<template slot-scope="scope">
<el-button