localizer
lzq 2025-10-29 18:38:38 +08:00
parent da713ef56e
commit ff2df428fd
27 changed files with 658 additions and 99 deletions

View File

@ -18,11 +18,22 @@ import java.util.List;
@Accessors(chain = true) @Accessors(chain = true)
@Constraint @Constraint
public class AddSnConfigParam implements Constrained { public class AddSnConfigParam implements Constrained {
/**
*
*/
@NotBlank(message = "规则名称不能为空")
private String snname;
/** /**
* ; sncode * ; sncode
*/ */
@NotBlank(message = "编码名称不能为空") @NotBlank(message = "编码名称不能为空")
private String sncode; private String sncode;
/**
*
*/
@NotBlank(message = "示例不能为空")
private String example;
/** /**
* *
*/ */

View File

@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.njzscloud.common.sn.contant.PadMode; import com.njzscloud.common.sn.contant.PadMode;
import com.njzscloud.common.sn.contant.RollbackMode;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.Objects;
/** /**
* *
*/ */
@ -26,38 +30,69 @@ public class IncSnEntity {
private Long id; private Long id;
/** /**
* *
*/ */
private String code; private String code;
/** /**
* *
*/ */
private Long val; private Long val;
/** /**
* *
*/ */
private Integer step; private Integer step;
/** /**
* *
*/ */
private Long initialVal; private Long initialVal;
/** /**
* *
*/ */
private PadMode padMode; private PadMode padMode;
/** /**
* *
*/ */
private String padVal; private String padVal;
/** /**
* *
*/ */
private Integer padLen; private Integer padLen;
/**
*
*/
private Long maxVal;
/**
*
*/
private RollbackMode rollback;
/**
*
*/
private Boolean allowOverflow;
/**
*
*/
private LocalDateTime lastTime;
/**
*
*/
private String lastPici;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
IncSnEntity that = (IncSnEntity) o;
return Objects.equals(code, that.code);
}
@Override
public int hashCode() {
return Objects.hashCode(code);
}
} }

View File

@ -1,14 +1,20 @@
package com.njzscloud.common.sn; package com.njzscloud.common.sn;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.sn.contant.RollbackMode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.List; import java.util.List;
/** /**
@ -67,12 +73,128 @@ public class IncSnService extends ServiceImpl<IncSnMapper, IncSnEntity> implemen
} }
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public synchronized Long inc(String code) { public Long inc(String code, String pici) {
IncSnEntity incCodeEntity = this.getOne(Wrappers.<IncSnEntity>lambdaQuery() IncSnEntity incCodeEntity = this.getOne(Wrappers.<IncSnEntity>lambdaQuery()
.eq(IncSnEntity::getCode, code)); .eq(IncSnEntity::getCode, code));
Long val = incCodeEntity.getVal(); Assert.notNull(incCodeEntity, () -> Exceptions.exception("编码规则不存在"));
val += incCodeEntity.getStep(); long newVal = 0;
this.updateById(incCodeEntity.setVal(val));
return val; long val = incCodeEntity.getVal();
long maxVal = incCodeEntity.getMaxVal();
if (val == maxVal) {
Boolean allowOverflow = incCodeEntity.getAllowOverflow();
if (allowOverflow) {
newVal = incCodeEntity.getInitialVal();
} else {
throw Exceptions.exception("编码已到最大值,规则:{},最大值:{}", code, maxVal);
}
}
RollbackMode rollback = incCodeEntity.getRollback();
LocalDateTime now = LocalDateTime.now();
LocalDateTime lastTime = incCodeEntity.getLastTime();
switch (rollback) {
case Wu: {
newVal = val + incCodeEntity.getStep();
}
break;
case Ri: {
if (now.isBefore(lastTime)) {
throw Exceptions.exception("服务器时间回溯,无法生成编号");
}
LocalDateTime time1 = lastTime
.withHour(0).withMinute(0).withSecond(0).withNano(0); // 当天00:00:00
LocalDateTime time2 = lastTime
.withHour(23).withMinute(59).withSecond(59).withNano(999_999_999); // 当天23:59:59.999999999
if (time1.isBefore(time2)) {
newVal = incCodeEntity.getInitialVal();
} else if (time1.isEqual(time2)) {
newVal = val + incCodeEntity.getStep();
}
}
break;
case Zhou: {
if (now.isBefore(lastTime)) {
throw Exceptions.exception("服务器时间回溯,无法生成编号");
}
LocalDateTime time1 = lastTime
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
LocalDateTime time2 = lastTime
.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY))
.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999_999_999);
if (now.isBefore(time1) || now.isAfter(time2)) {
newVal = incCodeEntity.getInitialVal();
} else {
newVal = val + incCodeEntity.getStep();
}
}
break;
case Yue: {
if (now.isBefore(lastTime)) {
throw Exceptions.exception("服务器时间回溯,无法生成编号");
}
LocalDateTime time1 = lastTime
.with(TemporalAdjusters.firstDayOfMonth())
.withHour(0).withMinute(0).withSecond(0).withNano(0);
LocalDateTime time2 = lastTime
.with(TemporalAdjusters.lastDayOfMonth())
.withHour(23).withMinute(59).withSecond(59).withNano(999_999_999);
if (now.isBefore(time1) || now.isAfter(time2)) {
newVal = incCodeEntity.getInitialVal();
} else {
newVal = val + incCodeEntity.getStep();
}
}
break;
case Nian: {
if (now.isBefore(lastTime)) {
throw Exceptions.exception("服务器时间回溯,无法生成编号");
}
LocalDateTime time1 = lastTime
.with(TemporalAdjusters.firstDayOfYear())
.withHour(0).withMinute(0).withSecond(0).withNano(0);
LocalDateTime time2 = lastTime
.with(TemporalAdjusters.lastDayOfYear())
.withHour(23).withMinute(59).withSecond(59).withNano(999_999_999);
if (now.isBefore(time1) || now.isAfter(time2)) {
newVal = incCodeEntity.getInitialVal();
} else {
newVal = val + incCodeEntity.getStep();
}
}
break;
case Pi: {
Assert.notBlank(pici, () -> Exceptions.exception("批次号不能为空"));
String lastPici = incCodeEntity.getLastPici();
if (pici.equals(lastPici)) {
newVal = incCodeEntity.getInitialVal();
} else {
newVal = val + incCodeEntity.getStep();
}
}
break;
default:
throw Exceptions.exception("未知的回卷模式:{}", rollback);
}
this.updateById(new IncSnEntity().setId(incCodeEntity.getId())
.setLastTime(now)
.setLastPici(pici)
.setVal(newVal));
return newVal;
} }
} }

View File

@ -19,6 +19,20 @@ import java.util.List;
public class ModifySnConfigParam implements Constrained { public class ModifySnConfigParam implements Constrained {
private Long id; private Long id;
/**
*
*/
private String snname;
/**
*
*/
private String sncode;
/**
*
*/
private String example;
/** /**
* *
*/ */

View File

@ -0,0 +1,50 @@
package com.njzscloud.common.sn;
import com.njzscloud.common.sn.support.SectionConfig;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.util.List;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class SearchSnConfigResult {
/**
* Id
*/
private Long id;
/**
*
*/
private String snname;
/**
*
*/
private String example;
/**
*
*/
private String sncode;
/**
*
*/
private List<SectionConfig> config;
/**
*
*/
private String memo;
}

View File

@ -68,7 +68,7 @@ public class SnConfigController {
* *
*/ */
@GetMapping("/paging") @GetMapping("/paging")
public R<PageResult<SnConfigEntity>> paging(PageParam pageParam, SnConfigEntity snConfigEntity) { public R<PageResult<SearchSnConfigResult>> paging(PageParam pageParam, SnConfigEntity snConfigEntity) {
return R.success(snConfigService.paging(pageParam, snConfigEntity)); return R.success(snConfigService.paging(pageParam, snConfigEntity));
} }

View File

@ -27,7 +27,15 @@ public class SnConfigEntity {
*/ */
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.ASSIGN_ID)
private Long id; private Long id;
/**
*
*/
private String snname;
/**
*
*/
private String example;
/** /**
* *
*/ */

View File

@ -8,5 +8,4 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface SnConfigMapper extends BaseMapper<SnConfigEntity> { public interface SnConfigMapper extends BaseMapper<SnConfigEntity> {
} }

View File

@ -1,10 +1,20 @@
package com.njzscloud.common.sn; package com.njzscloud.common.sn;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.tuple.Tuple2;
import com.njzscloud.common.core.utils.GroupUtil;
import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.sn.contant.PadMode;
import com.njzscloud.common.sn.support.IncSectionConfig; import com.njzscloud.common.sn.support.IncSectionConfig;
import com.njzscloud.common.sn.support.SectionConfig; import com.njzscloud.common.sn.support.SectionConfig;
import com.njzscloud.common.sn.support.Sn; import com.njzscloud.common.sn.support.Sn;
@ -13,7 +23,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -37,51 +47,137 @@ public class SnConfigService extends ServiceImpl<SnConfigMapper, SnConfigEntity>
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void add(AddSnConfigParam addSnConfigParam) { public void add(AddSnConfigParam addSnConfigParam) {
List<SectionConfig> configs = addSnConfigParam.getConfig() String sncode = addSnConfigParam.getSncode();
.stream() boolean exists = this.exists(Wrappers.<SnConfigEntity>lambdaQuery().eq(SnConfigEntity::getSncode, sncode));
.map(SnUtil::resolve) Assert.isFalse(exists, () -> Exceptions.exception("编码配置已存在:{}", sncode));
.collect(Collectors.toList()); List<HashMap<String, Object>> configList = addSnConfigParam.getConfig();
Tuple2<List<SectionConfig>, List<IncSnEntity>> tuple2 = resolveConfig(configList);
this.save(new SnConfigEntity() this.save(new SnConfigEntity()
.setSncode(addSnConfigParam.getSncode()) .setSnname(addSnConfigParam.getSnname())
.setSncode(sncode)
.setExample(addSnConfigParam.getExample())
.setConfig(tuple2.get_0())
.setMemo(addSnConfigParam.getMemo()) .setMemo(addSnConfigParam.getMemo())
.setConfig(configs)
); );
List<IncSnEntity> collect = configs saveIncSnEntityList(tuple2.get_1());
.stream() }
.filter(it -> it.getClass() == IncSectionConfig.class)
.map(it -> { private Tuple2<List<SectionConfig>, List<IncSnEntity>> resolveConfig(List<HashMap<String, Object>> configList) {
IncSectionConfig config = (IncSectionConfig) it; Assert.notEmpty(configList, () -> Exceptions.exception("编码配置不能为空"));
return new IncSnEntity() List<SectionConfig> configs = new ArrayList<>(configList.size());
.setCode(config.getCode()) List<IncSnEntity> incSnEntityList = new LinkedList<>();
.setVal((long) config.getInitialVal()) Set<String> incSnEntityCodeList = new HashSet<>();
.setStep(config.getStep()) for (HashMap<String, Object> config : configList) {
.setInitialVal((long) config.getInitialVal()) SectionConfig sectionConfig = SnUtil.resolve(config);
.setPadMode(config.getPadMode()) if (sectionConfig instanceof IncSectionConfig) {
.setPadVal(config.getPadVal()) IncSectionConfig incSectionConfig = (IncSectionConfig) sectionConfig;
.setPadLen(config.getPadLen()); PadMode padMode = incSectionConfig.getPadMode();
}).collect(Collectors.toList()); String code = incSectionConfig.getCode();
if (collect.isEmpty()) return; Assert.isFalse(incSnEntityCodeList.contains(code), () -> Exceptions.exception("编码配置已存在:{}", code));
incSnService.saveBatch(collect); incSnEntityCodeList.add(code);
incSnEntityList.add(new IncSnEntity()
.setCode(code)
.setVal((long) incSectionConfig.getInitialVal())
.setStep(incSectionConfig.getStep())
.setInitialVal((long) incSectionConfig.getInitialVal())
.setMaxVal(padMode == PadMode.Wu ? Long.MAX_VALUE : (long) (Math.pow(10, incSectionConfig.getPadLen()) - 1))
.setPadMode(padMode)
.setPadVal(incSectionConfig.getPadVal())
.setPadLen(incSectionConfig.getPadLen())
.setRollback(incSectionConfig.getRollback())
.setAllowOverflow(incSectionConfig.getAllowOverflow()));
}
configs.add(sectionConfig);
}
return Tuple2.create(configs, incSnEntityList);
}
private void saveIncSnEntityList(List<IncSnEntity> incSnEntityList) {
if (incSnEntityList.isEmpty()) return;
List<String> incSnCodes = incSnEntityList.stream().map(IncSnEntity::getCode).collect(Collectors.toList());
boolean exists = incSnService.exists(Wrappers.<IncSnEntity>lambdaQuery().in(IncSnEntity::getCode, incSnCodes));
Assert.isFalse(exists, () -> Exceptions.exception("编码配置已存在:{}", incSnCodes));
incSnService.saveBatch(incSnEntityList);
} }
/** /**
* *
*/ */
@Transactional(rollbackFor = Exception.class)
public void modify(ModifySnConfigParam modifySnConfigParam) { public void modify(ModifySnConfigParam modifySnConfigParam) {
List<SectionConfig> configs = modifySnConfigParam.getConfig() Long id = modifySnConfigParam.getId();
.stream() SnConfigEntity oldData = this.getById(id);
.map(SnUtil::resolve) Assert.notNull(oldData, () -> Exceptions.exception("编码配置不存在"));
List<SectionConfig> oldConfig = oldData.getConfig();
List<HashMap<String, Object>> newConfig = modifySnConfigParam.getConfig();
Tuple2<List<SectionConfig>, List<IncSnEntity>> tuple2 = resolveConfig(newConfig);
List<String> oldIncSectionConfigCodeList = oldConfig.stream()
.filter(it -> it instanceof IncSectionConfig)
.map(it -> ((IncSectionConfig) it).getCode())
.collect(Collectors.toList()); .collect(Collectors.toList());
List<IncSnEntity> oldIncSnEntityList;
if (CollUtil.isEmpty(oldIncSectionConfigCodeList)) {
oldIncSnEntityList = Collections.emptyList();
} else {
oldIncSnEntityList = incSnService.list(Wrappers.lambdaQuery(IncSnEntity.class).in(IncSnEntity::getCode, oldIncSectionConfigCodeList));
}
modifyIncSnSectionConfig(oldIncSnEntityList, tuple2.get_1());
this.updateById(new SnConfigEntity() this.updateById(new SnConfigEntity()
.setId(modifySnConfigParam.getId()) .setId(id)
.setSnname(modifySnConfigParam.getSnname())
.setSncode(modifySnConfigParam.getSncode())
.setExample(modifySnConfigParam.getExample())
.setConfig(tuple2.get_0())
.setMemo(modifySnConfigParam.getMemo()) .setMemo(modifySnConfigParam.getMemo())
.setConfig(configs)
); );
} }
private void modifyIncSnSectionConfig(List<IncSnEntity> oldIncSnEntityList, List<IncSnEntity> newIncSnEntityList) {
if (oldIncSnEntityList.isEmpty() && newIncSnEntityList.isEmpty()) return;
// 旧无 新有 --> 新增
List<IncSnEntity> addList = difference(newIncSnEntityList, oldIncSnEntityList);
if (CollUtil.isNotEmpty(addList)) saveIncSnEntityList(addList);
// 旧有 新有 --> 修改
List<IncSnEntity> modList = intersection(oldIncSnEntityList, newIncSnEntityList);
if (CollUtil.isNotEmpty(modList)) incSnService.updateBatchById(modList);
// 旧有 新无 --> 删除
List<IncSnEntity> delList = difference(oldIncSnEntityList, newIncSnEntityList);
if (CollUtil.isNotEmpty(delList)) incSnService.removeBatchByIds(delList);
}
private List<IncSnEntity> difference(List<IncSnEntity> list1, List<IncSnEntity> list2) {
List<String> codes = list2.stream().map(IncSnEntity::getCode).collect(Collectors.toList());
return list1.stream()
.filter(it -> !codes.contains(it.getCode()))
.collect(Collectors.toList());
}
private List<IncSnEntity> intersection(List<IncSnEntity> list1, List<IncSnEntity> list2) {
Map<String, IncSnEntity> map = GroupUtil.k_o(list2, IncSnEntity::getCode);
return list1.stream()
.filter(it -> map.containsKey(it.getCode()))
.map(it -> {
IncSnEntity newData = map.get(it.getCode());
PadMode padMode = newData.getPadMode();
Integer padLen = newData.getPadLen();
return new IncSnEntity()
.setId(it.getId())
.setStep(newData.getStep())
.setInitialVal(newData.getInitialVal())
.setPadMode(padMode)
.setPadVal(newData.getPadVal())
.setPadLen(padLen)
.setMaxVal(padMode == PadMode.Wu ? Long.MAX_VALUE : (long) (Math.pow(10, padLen) - 1))
.setRollback(newData.getRollback())
.setAllowOverflow(newData.getAllowOverflow());
})
.collect(Collectors.toList());
}
/** /**
* *
*/ */
@ -100,8 +196,14 @@ public class SnConfigService extends ServiceImpl<SnConfigMapper, SnConfigEntity>
/** /**
* *
*/ */
public PageResult<SnConfigEntity> paging(PageParam pageParam, SnConfigEntity snConfigEntity) { public PageResult<SearchSnConfigResult> paging(PageParam pageParam, SnConfigEntity snConfigEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.<SnConfigEntity>query(snConfigEntity))); String sncode = snConfigEntity.getSncode();
String snname = snConfigEntity.getSnname();
LambdaQueryWrapper<SnConfigEntity> ew = Wrappers.lambdaQuery(SnConfigEntity.class)
.like(StrUtil.isNotBlank(sncode), SnConfigEntity::getSncode, sncode)
.like(StrUtil.isNotBlank(snname), SnConfigEntity::getSnname, snname);
IPage<SnConfigEntity> page = this.page(pageParam.toPage(), ew);
return PageResult.of(page.convert(it -> BeanUtil.copyProperties(it, SearchSnConfigResult.class)));
} }
} }

View File

@ -0,0 +1,24 @@
package com.njzscloud.common.sn.contant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* rollback_mode
*
*/
@Getter
@RequiredArgsConstructor
public enum RollbackMode implements DictStr {
Wu("Wu", "不回卷"),
Ri("Ri", "每日"),
Zhou("Zhou", "每周"),
Yue("Yue", "每月"),
Nian("Nian", "每年"),
Pi("Pi", "每批");
private final String val;
private final String txt;
}

View File

@ -4,10 +4,13 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class FixedSection implements ISnSection { public class FixedSection implements ISnSection {
/**
*
*/
private final String value; private final String value;
@Override @Override
public String next() { public String next(String pici) {
return value; return value;
} }
} }

View File

@ -6,19 +6,21 @@ import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.sn.contant.SnSection; import com.njzscloud.common.sn.contant.SnSection;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.util.Map; import java.util.Map;
@Getter @Getter
@Setter @Setter
@ToString
@Accessors(chain = true) @Accessors(chain = true)
public class FixedSectionConfig implements SectionConfig { public class FixedSectionConfig implements SectionConfig {
private final SnSection sectionName = SnSection.GuDing; private final SnSection sectionName = SnSection.GuDing;
/**
*
*/
private String value; private String value;
@Override @Override
public ISnSection section() { public ISnSection section() {
return new FixedSection(value); return new FixedSection(value);

View File

@ -1,5 +1,5 @@
package com.njzscloud.common.sn.support; package com.njzscloud.common.sn.support;
public interface ISnSection { public interface ISnSection {
String next(); String next(String pici);
} }

View File

@ -4,24 +4,50 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.njzscloud.common.sn.IncSnService; import com.njzscloud.common.sn.IncSnService;
import com.njzscloud.common.sn.contant.PadMode; import com.njzscloud.common.sn.contant.PadMode;
import com.njzscloud.common.sn.contant.RollbackMode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class IncSection implements ISnSection { public class IncSection implements ISnSection {
/**
*
*/
private final String code; private final String code;
/**
*
*/
private final Integer step; private final Integer step;
/**
*
*/
private final Integer initialVal; private final Integer initialVal;
/**
*
*/
private final PadMode padMode; private final PadMode padMode;
/**
*
*/
private final String padVal; private final String padVal;
/**
*
*/
private final Integer padLen; private final Integer padLen;
private final IncSnService incSnService = SpringUtil.getBean(IncSnService.class); private final IncSnService incSnService = SpringUtil.getBean(IncSnService.class);
/**
*
*/
private RollbackMode rollback;
/**
*
*/
private Boolean allowOverflow;
@Override @Override
public String next() { public String next(String pici) {
Long val = incSnService.inc(code); Long val = incSnService.inc(code, pici);
return padMode == PadMode.Zuo ? StrUtil.padPre(val.toString(), padLen, padVal) : return padMode == PadMode.Zuo ? StrUtil.padPre(val.toString(), padLen, padVal) :
padMode == PadMode.You ? StrUtil.padAfter(val.toString(), padLen, padVal) : padMode == PadMode.You ? StrUtil.padAfter(val.toString(), padLen, padVal) :
val.toString(); val.toString();

View File

@ -5,26 +5,51 @@ import cn.hutool.core.map.MapUtil;
import com.njzscloud.common.core.ex.Exceptions; import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.ienum.Dict; import com.njzscloud.common.core.ienum.Dict;
import com.njzscloud.common.sn.contant.PadMode; import com.njzscloud.common.sn.contant.PadMode;
import com.njzscloud.common.sn.contant.RollbackMode;
import com.njzscloud.common.sn.contant.SnSection; import com.njzscloud.common.sn.contant.SnSection;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.util.Map; import java.util.Map;
@Getter @Getter
@Setter @Setter
@ToString
@Accessors(chain = true) @Accessors(chain = true)
public class IncSectionConfig implements SectionConfig { public class IncSectionConfig implements SectionConfig {
private final SnSection sectionName = SnSection.ZiZeng; private final SnSection sectionName = SnSection.ZiZeng;
/**
*
*/
private String code; private String code;
/**
*
*/
private Integer step; private Integer step;
/**
*
*/
private Integer initialVal; private Integer initialVal;
/**
*
*/
private PadMode padMode; private PadMode padMode;
/**
*
*/
private String padVal; private String padVal;
/**
*
*/
private Integer padLen; private Integer padLen;
/**
*
*/
private RollbackMode rollback;
/**
*
*/
private Boolean allowOverflow;
@Override @Override
public ISnSection section() { public ISnSection section() {
@ -37,14 +62,15 @@ public class IncSectionConfig implements SectionConfig {
step = MapUtil.getInt(config, "step"); step = MapUtil.getInt(config, "step");
initialVal = MapUtil.getInt(config, "initialVal"); initialVal = MapUtil.getInt(config, "initialVal");
padMode = Dict.parse(MapUtil.getStr(config, "padMode"), PadMode.values()); padMode = Dict.parse(MapUtil.getStr(config, "padMode"), PadMode.values());
if (padMode == null) padMode = PadMode.Wu;
padVal = MapUtil.getStr(config, "padVal"); padVal = MapUtil.getStr(config, "padVal");
padLen = MapUtil.getInt(config, "padLen"); padLen = MapUtil.getInt(config, "padLen");
Assert.notBlank(code, () -> Exceptions.clierr("递增编码配置错误,设置字段 code")); Assert.notBlank(code, () -> Exceptions.clierr("递增编码配置错误,设置字段 code"));
Assert.notNull(step, () -> Exceptions.clierr("递增编码配置错误,设置字段 step")); Assert.notNull(step, () -> Exceptions.clierr("递增编码配置错误,设置字段 step"));
Assert.notNull(initialVal, () -> Exceptions.clierr("递增编码配置错误,设置字段 initialVal")); Assert.notNull(initialVal, () -> Exceptions.clierr("递增编码配置错误,设置字段 initialVal"));
if (padMode != null) { if (padMode != PadMode.Wu) {
Assert.notBlank(padVal, () -> Exceptions.clierr("递增编码配置错误,设置字段 padVal")); Assert.notBlank(padVal, () -> Exceptions.clierr("递增编码配置错误,设置字段 padVal"));
Assert.notNull(padLen, () -> Exceptions.clierr("递增编码配置错误,设置字段 padLen")); Assert.notNull(padLen, () -> Exceptions.clierr("递增编码配置错误,设置字段 padLen"));
} }
} }
} }

View File

@ -4,9 +4,21 @@ import cn.hutool.core.util.IdUtil;
import com.njzscloud.common.sn.contant.RandomMode; import com.njzscloud.common.sn.contant.RandomMode;
public class RandomSection implements ISnSection { public class RandomSection implements ISnSection {
/**
*
*/
private final RandomMode randomMode; private final RandomMode randomMode;
/**
* -ID
*/
private final Long workerId; private final Long workerId;
/**
* -ID
*/
private final Long datacenterId; private final Long datacenterId;
/**
* NanoId-
*/
private final Integer nanoIdSize; private final Integer nanoIdSize;
public RandomSection(RandomMode randomMode, Long workerId, Long datacenterId, Integer nanoIdSize) { public RandomSection(RandomMode randomMode, Long workerId, Long datacenterId, Integer nanoIdSize) {
@ -29,7 +41,7 @@ public class RandomSection implements ISnSection {
} }
@Override @Override
public String next() { public String next(String pici) {
switch (randomMode) { switch (randomMode) {
case UUID: case UUID:
return IdUtil.simpleUUID(); return IdUtil.simpleUUID();

View File

@ -8,20 +8,30 @@ import com.njzscloud.common.sn.contant.RandomMode;
import com.njzscloud.common.sn.contant.SnSection; import com.njzscloud.common.sn.contant.SnSection;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.util.Map; import java.util.Map;
@Getter @Getter
@Setter @Setter
@ToString
@Accessors(chain = true) @Accessors(chain = true)
public class RandomSectionConfig implements SectionConfig { public class RandomSectionConfig implements SectionConfig {
private final SnSection sectionName = SnSection.SuiJi; private final SnSection sectionName = SnSection.SuiJi;
/**
*
*/
private RandomMode randomMode; private RandomMode randomMode;
/**
* -ID
*/
private Long workerId; private Long workerId;
/**
* -ID
*/
private Long datacenterId; private Long datacenterId;
/**
* NanoId-
*/
private Integer nanoIdSize; private Integer nanoIdSize;
@Override @Override

View File

@ -7,9 +7,18 @@ import java.util.Map;
public interface SectionConfig { public interface SectionConfig {
/**
*
*/
SnSection getSectionName(); SnSection getSectionName();
/**
*
*/
ISnSection section(); ISnSection section();
/**
*
*/
void resolve(Map<String, Object> config); void resolve(Map<String, Object> config);
} }

View File

@ -17,12 +17,30 @@ public class Sn {
} }
public String next() { public String next() {
return next(null);
}
/**
*
*
* @param pici
* @return
*/
public String next(String pici) {
if (sections == null || sections.isEmpty()) { if (sections == null || sections.isEmpty()) {
return null; return null;
} }
return sections.stream()
.map(ISnSection::next) StringBuilder builder = new StringBuilder();
.reduce((a, b) -> a + b)
.orElseThrow(() -> Exceptions.exception("编码配置配置错误")); try {
for (ISnSection section : sections) {
builder.append(section.next(pici));
}
} catch (Exception e) {
throw Exceptions.error("编码配置配置错误");
}
return builder.toString();
} }
} }

View File

@ -41,7 +41,7 @@ public final class SnUtil {
} }
public static synchronized String next(String sncode) { public static synchronized String next(String sncode) {
Assert.notBlank(sncode); Assert.notBlank(sncode, () -> Exceptions.clierr("未指定编码规则"));
return SN_CONFIG_SERVICE.getSn(sncode).next(); return SN_CONFIG_SERVICE.getSn(sncode).next();
} }
} }

View File

@ -7,13 +7,21 @@ import java.util.Date;
@RequiredArgsConstructor @RequiredArgsConstructor
public class TimeSection implements ISnSection { public class TimeSection implements ISnSection {
/**
*
*/
private final String pattern; private final String pattern;
/**
*
*/
private final Boolean timestamp; private final Boolean timestamp;
/**
* 1 --> 1000-->60000 --> 3600000 --> 86400000 -->
*/
private final Integer unit; private final Integer unit;
@Override @Override
public String next() { public String next(String pici) {
return timestamp ? new Date().getTime() / unit + "" : DateUtil.format(new Date(), pattern); return timestamp ? new Date().getTime() / unit + "" : DateUtil.format(new Date(), pattern);
} }
} }

View File

@ -18,8 +18,17 @@ import java.util.Map;
@Accessors(chain = true) @Accessors(chain = true)
public class TimeSectionConfig implements SectionConfig { public class TimeSectionConfig implements SectionConfig {
private final SnSection sectionName = SnSection.ShiJian; private final SnSection sectionName = SnSection.ShiJian;
/**
*
*/
private String pattern; private String pattern;
/**
*
*/
private Boolean timestamp; private Boolean timestamp;
/**
* 1 --> 1000-->60000 --> 3600000 --> 86400000 -->
*/
private Integer unit; private Integer unit;
@Override @Override
@ -33,13 +42,12 @@ public class TimeSectionConfig implements SectionConfig {
timestamp = MapUtil.getBool(config, "timestamp", false); timestamp = MapUtil.getBool(config, "timestamp", false);
unit = MapUtil.getInt(config, "unit"); unit = MapUtil.getInt(config, "unit");
if (timestamp) { if (timestamp) {
Assert.notNull(unit, () -> Exceptions.clierr("时间编码配置错误,为设置字段 unit")); Assert.isTrue(unit != null && (unit == 1 || unit == 1000 || unit == 60000 || unit == 3600000 || unit == 86400000), () -> Exceptions.clierr("时间编码配置错误,字段 unit 只能为 1,1000,60000,3600000,86400000 中的一个"));
Assert.isTrue(StrUtil.isBlank(pattern), () -> Exceptions.clierr("时间编码配置错误,为设置字段 pattern 与 timestamp 不能同时使用")); Assert.isTrue(StrUtil.isBlank(pattern), () -> Exceptions.clierr("时间编码配置错误,字段 pattern 与 timestamp 不能同时使用"));
} else { } else {
Assert.notBlank(pattern, () -> Exceptions.clierr("时间编码配置错误,为设置字段 pattern")); Assert.notBlank(pattern, () -> Exceptions.clierr("时间编码配置错误,未设置字段 pattern"));
Assert.isTrue(unit == null, () -> Exceptions.clierr("时间编码配置错误,为设置字段 unit 与 pattern 不能同时使用")); Assert.isTrue(unit == null, () -> Exceptions.clierr("时间编码配置错误,字段 unit 与 pattern 不能同时使用"));
} }
} }
} }

View File

@ -6,6 +6,7 @@ import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.supervisory.biz.pojo.entity.BizDriverEntity; import com.njzscloud.supervisory.biz.pojo.entity.BizDriverEntity;
import com.njzscloud.supervisory.biz.pojo.param.AddDriverParam; import com.njzscloud.supervisory.biz.pojo.param.AddDriverParam;
import com.njzscloud.supervisory.biz.pojo.param.AuditDriverParam; import com.njzscloud.supervisory.biz.pojo.param.AuditDriverParam;
import com.njzscloud.supervisory.biz.pojo.param.ModifyDriverParam;
import com.njzscloud.supervisory.biz.service.BizDriverService; import com.njzscloud.supervisory.biz.service.BizDriverService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -37,12 +38,10 @@ public class BizDriverController {
/** /**
* *
*
* @param bizDriverEntity
*/ */
@PostMapping("/modify") @PostMapping("/modify")
public R<?> modify(@RequestBody BizDriverEntity bizDriverEntity) { public R<?> modify(@RequestBody ModifyDriverParam modifyDriverParam) {
bizDriverService.modify(bizDriverEntity); bizDriverService.modify(modifyDriverParam);
return R.success(); return R.success();
} }

View File

@ -0,0 +1,50 @@
package com.njzscloud.supervisory.biz.pojo.param;
import com.njzscloud.supervisory.sys.user.pojo.param.AddUserParam;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.time.LocalDate;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class ModifyDriverParam {
private Long id;
/**
*
*/
private String driverName;
/**
*
*/
private String phone;
/**
* ;
*/
private String drivingLicence;
/**
* ; []
*/
private LocalDate licenceStartTime;
private LocalDate licenceEndTime;
private AddUserParam user;
/**
*
*/
private String drivingLicenceNo;
}

View File

@ -1,9 +1,9 @@
package com.njzscloud.supervisory.biz.service; package com.njzscloud.supervisory.biz.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -18,6 +18,7 @@ import com.njzscloud.supervisory.biz.mapper.BizDriverMapper;
import com.njzscloud.supervisory.biz.pojo.entity.BizDriverEntity; import com.njzscloud.supervisory.biz.pojo.entity.BizDriverEntity;
import com.njzscloud.supervisory.biz.pojo.param.AddDriverParam; import com.njzscloud.supervisory.biz.pojo.param.AddDriverParam;
import com.njzscloud.supervisory.biz.pojo.param.AuditDriverParam; import com.njzscloud.supervisory.biz.pojo.param.AuditDriverParam;
import com.njzscloud.supervisory.biz.pojo.param.ModifyDriverParam;
import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult; import com.njzscloud.supervisory.biz.pojo.result.SearchCompanyResult;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult; import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import com.njzscloud.supervisory.sys.user.pojo.param.AddUserAccountParam; import com.njzscloud.supervisory.sys.user.pojo.param.AddUserAccountParam;
@ -28,6 +29,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@ -65,10 +67,30 @@ public class BizDriverService extends ServiceImpl<BizDriverMapper, BizDriverEnti
/** /**
* *
*
* @param bizDriverEntity
*/ */
public void modify(BizDriverEntity bizDriverEntity) { @Transactional(rollbackFor = Exception.class)
public void modify(ModifyDriverParam modifyDriverParam) {
Long id = modifyDriverParam.getId();
BizDriverEntity oldData = this.getById(id);
Assert.notNull(oldData, () -> Exceptions.clierr("数据不存在"));
AuditStatus auditStatus = oldData.getAuditStatus();
Long driverUserId = oldData.getUserId();
if (auditStatus == AuditStatus.DaiShenHe || auditStatus == AuditStatus.BoHui) {
sysUserService.del(Collections.singletonList(driverUserId));
AddUserParam user = modifyDriverParam.getUser();
AddUserAccountParam account = user.getAccount();
user.setPhone(account.getPhone())
.setBizObj(BizObj.SiJi);
account.setPhone(null);
driverUserId = sysUserService.add(user);
}
BizDriverEntity bizDriverEntity = BeanUtil.copyProperties(modifyDriverParam, BizDriverEntity.class)
.setAuditStatus(auditStatus == AuditStatus.BoHui ? AuditStatus.DaiShenHe : null)
.setAuditMemo(auditStatus == AuditStatus.BoHui ? "" : null)
.setUserId(driverUserId);
this.updateById(bizDriverEntity); this.updateById(bizDriverEntity);
} }

View File

@ -2,6 +2,7 @@ package com.njzscloud.supervisory.bs.service;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil;
import com.njzscloud.common.core.ex.Exceptions; import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.utils.GroupUtil; import com.njzscloud.common.core.utils.GroupUtil;
import com.njzscloud.supervisory.bs.mapper.SupervisionStatisticsMapper; import com.njzscloud.supervisory.bs.mapper.SupervisionStatisticsMapper;
@ -71,32 +72,32 @@ public class SupervisionStatisticsService {
.thenApply(dataStatistics -> { .thenApply(dataStatistics -> {
Double todayTotalWeight = MapUtil.getDouble(dataStatistics, "todayTotalWeight", 0.0); Double todayTotalWeight = MapUtil.getDouble(dataStatistics, "todayTotalWeight", 0.0);
Double yesterdayTotalWeight = MapUtil.getDouble(dataStatistics, "yesterdayTotalWeight", 0.0); Double yesterdayTotalWeight = MapUtil.getDouble(dataStatistics, "yesterdayTotalWeight", 0.0);
Double dayRate = yesterdayTotalWeight == 0 ? 0 : (todayTotalWeight - yesterdayTotalWeight) / yesterdayTotalWeight * 100; double dayRate = yesterdayTotalWeight == 0 ? 0 : (todayTotalWeight - yesterdayTotalWeight) / yesterdayTotalWeight * 100;
Double currentMonthTotalWeight = MapUtil.getDouble(dataStatistics, "currentMonthTotalWeight", 0.0); Double currentMonthTotalWeight = MapUtil.getDouble(dataStatistics, "currentMonthTotalWeight", 0.0);
Double lastMonthTotalWeight = MapUtil.getDouble(dataStatistics, "lastMonthTotalWeight", 0.0); Double lastMonthTotalWeight = MapUtil.getDouble(dataStatistics, "lastMonthTotalWeight", 0.0);
Double monthRate = lastMonthTotalWeight == 0 ? 0 : (currentMonthTotalWeight - lastMonthTotalWeight) / lastMonthTotalWeight * 100; double monthRate = lastMonthTotalWeight == 0 ? 0 : (currentMonthTotalWeight - lastMonthTotalWeight) / lastMonthTotalWeight * 100;
Double todayFinishCount = MapUtil.getDouble(dataStatistics, "todayFinishCount", 0.0); Double todayFinishCount = MapUtil.getDouble(dataStatistics, "todayFinishCount", 0.0);
Double todayTotalCount = MapUtil.getDouble(dataStatistics, "todayTotalCount", 0.0); Double todayTotalCount = MapUtil.getDouble(dataStatistics, "todayTotalCount", 0.0);
Double todayFinishRate = todayTotalCount == 0 ? 0 : todayFinishCount / todayTotalCount * 100; double todayFinishRate = todayTotalCount == 0 ? 0 : todayFinishCount / todayTotalCount * 100;
Double yesterdayFinishCount = MapUtil.getDouble(dataStatistics, "yesterdayFinishCount", 0.0); Double yesterdayFinishCount = MapUtil.getDouble(dataStatistics, "yesterdayFinishCount", 0.0);
// Double yesterdayTotalCount = MapUtil.getDouble(dataStatistics, "yesterdayTotalCount", 0.0); // Double yesterdayTotalCount = MapUtil.getDouble(dataStatistics, "yesterdayTotalCount", 0.0);
// Double yesterdayFinishRate = yesterdayFinishCount == 0 ? 100 : yesterdayFinishCount / yesterdayTotalCount * 100; // Double yesterdayFinishRate = yesterdayFinishCount == 0 ? 100 : yesterdayFinishCount / yesterdayTotalCount * 100;
Double incFinishRate = yesterdayFinishCount == 0 ? 0 : (todayFinishCount - yesterdayFinishCount) / yesterdayFinishCount * 100; double incFinishRate = yesterdayFinishCount == 0 ? 0 : (todayFinishCount - yesterdayFinishCount) / yesterdayFinishCount * 100;
Double todayWarnCount = MapUtil.getDouble(dataStatistics, "todayWarnCount", 0.0); Double todayWarnCount = MapUtil.getDouble(dataStatistics, "todayWarnCount", 0.0);
Double yesterdayWarnCount = MapUtil.getDouble(dataStatistics, "yesterdayWarnCount", 0.0); Double yesterdayWarnCount = MapUtil.getDouble(dataStatistics, "yesterdayWarnCount", 0.0);
Double warnRate = todayTotalCount == 0 ? 0 : todayWarnCount / todayTotalCount * 100; double warnRate = todayTotalCount == 0 ? 0 : todayWarnCount / todayTotalCount * 100;
Double incWarnRate = yesterdayWarnCount == 0 ? 0 : (todayWarnCount - yesterdayWarnCount) / yesterdayWarnCount * 100; double incWarnRate = yesterdayWarnCount == 0 ? 0 : (todayWarnCount - yesterdayWarnCount) / yesterdayWarnCount * 100;
dataStatistics.put("dayRate", dayRate); dataStatistics.put("dayRate", NumberUtil.decimalFormat("#.##", dayRate));
dataStatistics.put("monthRate", monthRate); dataStatistics.put("monthRate", NumberUtil.decimalFormat("#.##", monthRate));
dataStatistics.put("finishRate", todayFinishRate); dataStatistics.put("finishRate", NumberUtil.decimalFormat("#.##", todayFinishRate));
dataStatistics.put("incFinishRate", incFinishRate); dataStatistics.put("incFinishRate", NumberUtil.decimalFormat("#.##", incFinishRate));
dataStatistics.put("warnRate", warnRate); dataStatistics.put("warnRate", NumberUtil.decimalFormat("#.##", warnRate));
dataStatistics.put("incWarnRate", incWarnRate); dataStatistics.put("incWarnRate", NumberUtil.decimalFormat("#.##", incWarnRate));
return dataStatistics; return dataStatistics;
}) })
.exceptionally(ex -> { .exceptionally(ex -> {

View File

@ -22,13 +22,13 @@
MAX(IF(t = 2, c, 0)) jin_tian MAX(IF(t = 2, c, 0)) jin_tian
FROM (SELECT COUNT(*) c, 1 t FROM (SELECT COUNT(*) c, 1 t
FROM order_info a FROM order_info a
WHERE a.create_time >= UNIX_TIMESTAMP(CURDATE()) WHERE UNIX_TIMESTAMP(a.create_time) >= UNIX_TIMESTAMP(CURDATE())
AND a.create_time <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -24 HOUR)) AND UNIX_TIMESTAMP(a.create_time) <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -24 HOUR))
UNION ALL UNION ALL
SELECT COUNT(*) c, 2 t SELECT COUNT(*) c, 2 t
FROM order_info a FROM order_info a
WHERE a.create_time >= UNIX_TIMESTAMP(CURDATE()) WHERE UNIX_TIMESTAMP(a.create_time) >= UNIX_TIMESTAMP(CURDATE())
AND a.create_time <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 24 HOUR))) t) tt AND UNIX_TIMESTAMP(a.create_time) <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 24 HOUR))) t) tt
</select> </select>
<select id="getDisposeTotalWeight" resultType="java.lang.Integer"> <select id="getDisposeTotalWeight" resultType="java.lang.Integer">