Compare commits

...

27 Commits
temp ... master

Author SHA1 Message Date
ccongli 48f9bdca7c Merge branch 'contract'
1 year ago
ccongli e08e65995f 前端项目修正初始化-2
1 year ago
ccongli 76d9a8bf86 前端项目修正初始化-1
1 year ago
ccongli 29d30c5581 前端项目修正初始化-1
1 year ago
ccongli 45a8e573e0 合同基础、详情信息业务开发v3
1 year ago
杨世强 42020ecc7b 1
1 year ago
杨世强 599015f6c1 Merge branch 'master' into ysq-dev-0811
1 year ago
qiuhongwu e320886ff7 Merge branch 'qhw-dev-1010'
1 year ago
qiuhongwu e955c98eab 企业中心业务组织配置
1 year ago
ccongli a5a703479a 合同基础、详情信息业务开发v2
1 year ago
杨世强 39135c13a8 Merge branch 'master' into ysq-dev-0811
1 year ago
杨世强 cbafb07278 部门列表
1 year ago
ccongli c79db68acb 合同基础、详情信息业务开发v1
1 year ago
17602169347 615a86d50a 个人中心提交
1 year ago
17602169347 2c16788d8f 代码提交
1 year ago
ccongli 39ad4dfb72 忽略文件更新
1 year ago
杨世强 f19083e8a7 Merge branch 'master' of http://222.71.165.188:3000/linkage/YX-SCM
1 year ago
杨世强 0350cdae6b 部门列表
1 year ago
qiuhongwu ba7c34ac0e ijiao
1 year ago
杨世强 d1ce48e28b Merge branch 'ysq-dev-0811'
1 year ago
杨世强 f95b8abb5d 部门树状列表
1 year ago
qiuhongwu 98a0015579 Merge branch 'master' of http://222.71.165.188:3000/linkage/YX-SCM
1 year ago
qiuhongwu e566c2bac7 11
1 year ago
mhsnet add9532e04 分支机构功能
1 year ago
杨世强 ccc73b1696 部门列表
1 year ago
ccongli 19a3825c62 前端项目名称变更
1 year ago
qiuhongwu 52df6c6b76 cun
1 year ago

1
.gitignore vendored

@ -49,4 +49,3 @@ rebel.xml
application-my.yaml
/yunxi-ui-app/unpackage/
/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/supplier/vo/SupplierCreateReqVO.java

@ -1,28 +0,0 @@
# 本地开发环境
NODE_ENV=development
# 资源公共路径,需要以 /开头和结尾
VITE_PUBLIC_PATH = /
# 本地开发代理,可以解决跨域及多地址代理
# 如果接口地址匹配到则会转发到http://localhost:3000防止本地出现跨域问题
# 可以有多个,注意多个不能换行,否则代理将会失效
VITE_PROXY = [["/dev-api","http://127.0.0.1:8091/admin-api"],["/upload","http://127.0.0.1:8091/admin-api/infra/file/upload"]]
# VITE_PROXY=[["/api","http://vben.xingyuv.com/test"]]
# 是否删除Console.log
VITE_DROP_CONSOLE = false
# 基础页面地址,例如 swagger 等页面
VITE_GLOB_BASE_URL = "http://127.0.0.1:8091"
# 接口地址,如果没有跨域问题,直接在这里配置即可
VITE_GLOB_API_URL = /dev-api
# 文件上传接口 可选
VITE_GLOB_UPLOAD_URL = /upload
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
VITE_GLOB_API_URL_PREFIX =
# 百度统计
VITE_APP_BAIDU_CODE = eb21166668bf766b9d059a6fd1c10777

@ -1,8 +0,0 @@
#!/bin/sh
# shellcheck source=./_/husky.sh
. "$(dirname "$0")/_/husky.sh"
PATH="/usr/local/bin:$PATH"
npx --no-install commitlint --edit "$1"

@ -1,9 +0,0 @@
#!/bin/sh
command_exists () {
command -v "$1" >/dev/null 2>&1
}
# Workaround for Windows 10, Git Bash and Yarn
if command_exists winpty && test -t 1; then
exec < /dev/tty
fi

@ -1,10 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
[ -n "$CI" ] && exit 0
PATH="/usr/local/bin:$PATH"
# Format and submit code according to lintstagedrc.js configuration
npm run lint:lint-staged

@ -1,20 +0,0 @@
{
"recommendations": [
"christian-kohler.path-intellisense",
"vscode-icons-team.vscode-icons",
"davidanson.vscode-markdownlint",
"stylelint.vscode-stylelint",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"usernamehw.errorlens",
"mrmlnc.vscode-less",
"lokalise.i18n-ally",
"redhat.vscode-yaml",
"csstools.postcss",
"mikestead.dotenv",
"eamodio.gitlens",
"antfu.iconify",
"antfu.unocss",
"Vue.volar"
]
}

@ -1,13 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:80",
"webRoot": "${workspaceFolder}/src",
"sourceMaps": true
}
]
}

@ -1,181 +0,0 @@
{
"typescript.tsdk": "./node_modules/typescript/lib",
"npm.packageManager": "pnpm",
"editor.tabSize": 2,
"prettier.printWidth": 140, //
"editor.defaultFormatter": "esbenp.prettier-vscode",
"files.eol": "\n",
"search.exclude": {
"**/node_modules": true,
"**/*.log": true,
"**/*.log*": true,
"**/bower_components": true,
"**/dist": true,
"**/elehukouben": true,
"**/.git": true,
"**/.gitignore": true,
"**/.svn": true,
"**/.DS_Store": true,
"**/.idea": true,
"**/.vscode": false,
"**/yarn.lock": true,
"pnpm-lock.yaml": true,
"**/tmp": true,
"out": true,
"dist": true,
"public": true,
"node_modules": true,
"CHANGELOG.md": true,
"examples": true,
"res": true,
"screenshots": true,
"yarn-error.log": true,
"**/.yarn": true
},
"files.exclude": {
"**/.cache": true,
"**/.editorconfig": true,
"**/.eslintcache": true,
"**/bower_components": true,
"**/.idea": true,
"**/tmp": true,
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true
},
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/.vscode/**": true,
"**/node_modules/**": true,
"**/tmp/**": true,
"**/bower_components/**": true,
"**/dist/**": true,
"**/yarn.lock": true
},
"stylelint.enable": true,
"stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
"path-intellisense.mappings": {
"@/": "${workspaceRoot}/src"
},
"prettier.enable": false,
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.organizeImports": false
},
"eslint.rules.customizations": [
{
"rule": "@stylistic/*",
"severity": "off"
}
],
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
"html",
"markdown",
"json",
"jsonc",
"yaml"
],
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[less]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[vue]": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.organizeImports": false,
"source.fixAll.stylelint": true
}
},
"i18n-ally.localesPaths": ["src/locales/lang"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": true,
"i18n-ally.namespace": true,
"i18n-ally.pathMatcher": "{locale}/{namespaces}.{ext}",
"i18n-ally.enabledParsers": ["ts"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "zh-CN",
"i18n-ally.enabledFrameworks": ["vue", "react"],
"cSpell.words": [
"antd",
"antdv",
"antfu",
"antv",
"brotli",
"browserslist",
"Cascader",
"codemirror",
"commitlint",
"cropperjs",
"echarts",
"esnext",
"esno",
"iconify",
"INTLIFY",
"lintstagedrc",
"logicflow",
"nprogress",
"pinia",
"pnpm",
"qrcode",
"sider",
"sortablejs",
"stylelint",
"tailwind",
"tailwindcss",
"tinymce",
"unocss",
"unref",
"vben",
"vditor",
"videojs",
"vitejs",
"vuedraggable",
"vueuse",
"xingyuv",
"yudao",
"zxcvbn"
],
//
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
"*.env": "$(capture).env.*",
"package.json": ".hintrc,pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
},
"eslint.codeAction.showDocumentation": {
"enable": true
},
"terminal.integrated.scrollback": 10000,
"nuxt.isNuxtApp": false
}

@ -1,69 +0,0 @@
import { generate } from '@ant-design/colors'
export const primaryColor = '#0960bd'
export const darkMode = 'light'
type Fn = (...arg: any) => any
type GenerateTheme = 'default' | 'dark'
export interface GenerateColorsParams {
mixLighten: Fn
mixDarken: Fn
tinycolor: any
color?: string
}
export function generateAntColors(color: string, theme: GenerateTheme = 'default') {
return generate(color, {
theme,
})
}
export function getThemeColors(color?: string) {
const tc = color || primaryColor
const lightColors = generateAntColors(tc)
const primary = lightColors[5]
const modeColors = generateAntColors(primary, 'dark')
return [...lightColors, ...modeColors]
}
export function generateColors({ color = primaryColor, mixLighten, mixDarken, tinycolor }: GenerateColorsParams) {
const arr = Array.from({ length: 19 }).fill(0)
const lightens = arr.map((_t, i) => {
return mixLighten(color, i / 5)
})
const darkens = arr.map((_t, i) => {
return mixDarken(color, i / 5)
})
const alphaColors = arr.map((_t, i) => {
return tinycolor(color)
.setAlpha(i / 20)
.toRgbString()
})
const shortAlphaColors = alphaColors.map(item => item.replace(/\s/g, '').replace(/0\./g, '.'))
const tinycolorLightens = arr
.map((_t, i) => {
return tinycolor(color)
.lighten(i * 5)
.toHexString()
})
.filter(item => item !== '#ffffff')
const tinycolorDarkens = arr
.map((_t, i) => {
return tinycolor(color)
.darken(i * 5)
.toHexString()
})
.filter(item => item !== '#000000')
return [...lightens, ...darkens, ...alphaColors, ...shortAlphaColors, ...tinycolorDarkens, ...tinycolorLightens].filter(
item => !item.includes('-'),
)
}

@ -1,6 +0,0 @@
/**
* The name of the configuration file entered in the production environment
*/
export const GLOB_CONFIG_FILE_NAME = '_app.config.js'
export const OUTPUT_DIR = 'dist'

@ -1,18 +0,0 @@
import { resolve } from 'node:path'
import { generateAntColors, primaryColor } from '../config/themeConfig'
/**
* less global variable
*/
export function generateModifyVars() {
const palettes = generateAntColors(primaryColor)
const primaryColorObj: Record<string, string> = {}
for (let index = 0; index < 10; index++)
primaryColorObj[`primary-${index + 1}`] = palettes[index]
return {
hack: `true; @import (reference) "${resolve('src/design/config.less')}";`,
}
}

@ -1,68 +0,0 @@
import path from 'node:path'
import fs from 'fs-extra'
import inquirer from 'inquirer'
import colors from 'picocolors'
import pkg from '../../../package.json'
async function generateIcon() {
const dir = path.resolve(process.cwd(), 'node_modules/@iconify/json')
const raw = await fs.readJSON(path.join(dir, 'collections.json'))
const collections = Object.entries(raw).map(([id, v]) => ({
...(v as any),
id,
}))
const choices = collections.map(item => ({ key: item.id, value: item.id, name: item.name }))
inquirer
.prompt([
{
type: 'list',
name: 'useType',
choices: [
{ key: 'local', value: 'local', name: 'Local' },
{ key: 'onLine', value: 'onLine', name: 'OnLine' },
],
message: 'How to use icons?',
},
{
type: 'list',
name: 'iconSet',
choices,
message: 'Select the icon set that needs to be generated?',
},
{
type: 'input',
name: 'output',
message: 'Select the icon set that needs to be generated?',
default: 'src/components/Icon/data',
},
])
.then(async (answers) => {
const { iconSet, output, useType } = answers
const outputDir = path.resolve(process.cwd(), output)
await fs.ensureDir(outputDir)
const genCollections = collections.filter(item => [iconSet].includes(item.id))
const prefixSet: string[] = []
for (const info of genCollections) {
const data = await fs.readJSON(path.join(dir, 'json', `${info.id}.json`))
if (data) {
const { prefix } = data
const isLocal = useType === 'local'
const icons = Object.keys(data.icons).map(item => `${isLocal ? `${prefix}:` : ''}${item}`)
fs.writeFileSync(
path.join(output, 'icons.data.ts'),
`export default ${isLocal ? JSON.stringify(icons) : JSON.stringify({ prefix, icons })}`,
)
prefixSet.push(prefix)
}
}
await fs.emptyDir(path.join(process.cwd(), 'node_modules/.vite'))
console.log(`${colors.cyan(`[${pkg.name}]`)}` + ' - Icon generated successfully:' + `[${prefixSet}]`)
})
}
generateIcon()

@ -1,7 +0,0 @@
/**
* Get the configuration file variable name
* @param env
*/
export function getConfigFileName(env: Record<string, any>) {
return `__PRODUCTION__${env.VITE_GLOB_APP_SHORT_NAME || '__APP'}__CONF__`.toUpperCase().replace(/\s/g, '')
}

@ -1,48 +0,0 @@
/**
* Generate additional configuration files when used for packaging. The file can be configured with some global variables, so that it can be changed directly externally without repackaging
*/
import fs, { writeFileSync } from 'fs-extra'
import colors from 'picocolors'
import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from '../constant'
import { getEnvConfig, getRootPath } from '../utils'
import { getConfigFileName } from '../getConfigFileName'
import pkg from '../../package.json'
interface CreateConfigParams {
configName: string
config: any
configFileName?: string
}
function createConfig(params: CreateConfigParams) {
const { configName, config, configFileName } = params
try {
const windowConf = `window.${configName}`
// Ensure that the variable will not be modified
let configStr = `${windowConf}=${JSON.stringify(config)};`
configStr += `
Object.freeze(${windowConf});
Object.defineProperty(window, "${configName}", {
configurable: false,
writable: false,
});
`.replace(/\s/g, '')
fs.mkdirp(getRootPath(OUTPUT_DIR))
writeFileSync(getRootPath(`${OUTPUT_DIR}/${configFileName}`), configStr)
console.log(`${colors.cyan(`✨ [${pkg.name}]`)} - configuration file is build successfully:`)
console.log(`${colors.gray(`${OUTPUT_DIR}/${colors.green(configFileName)}`)}\n`)
}
catch (error: any) {
console.log(colors.red(`configuration file configuration file failed to package:\n${error}`))
}
}
export function runBuildConfig() {
const config = getEnvConfig()
const configFileName = getConfigFileName(config)
createConfig({ config, configName: configFileName, configFileName: GLOB_CONFIG_FILE_NAME })
}

@ -1,23 +0,0 @@
// #!/usr/bin/env node
import colors from 'picocolors'
import pkg from '../../package.json'
import { runBuildConfig } from './buildConf'
export function runBuild() {
try {
const argvList = process.argv.splice(2)
// Generate configuration file
if (!argvList.includes('disabled-config'))
runBuildConfig()
console.log(`${colors.cyan(`[${pkg.name}]`)}` + ' - build successfully!')
}
catch (error: any) {
console.log(colors.red(`vite build error:\n${error}`))
process.exit(1)
}
}
runBuild()

@ -1,93 +0,0 @@
import fs from 'node:fs'
import path from 'node:path'
import dotenv from 'dotenv'
export function isDevFn(mode: string): boolean {
return mode === 'development'
}
export function isProdFn(mode: string): boolean {
return mode === 'production'
}
/**
* Whether to generate package preview
*/
export function isReportMode(): boolean {
return process.env.REPORT === 'true'
}
// Read all environment variable configuration files to process.env
export function wrapperEnv(envConf: Recordable): ViteEnv {
const ret: any = {}
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, '\n')
realName = realName === 'true' ? true : realName === 'false' ? false : realName
if (envName === 'VITE_PORT')
realName = Number(realName)
if (envName === 'VITE_PROXY' && realName) {
try {
realName = JSON.parse(realName.replace(/'/g, '"'))
}
catch (error) {
realName = ''
}
}
ret[envName] = realName
// if (typeof realName === 'string') {
// process.env[envName] = realName;
// } else if (typeof realName === 'object') {
// process.env[envName] = JSON.stringify(realName);
// }
}
return ret
}
/**
*
*/
function getConfFiles() {
const script = process.env.npm_lifecycle_script
const reg = /--mode ([a-z_\d]+)/
const result = reg.exec(script as string) as any
if (result) {
const mode = result[1] as string
return ['.env', `.env.${mode}`]
}
return ['.env', '.env.production']
}
/**
* Get the environment variables starting with the specified prefix
* @param match prefix
* @param confFiles ext
*/
export function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) {
let envConfig = {}
confFiles.forEach((item) => {
try {
const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)))
envConfig = { ...envConfig, ...env }
}
catch (e) {
console.error(`Error in parsing ${item}`, e)
}
})
const reg = new RegExp(`^(${match})`)
Object.keys(envConfig).forEach((key) => {
if (!reg.test(key))
Reflect.deleteProperty(envConfig, key)
})
return envConfig
}
/**
* Get user root directory
* @param dir file path
*/
export function getRootPath(...dir: string[]) {
return path.resolve(process.cwd(), ...dir)
}

@ -1,35 +0,0 @@
const include = [
'qs',
'vue',
'less',
'axios',
'pinia',
'dayjs',
'echarts',
'cropperjs',
'crypto-js',
'lodash-es',
'nprogress',
'vue-i18n',
'vue-types',
'vue-router',
'codemirror',
'sortablejs',
'vuedraggable',
'echarts/core',
'echarts/charts',
'echarts/components',
'echarts/renderers',
'@vueuse/core',
'@zxcvbn-ts/core',
'@iconify/iconify',
'vue-json-pretty',
'ant-design-vue',
'ant-design-vue/es/style',
'ant-design-vue/es/locale/zh_CN',
'ant-design-vue/es/locale/en_US',
]
const exclude = ['@iconify/json']
export { include, exclude }

@ -1,35 +0,0 @@
/**
* Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated
* https://github.com/anncwb/vite-plugin-compression
*/
import type { PluginOption } from 'vite'
import compressPlugin from 'vite-plugin-compression'
export function configCompressPlugin(
compress: 'gzip' | 'brotli' | 'none' = 'none',
deleteOriginFile = false,
): PluginOption | PluginOption[] {
const compressList = compress.split(',')
const plugins: PluginOption[] = []
if (compressList.includes('gzip')) {
plugins.push(
compressPlugin({
ext: '.gz',
deleteOriginFile,
}),
)
}
if (compressList.includes('brotli')) {
plugins.push(
compressPlugin({
ext: '.br',
algorithm: 'brotliCompress',
deleteOriginFile,
}),
)
}
return plugins
}

@ -1,40 +0,0 @@
/**
* Plugin to minimize and use ejs template syntax in index.html.
* https://github.com/xingyuv/vite-vue-plugin-html
*/
import type { PluginOption } from 'vite'
import { createHtmlPlugin } from 'vite-vue-plugin-html'
import pkg from '../../../package.json'
import { GLOB_CONFIG_FILE_NAME } from '../../constant'
export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) {
const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env
const path = VITE_PUBLIC_PATH.endsWith('/') ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`
const getAppConfigSrc = () => {
return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`
}
const htmlPlugin: PluginOption[] = createHtmlPlugin({
minify: isBuild,
inject: {
// Inject data into ejs template
data: {
title: VITE_GLOB_APP_TITLE,
},
// Embed the generated app.config.js file
tags: isBuild
? [
{
tag: 'script',
attrs: {
src: getAppConfigSrc(),
},
},
]
: [],
},
})
return htmlPlugin
}

@ -1,53 +0,0 @@
import type { PluginOption } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import progress from 'vite-plugin-progress'
import purgeIcons from 'vite-plugin-purge-icons'
import VitePluginCertificate from 'vite-plugin-mkcert'
import UnoCSS from 'unocss/vite'
import { configPwaConfig } from './pwa'
import { configHtmlPlugin } from './html'
import { configCompressPlugin } from './compress'
import { configVisualizerConfig } from './visualizer'
import { configSvgIconsPlugin } from './svgSprite'
export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
const { VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv
const vitePlugins: PluginOption[] = [
// have to
vue(),
// have to
vueJsx(),
// UnoCSS
UnoCSS(),
// 打包进度条
progress(),
VitePluginCertificate({
source: 'coding',
}),
]
// vite-vue-plugin-html
vitePlugins.push(configHtmlPlugin(viteEnv, isBuild))
// vite-plugin-svg-icons
vitePlugins.push(configSvgIconsPlugin(isBuild))
// vite-plugin-purge-icons
vitePlugins.push(purgeIcons())
// rollup-plugin-visualizer
vitePlugins.push(configVisualizerConfig())
// The following plugins only work in the production environment
if (isBuild) {
// rollup-plugin-gzip
vitePlugins.push(configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE))
// vite-plugin-pwa
vitePlugins.push(configPwaConfig(viteEnv))
}
return vitePlugins
}

@ -1,33 +0,0 @@
/**
* Zero-config PWA for Vite
* https://github.com/antfu/vite-plugin-pwa
*/
import { VitePWA } from 'vite-plugin-pwa'
export function configPwaConfig(env: ViteEnv) {
const { VITE_USE_PWA, VITE_GLOB_APP_TITLE, VITE_GLOB_APP_SHORT_NAME } = env
if (VITE_USE_PWA) {
// vite-plugin-pwa
const pwaPlugin = VitePWA({
manifest: {
name: VITE_GLOB_APP_TITLE,
short_name: VITE_GLOB_APP_SHORT_NAME,
icons: [
{
src: './resource/img/pwa-192x192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: './resource/img/pwa-512x512.png',
sizes: '512x512',
type: 'image/png',
},
],
},
})
return pwaPlugin
}
return []
}

@ -1,18 +0,0 @@
/**
* Vite Plugin for fast creating SVG sprites.
* https://github.com/anncwb/vite-plugin-svg-icons
*/
import path from 'node:path'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import type { PluginOption } from 'vite'
export function configSvgIconsPlugin(isBuild: boolean) {
const svgIconsPlugin = createSvgIconsPlugin({
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
svgoOptions: isBuild,
// default
symbolId: 'icon-[dir]-[name]',
})
return svgIconsPlugin as PluginOption
}

@ -1,18 +0,0 @@
/**
* Package file volume analysis
*/
import visualizer from 'rollup-plugin-visualizer'
import type { PluginOption } from 'vite'
import { isReportMode } from '../../utils'
export function configVisualizerConfig() {
if (isReportMode()) {
return visualizer({
filename: './node_modules/.cache/visualizer/stats.html',
open: true,
gzipSize: true,
brotliSize: true,
}) as PluginOption
}
return []
}

@ -1,34 +0,0 @@
/**
* Used to parse the .env.development proxy configuration
*/
import type { ProxyOptions } from 'vite'
type ProxyItem = [string, string]
type ProxyList = ProxyItem[]
type ProxyTargetList = Record<string, ProxyOptions>
const httpsRE = /^https:\/\//
/**
* Generate proxy
* @param list
*/
export function createProxy(list: ProxyList = []) {
const ret: ProxyTargetList = {}
for (const [prefix, target] of list) {
const isHttps = httpsRE.test(target)
// https://github.com/http-party/node-http-proxy#options
ret[prefix] = {
target,
changeOrigin: true,
ws: true,
rewrite: path => path.replace(new RegExp(`^${prefix}`), ''),
// https is require secure=false
...(isHttps ? { secure: false } : {}),
}
}
return ret
}

@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@ -122,17 +123,26 @@ public class DeptController {
@GetMapping("/list-dept-user")
@Operation(summary = "获取部门和人员列表")
@PreAuthorize("@ss.hasPermission('system:dept:user')")
public CommonResult<List<DeptDO>> getDeptUserList() {
public CommonResult<List<DeptSimpleRespVO>> getDeptUserList() {
// 获得部门列表,只要开启状态的
DeptListReqVO deptListReqVO = new DeptListReqVO();
deptListReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
List<DeptDO> deptDOList = deptService.getDeptList(deptListReqVO);
//将Dept转化为简单的Dept
List<DeptSimpleRespVO> simpleDeptList = new ArrayList<>(DeptConvert.INSTANCE.convertList02(deptDOList));
deptDOList.forEach(deptDO -> {
List<AdminUserDO> adminUserDOList = userService.getUserListByDeptIds(Collections.singleton(deptDO.getId()));
deptDO.setChildren(adminUserDOList);
List<AdminUserDO> adminUserList = userService.getUserListByDeptIds(Collections.singleton(deptDO.getId()));
for (AdminUserDO adminUserDO : adminUserList){
DeptSimpleRespVO deptSimpleRespVO = new DeptSimpleRespVO();
deptSimpleRespVO.setId(adminUserDO.getId());
deptSimpleRespVO.setParentId(adminUserDO.getDeptId());
deptSimpleRespVO.setName(adminUserDO.getNickname());
simpleDeptList.add(deptSimpleRespVO);
}
});
return success(deptDOList);
//将list转为树状
List<DeptSimpleRespVO> list = deptService.buildTree(simpleDeptList,0);
return success(list);
}
}

@ -24,5 +24,7 @@ public class DeptSimpleRespVO {
@Schema(description = "父部门 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long parentId;
@Schema(description = "子集" )
private List<DeptSimpleRespVO> children;
}

@ -22,6 +22,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.Operation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -204,5 +205,4 @@ public class UserController {
list.sort(Comparator.comparing(AdminUserDO::getId));
return success(UserConvert.INSTANCE.convertList04(list));
}
}

@ -65,16 +65,30 @@ public class UserProfileController {
// 获得用户角色
List<RoleDO> userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
resp.setRoles(UserConvert.INSTANCE.convertList(userRoles));
String deptNames = "";
// 获得部门信息
if (user.getDeptId() != null) {
DeptDO dept = deptService.getDept(user.getDeptId());
resp.setDept(UserConvert.INSTANCE.convert02(dept));
deptNames = deptNames + dept.getName() + ",";
}
if(deptNames.length() > 0){
deptNames = deptNames.substring(0, deptNames.length() - 1);
}
resp.setDeptNames(deptNames);
String postNames = "";
// 获得岗位信息
if (CollUtil.isNotEmpty(user.getPostIds())) {
List<PostDO> posts = postService.getPostList(user.getPostIds());
resp.setPosts(UserConvert.INSTANCE.convertList02(posts));
for (PostDO postDO : posts) {
postNames = postNames + postDO.getName() + ",";
}
}
if(postNames.length() > 0){
postNames = postNames.substring(0, postNames.length() - 1);
}
resp.setPostNames(postNames);
// 获得社交用户信息
List<SocialUserDO> socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue());
resp.setSocialUsers(UserConvert.INSTANCE.convertList03(socialUsers));

@ -33,6 +33,41 @@ public class UserProfileRespVO extends UserBaseVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
private LocalDateTime createTime;
@Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "事业部,传感部")
private String deptNames;
@Schema(description = "职务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "董事长,周经理")
private String postNames;
/**
*
*/
private String nativePlace;
/**
*
*/
private String education;
/**
*
*/
private String speciality;
/**
*
*/
private String graduationInstitution;
/**
*
*/
private LocalDateTime institutionDatatime;
/**
*
*/
private LocalDateTime birthDatetime;
/**
*
*/
private String personalProfile;
/**
*
*/

@ -10,7 +10,7 @@ import javax.validation.constraints.Size;
@Schema(description = "管理后台 - 用户个人信息更新 Request VO")
@Data
public class UserProfileUpdateReqVO {
public class UserProfileUpdateReqVO extends UserProfileRespVO{
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@Size(max = 30, message = "用户昵称长度不能超过 30 个字符")

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.yunxi.scm.framework.common.enums.CommonStatusEnum;
import com.yunxi.scm.framework.tenant.core.db.TenantBaseDO;
import com.yunxi.scm.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
import com.yunxi.scm.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
@ -72,7 +73,7 @@ public class DeptDO extends TenantBaseDO {
private Long enterpriseId;
@TableField(exist = false)
private List children;
private List<DeptSimpleRespVO> children;
}

@ -4,7 +4,9 @@ import cn.hutool.core.collection.CollUtil;
import com.yunxi.scm.framework.common.util.collection.CollectionUtils;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO;
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserPageItemRespVO;
import com.yunxi.scm.module.system.dal.dataobject.dept.DeptDO;
import java.util.*;
@ -101,4 +103,9 @@ public interface DeptService {
*/
void validateDeptList(Collection<Long> ids);
/**
*
*
*/
List<DeptSimpleRespVO> buildTree(List<DeptSimpleRespVO> deptDOList, long pid);
}

@ -6,13 +6,16 @@ import com.yunxi.scm.framework.common.enums.CommonStatusEnum;
import com.yunxi.scm.framework.datapermission.core.annotation.DataPermission;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
import com.yunxi.scm.module.system.controller.admin.dept.vo.dept.DeptUpdateReqVO;
import com.yunxi.scm.module.system.convert.dept.DeptConvert;
import com.yunxi.scm.module.system.dal.dataobject.dept.DeptDO;
import com.yunxi.scm.module.system.dal.dataobject.user.AdminUserDO;
import com.yunxi.scm.module.system.dal.mysql.dept.DeptMapper;
import com.yunxi.scm.module.system.dal.redis.RedisKeyConstants;
import com.yunxi.scm.module.system.enums.dept.DeptIdEnum;
import com.google.common.annotations.VisibleForTesting;
import com.yunxi.scm.module.system.service.user.AdminUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@ -202,4 +205,17 @@ public class DeptServiceImpl implements DeptService {
});
}
@Override
public List<DeptSimpleRespVO> buildTree(List<DeptSimpleRespVO> deptDOList, long pid) {
List<DeptSimpleRespVO> treeList = new ArrayList<>();
for (DeptSimpleRespVO dept : deptDOList) {
if (dept.getParentId() == pid) {
dept.setChildren(buildTree(deptDOList, dept.getId()));
treeList.add(dept);
}
}
return treeList;
}
}

@ -0,0 +1,4 @@
/**
* System API API
*/
package com.yunxi.scm.module.xxjj.api;

@ -2,7 +2,13 @@ package com.yunxi.scm.module.xxjj.enums;
import com.yunxi.scm.framework.common.exception.ErrorCode;
/**
*
*
* 使 1-003-000-000
*/
public interface ErrorCodeConstants {
// ========== 物料行业 TODO 补充编号 ==========
ErrorCode MATERIAL_INDUSTRY_NOT_EXISTS = new ErrorCode(1002025002, "物料行业不存在");
// ========== 物料类型 TODO 补充编号 ==========
@ -19,7 +25,7 @@ public interface ErrorCodeConstants {
ErrorCode CUSTOMER_NOT_EXISTS = new ErrorCode(1002025008, "客户信息不存在");
// ========== 工单 TODO 补充编号 ==========
ErrorCode WORK_ORDER_NOT_EXISTS = new ErrorCode(1002025009, "工单不存在");
// ========== 供应商 TODO 补充编号 ==========
// ========== 供应商 TODO 补充编号 ==========
ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1002026010, "供应商不存在");
// ========== 业务线 TODO 补充编号 ==========
ErrorCode BUSINESS_LINE_NOT_EXISTS = new ErrorCode(1002025011, "业务线不存在");
@ -69,4 +75,22 @@ public interface ErrorCodeConstants {
ErrorCode ENTERPRISE_CONTRACT_NOT_EXISTS = new ErrorCode(1002004016, "企业合约不存在");
ErrorCode SUBJECT_BASIC_NOT_EXISTS = new ErrorCode(1002004017, "基础业务信息表(客户,供应商,服务商主体)不存在");
// ========== 主体跟进管理 TODO 补充编号 ==========
ErrorCode SUBJECT_FOLLOW_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002004018, "主体跟进管理不存在");
/**
* 使 1-005-000-000
*/
// ========== 合同信息 500100001 ==========
ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(1005000001, "合同信息不存在");
// ========== 合同详情信息 500100001 ==========
ErrorCode CONTRACT_INFO_NOT_EXISTS = new ErrorCode(1005000002, "合同详情信息不存在");
}

@ -0,0 +1,102 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.common.pojo.CommonResult;
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.yunxi.scm.module.xxjj.controller.admin.contract.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contract.ContractDO;
import com.yunxi.scm.module.xxjj.convert.contract.ContractConvert;
import com.yunxi.scm.module.xxjj.service.contract.ContractService;
@Tag(name = "管理后台 - 合同信息")
@RestController
@RequestMapping("/xxjj/contract")
@Validated
public class ContractController {
@Resource
private ContractService contractService;
@PostMapping("/create")
@Operation(summary = "创建合同信息")
@PreAuthorize("@ss.hasPermission('xxjj:contract:create')")
public CommonResult<Long> createContract(@Valid @RequestBody ContractCreateReqVO createReqVO) {
return success(contractService.createContract(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新合同信息")
@PreAuthorize("@ss.hasPermission('xxjj:contract:update')")
public CommonResult<Boolean> updateContract(@Valid @RequestBody ContractUpdateReqVO updateReqVO) {
contractService.updateContract(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除合同信息")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:contract:delete')")
public CommonResult<Boolean> deleteContract(@RequestParam("id") Long id) {
contractService.deleteContract(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得合同信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:contract:query')")
public CommonResult<ContractRespVO> getContract(@RequestParam("id") Long id) {
ContractDO contract = contractService.getContract(id);
return success(ContractConvert.INSTANCE.convert(contract));
}
@GetMapping("/list")
@Operation(summary = "获得合同信息列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:contract:query')")
public CommonResult<List<ContractRespVO>> getContractList(@RequestParam("ids") Collection<Long> ids) {
List<ContractDO> list = contractService.getContractList(ids);
return success(ContractConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得合同信息分页")
@PreAuthorize("@ss.hasPermission('xxjj:contract:query')")
public CommonResult<PageResult<ContractRespVO>> getContractPage(@Valid ContractPageReqVO pageVO) {
PageResult<ContractDO> pageResult = contractService.getContractPage(pageVO);
return success(ContractConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出合同信息 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:contract:export')")
@OperateLog(type = EXPORT)
public void exportContractExcel(@Valid ContractExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ContractDO> list = contractService.getContractList(exportReqVO);
// 导出 Excel
List<ContractExcelVO> datas = ContractConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "合同信息.xls", "数据", ContractExcelVO.class, datas);
}
}

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class ContractBaseVO {
@Schema(description = "合同状态", example = "1")
private String contractStatus;
@Schema(description = "合同类型", example = "2")
private String contractType;
@Schema(description = "合同模板", example = "6806")
private Long contractTemplateId;
@Schema(description = "合同编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "合同编号不能为空")
private Long contractNumber;
@Schema(description = "合同名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@NotNull(message = "合同名称不能为空")
private String contractName;
@Schema(description = "供应商/客户名称id")
private Long subject;
@Schema(description = "部门id", example = "10183")
private Long deptId;
@Schema(description = "对方合同编号")
private String contractNo;
@Schema(description = "签订地点", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "签订地点不能为空")
private String contractSigned;
@Schema(description = "签订时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "签订时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime contractSignedTime;
@Schema(description = "关联业务线", requiredMode = Schema.RequiredMode.REQUIRED, example = "32066")
@NotNull(message = "关联业务线不能为空")
private Long businessId;
@Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "业务类型不能为空")
private String businessType;
@Schema(description = "申报时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "申报时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime declarationTime;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 合同信息创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractCreateReqVO extends ContractBaseVO {
}

@ -0,0 +1,72 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
/**
* Excel VO
*
* @author
*/
@Data
public class ContractExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty(value = "合同状态", converter = DictConvert.class)
@DictFormat("contract_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String contractStatus;
@ExcelProperty(value = "合同类型", converter = DictConvert.class)
@DictFormat("contract_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String contractType;
@ExcelProperty("合同模板")
private Long contractTemplateId;
@ExcelProperty("合同编号")
private Long contractNumber;
@ExcelProperty("合同名称")
private String contractName;
@ExcelProperty("供应商/客户名称id")
private Long subject;
@ExcelProperty("部门id")
private Long deptId;
@ExcelProperty("对方合同编号")
private String contractNo;
@ExcelProperty("签订地点")
private String contractSigned;
@ExcelProperty("签订时间")
private LocalDateTime contractSignedTime;
@ExcelProperty("关联业务线")
private Long businessId;
@ExcelProperty(value = "业务类型", converter = DictConvert.class)
@DictFormat("contract_business_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String businessType;
@ExcelProperty("申报时间")
private LocalDateTime declarationTime;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,61 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 合同信息 Excel 导出 Request VO参数和 ContractPageReqVO 是一致的")
@Data
public class ContractExportReqVO {
@Schema(description = "合同状态", example = "1")
private String contractStatus;
@Schema(description = "合同类型", example = "2")
private String contractType;
@Schema(description = "合同模板", example = "6806")
private Long contractTemplateId;
@Schema(description = "合同编号")
private Long contractNumber;
@Schema(description = "合同名称", example = "王五")
private String contractName;
@Schema(description = "供应商/客户名称id")
private Long subject;
@Schema(description = "部门id", example = "10183")
private Long deptId;
@Schema(description = "对方合同编号")
private String contractNo;
@Schema(description = "签订地点")
private String contractSigned;
@Schema(description = "签订时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] contractSignedTime;
@Schema(description = "关联业务线", example = "32066")
private Long businessId;
@Schema(description = "业务类型", example = "2")
private String businessType;
@Schema(description = "申报时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] declarationTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,63 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 合同信息分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractPageReqVO extends PageParam {
@Schema(description = "合同状态", example = "1")
private String contractStatus;
@Schema(description = "合同类型", example = "2")
private String contractType;
@Schema(description = "合同模板", example = "6806")
private Long contractTemplateId;
@Schema(description = "合同编号")
private Long contractNumber;
@Schema(description = "合同名称", example = "王五")
private String contractName;
@Schema(description = "供应商/客户名称id")
private Long subject;
@Schema(description = "部门id", example = "10183")
private Long deptId;
@Schema(description = "对方合同编号")
private String contractNo;
@Schema(description = "签订地点")
private String contractSigned;
@Schema(description = "签订时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] contractSignedTime;
@Schema(description = "关联业务线", example = "32066")
private Long businessId;
@Schema(description = "业务类型", example = "2")
private String businessType;
@Schema(description = "申报时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] declarationTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 合同信息 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractRespVO extends ContractBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "367")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.contract.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 合同信息更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractUpdateReqVO extends ContractBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "367")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,102 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.common.pojo.CommonResult;
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo.ContractInfoDO;
import com.yunxi.scm.module.xxjj.convert.contractinfo.ContractInfoConvert;
import com.yunxi.scm.module.xxjj.service.contractinfo.ContractInfoService;
@Tag(name = "管理后台 - 合同信息")
@RestController
@RequestMapping("/xxjj/contract-info")
@Validated
public class ContractInfoController {
@Resource
private ContractInfoService contractInfoService;
@PostMapping("/create")
@Operation(summary = "创建合同信息")
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:create')")
public CommonResult<Long> createContractInfo(@Valid @RequestBody ContractInfoCreateReqVO createReqVO) {
return success(contractInfoService.createContractInfo(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新合同信息")
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:update')")
public CommonResult<Boolean> updateContractInfo(@Valid @RequestBody ContractInfoUpdateReqVO updateReqVO) {
contractInfoService.updateContractInfo(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除合同信息")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:delete')")
public CommonResult<Boolean> deleteContractInfo(@RequestParam("id") Long id) {
contractInfoService.deleteContractInfo(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得合同信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:query')")
public CommonResult<ContractInfoRespVO> getContractInfo(@RequestParam("id") Long id) {
ContractInfoDO contractInfo = contractInfoService.getContractInfo(id);
return success(ContractInfoConvert.INSTANCE.convert(contractInfo));
}
@GetMapping("/list")
@Operation(summary = "获得合同信息列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:query')")
public CommonResult<List<ContractInfoRespVO>> getContractInfoList(@RequestParam("ids") Collection<Long> ids) {
List<ContractInfoDO> list = contractInfoService.getContractInfoList(ids);
return success(ContractInfoConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得合同信息分页")
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:query')")
public CommonResult<PageResult<ContractInfoRespVO>> getContractInfoPage(@Valid ContractInfoPageReqVO pageVO) {
PageResult<ContractInfoDO> pageResult = contractInfoService.getContractInfoPage(pageVO);
return success(ContractInfoConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出合同信息 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:contract-info:export')")
@OperateLog(type = EXPORT)
public void exportContractInfoExcel(@Valid ContractInfoExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<ContractInfoDO> list = contractInfoService.getContractInfoList(exportReqVO);
// 导出 Excel
List<ContractInfoExcelVO> datas = ContractInfoConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "合同信息.xls", "数据", ContractInfoExcelVO.class, datas);
}
}

@ -0,0 +1,113 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class ContractInfoBaseVO {
@Schema(description = "关联合同id", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "关联合同id不能为空")
private Long contractInfo;
@Schema(description = "币种0人民币 1港币 2美元 3欧元 4加币 5日元 6台币", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "币种0人民币 1港币 2美元 3欧元 4加币 5日元 6台币不能为空")
private String currency;
@Schema(description = "采购模式0以销定采 1以采定销", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "采购模式0以销定采 1以采定销不能为空")
private String procurementModel;
@Schema(description = "定价模式0锁价模式 1后结算模式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "定价模式0锁价模式 1后结算模式不能为空")
private String pricingModel;
@Schema(description = "合同期限", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "合同期限不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime contractPeriodTime;
@Schema(description = "交货时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime deliveryTime;
@Schema(description = "交货方式0快递上门 1送货上门 2上门提货", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "交货方式0快递上门 1送货上门 2上门提货不能为空")
private String deliveryModel;
@Schema(description = "交货地点", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "交货地点不能为空")
private String deliveryLocation;
@Schema(description = "配送方式0仓配 1直送 2直通 3", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "配送方式0仓配 1直送 2直通 3不能为空")
private String deliveryMethod;
@Schema(description = "运输方式0公路 1铁路 2轮船 3空运 4", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "运输方式0公路 1铁路 2轮船 3空运 4不能为空")
private String modeTransport;
@Schema(description = "费用承担主体0甲方 1乙方", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "费用承担主体0甲方 1乙方不能为空")
private String costBearingMian;
@Schema(description = "合计金额(人民币)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "合计金额(人民币)不能为空")
private BigDecimal totalAmount;
@Schema(description = "大写金额(人民币)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "大写金额(人民币)不能为空")
private String amountCapitalization;
@Schema(description = "合同要求")
private String contractRequirement;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "合同附件")
private String contractAppendices;
@Schema(description = "附属文件")
private String ancillaryDocuments;
@Schema(description = "合同标签")
private String contractLabel;
@Schema(description = "长协合同", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "长协合同不能为空")
private String contractAgreement;
@Schema(description = "安全协议", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "安全协议不能为空")
private String securityProtocol;
@Schema(description = "扩展字段", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "扩展字段不能为空")
private String extendedField;
@Schema(description = "是否招投标0是 1", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否招投标0是 1不能为空")
private String bidding;
@Schema(description = "备注2")
private String remark2;
@Schema(description = "备注3")
private String remark3;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 合同信息创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractInfoCreateReqVO extends ContractInfoBaseVO {
}

@ -0,0 +1,100 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* Excel VO
*
* @author
*/
@Data
public class ContractInfoExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("关联合同id")
private Long contractInfo;
@ExcelProperty("币种0人民币 1港币 2美元 3欧元 4加币 5日元 6台币")
private String currency;
@ExcelProperty("采购模式0以销定采 1以采定销")
private String procurementModel;
@ExcelProperty("定价模式0锁价模式 1后结算模式")
private String pricingModel;
@ExcelProperty("合同期限")
private LocalDateTime contractPeriodTime;
@ExcelProperty("交货时间")
private LocalDateTime deliveryTime;
@ExcelProperty("交货方式0快递上门 1送货上门 2上门提货")
private String deliveryModel;
@ExcelProperty("交货地点")
private String deliveryLocation;
@ExcelProperty("配送方式0仓配 1直送 2直通 3")
private String deliveryMethod;
@ExcelProperty("运输方式0公路 1铁路 2轮船 3空运 4")
private String modeTransport;
@ExcelProperty("费用承担主体0甲方 1乙方")
private String costBearingMian;
@ExcelProperty("合计金额(人民币)")
private BigDecimal totalAmount;
@ExcelProperty("大写金额(人民币)")
private String amountCapitalization;
@ExcelProperty("合同要求")
private String contractRequirement;
@ExcelProperty("备注")
private String remark;
@ExcelProperty("合同附件")
private String contractAppendices;
@ExcelProperty("附属文件")
private String ancillaryDocuments;
@ExcelProperty("合同标签")
private String contractLabel;
@ExcelProperty("长协合同")
private String contractAgreement;
@ExcelProperty("安全协议")
private String securityProtocol;
@ExcelProperty("扩展字段")
private String extendedField;
@ExcelProperty("是否招投标0是 1")
private String bidding;
@ExcelProperty("备注2")
private String remark2;
@ExcelProperty("备注3")
private String remark3;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,96 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import lombok.*;
import java.math.BigDecimal;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 合同信息 Excel 导出 Request VO参数和 ContractInfoPageReqVO 是一致的")
@Data
public class ContractInfoExportReqVO {
@Schema(description = "关联合同id")
private Long contractInfo;
@Schema(description = "币种0人民币 1港币 2美元 3欧元 4加币 5日元 6台币")
private String currency;
@Schema(description = "采购模式0以销定采 1以采定销")
private String procurementModel;
@Schema(description = "定价模式0锁价模式 1后结算模式")
private String pricingModel;
@Schema(description = "合同期限")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] contractPeriodTime;
@Schema(description = "交货时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] deliveryTime;
@Schema(description = "交货方式0快递上门 1送货上门 2上门提货")
private String deliveryModel;
@Schema(description = "交货地点")
private String deliveryLocation;
@Schema(description = "配送方式0仓配 1直送 2直通 3")
private String deliveryMethod;
@Schema(description = "运输方式0公路 1铁路 2轮船 3空运 4")
private String modeTransport;
@Schema(description = "费用承担主体0甲方 1乙方")
private String costBearingMian;
@Schema(description = "合计金额(人民币)")
private BigDecimal totalAmount;
@Schema(description = "大写金额(人民币)")
private String amountCapitalization;
@Schema(description = "合同要求")
private String contractRequirement;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "合同附件")
private String contractAppendices;
@Schema(description = "附属文件")
private String ancillaryDocuments;
@Schema(description = "合同标签")
private String contractLabel;
@Schema(description = "长协合同")
private String contractAgreement;
@Schema(description = "安全协议")
private String securityProtocol;
@Schema(description = "扩展字段")
private String extendedField;
@Schema(description = "是否招投标0是 1")
private String bidding;
@Schema(description = "备注2")
private String remark2;
@Schema(description = "备注3")
private String remark3;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,98 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import lombok.*;
import java.math.BigDecimal;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 合同信息分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractInfoPageReqVO extends PageParam {
@Schema(description = "关联合同id")
private Long contractInfo;
@Schema(description = "币种0人民币 1港币 2美元 3欧元 4加币 5日元 6台币")
private String currency;
@Schema(description = "采购模式0以销定采 1以采定销")
private String procurementModel;
@Schema(description = "定价模式0锁价模式 1后结算模式")
private String pricingModel;
@Schema(description = "合同期限")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] contractPeriodTime;
@Schema(description = "交货时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] deliveryTime;
@Schema(description = "交货方式0快递上门 1送货上门 2上门提货")
private String deliveryModel;
@Schema(description = "交货地点")
private String deliveryLocation;
@Schema(description = "配送方式0仓配 1直送 2直通 3")
private String deliveryMethod;
@Schema(description = "运输方式0公路 1铁路 2轮船 3空运 4")
private String modeTransport;
@Schema(description = "费用承担主体0甲方 1乙方")
private String costBearingMian;
@Schema(description = "合计金额(人民币)")
private BigDecimal totalAmount;
@Schema(description = "大写金额(人民币)")
private String amountCapitalization;
@Schema(description = "合同要求")
private String contractRequirement;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "合同附件")
private String contractAppendices;
@Schema(description = "附属文件")
private String ancillaryDocuments;
@Schema(description = "合同标签")
private String contractLabel;
@Schema(description = "长协合同")
private String contractAgreement;
@Schema(description = "安全协议")
private String securityProtocol;
@Schema(description = "扩展字段")
private String extendedField;
@Schema(description = "是否招投标0是 1")
private String bidding;
@Schema(description = "备注2")
private String remark2;
@Schema(description = "备注3")
private String remark3;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 合同信息 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractInfoRespVO extends ContractInfoBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21063")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 合同信息更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ContractInfoUpdateReqVO extends ContractInfoBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21063")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,102 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.common.pojo.CommonResult;
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO;
import com.yunxi.scm.module.xxjj.convert.subjectfollowmanagement.SubjectFollowManagementConvert;
import com.yunxi.scm.module.xxjj.service.subjectfollowmanagement.SubjectFollowManagementService;
@Tag(name = "管理后台 - 主体跟进管理")
@RestController
@RequestMapping("/xxjj/subject-follow-management")
@Validated
public class SubjectFollowManagementController {
@Resource
private SubjectFollowManagementService subjectFollowManagementService;
@PostMapping("/create")
@Operation(summary = "创建主体跟进管理")
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:create')")
public CommonResult<Long> createSubjectFollowManagement(@Valid @RequestBody SubjectFollowManagementCreateReqVO createReqVO) {
return success(subjectFollowManagementService.createSubjectFollowManagement(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新主体跟进管理")
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:update')")
public CommonResult<Boolean> updateSubjectFollowManagement(@Valid @RequestBody SubjectFollowManagementUpdateReqVO updateReqVO) {
subjectFollowManagementService.updateSubjectFollowManagement(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除主体跟进管理")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:delete')")
public CommonResult<Boolean> deleteSubjectFollowManagement(@RequestParam("id") Long id) {
subjectFollowManagementService.deleteSubjectFollowManagement(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得主体跟进管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:query')")
public CommonResult<SubjectFollowManagementRespVO> getSubjectFollowManagement(@RequestParam("id") Long id) {
SubjectFollowManagementDO subjectFollowManagement = subjectFollowManagementService.getSubjectFollowManagement(id);
return success(SubjectFollowManagementConvert.INSTANCE.convert(subjectFollowManagement));
}
@GetMapping("/list")
@Operation(summary = "获得主体跟进管理列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:query')")
public CommonResult<List<SubjectFollowManagementRespVO>> getSubjectFollowManagementList(@RequestParam("ids") Collection<Long> ids) {
List<SubjectFollowManagementDO> list = subjectFollowManagementService.getSubjectFollowManagementList(ids);
return success(SubjectFollowManagementConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得主体跟进管理分页")
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:query')")
public CommonResult<PageResult<SubjectFollowManagementRespVO>> getSubjectFollowManagementPage(@Valid SubjectFollowManagementPageReqVO pageVO) {
PageResult<SubjectFollowManagementDO> pageResult = subjectFollowManagementService.getSubjectFollowManagementPage(pageVO);
return success(SubjectFollowManagementConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出主体跟进管理 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:subject-follow-management:export')")
@OperateLog(type = EXPORT)
public void exportSubjectFollowManagementExcel(@Valid SubjectFollowManagementExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<SubjectFollowManagementDO> list = subjectFollowManagementService.getSubjectFollowManagementList(exportReqVO);
// 导出 Excel
List<SubjectFollowManagementExcelVO> datas = SubjectFollowManagementConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "主体跟进管理.xls", "数据", SubjectFollowManagementExcelVO.class, datas);
}
}

@ -0,0 +1,64 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class SubjectFollowManagementBaseVO {
@Schema(description = "业务id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10252")
@NotNull(message = "业务id不能为空")
private Long businessId;
@Schema(description = "代表人类型(0客户 1供应商 2服务商)", example = "2")
private String businessType;
@Schema(description = "任务标题")
private String title;
@Schema(description = "身份证号")
private String idCard;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
@Schema(description = "负责人员")
private String responsible;
@Schema(description = "参与人员")
private String partake;
@Schema(description = "标记颜色")
private String mark;
@Schema(description = "紧要程度(0重要 1紧急 2普通 3较低)")
private String urgency;
@Schema(description = "提醒类型(0准时提醒 1提前5分钟 2提前15分钟 3提前30分钟 4提前1小时)", example = "1")
private String remindType;
@Schema(description = "任务描述", example = "你猜")
private String description;
@Schema(description = "附件")
private String annex;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 主体跟进管理创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SubjectFollowManagementCreateReqVO extends SubjectFollowManagementBaseVO {
}

@ -0,0 +1,66 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* Excel VO
*
* @author
*/
@Data
public class SubjectFollowManagementExcelVO {
@ExcelProperty("主键id")
private Long id;
@ExcelProperty("业务id")
private Long businessId;
@ExcelProperty("代表人类型(0客户 1供应商 2服务商)")
private String businessType;
@ExcelProperty("任务标题")
private String title;
@ExcelProperty("身份证号")
private String idCard;
@ExcelProperty("开始时间")
private LocalDateTime startTime;
@ExcelProperty("结束时间")
private LocalDateTime endTime;
@ExcelProperty("负责人员")
private String responsible;
@ExcelProperty("参与人员")
private String partake;
@ExcelProperty("标记颜色")
private String mark;
@ExcelProperty("紧要程度(0重要 1紧急 2普通 3较低)")
private String urgency;
@ExcelProperty("提醒类型(0准时提醒 1提前5分钟 2提前15分钟 3提前30分钟 4提前1小时)")
private String remindType;
@ExcelProperty("任务描述")
private String description;
@ExcelProperty("附件")
private String annex;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,61 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 主体跟进管理 Excel 导出 Request VO参数和 SubjectFollowManagementPageReqVO 是一致的")
@Data
public class SubjectFollowManagementExportReqVO {
@Schema(description = "业务id", example = "10252")
private Long businessId;
@Schema(description = "代表人类型(0客户 1供应商 2服务商)", example = "2")
private String businessType;
@Schema(description = "任务标题")
private String title;
@Schema(description = "身份证号")
private String idCard;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "负责人员")
private String responsible;
@Schema(description = "参与人员")
private String partake;
@Schema(description = "标记颜色")
private String mark;
@Schema(description = "紧要程度(0重要 1紧急 2普通 3较低)")
private String urgency;
@Schema(description = "提醒类型(0准时提醒 1提前5分钟 2提前15分钟 3提前30分钟 4提前1小时)", example = "1")
private String remindType;
@Schema(description = "任务描述", example = "你猜")
private String description;
@Schema(description = "附件")
private String annex;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,72 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yunxi.scm.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 主体跟进管理分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SubjectFollowManagementPageReqVO extends PageParam {
@Schema(description = "业务id", example = "10252")
private Long businessId;
@Schema(description = "代表人类型(0客户 1供应商 2服务商)", example = "2")
private String businessType;
@Schema(description = "分类(0一级 1二级 2三级)", example = "2")
private String calssify;
@Schema(description = "行业分类(0家用电器 1交通运输 2商务服务 3家具用品 4电工电气 5通信产品 6办公文教 7运动休闲 8传媒广电)", example = "2")
private String industryClassify;
@Schema(description = "企业性质(0国有企业 1集体企业 2私营企业 3股份制企业 4外资企业 5合资企业)", example = "2")
private String enterpriseNature;
@Schema(description = "任务标题")
private String title;
@Schema(description = "身份证号")
private String idCard;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] startTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "负责人员")
private String responsible;
@Schema(description = "参与人员")
private String partake;
@Schema(description = "标记颜色")
private String mark;
@Schema(description = "紧要程度(0重要 1紧急 2普通 3较低)")
private String urgency;
@Schema(description = "提醒类型(0准时提醒 1提前5分钟 2提前15分钟 3提前30分钟 4提前1小时)", example = "1")
private String remindType;
@Schema(description = "任务描述", example = "你猜")
private String description;
@Schema(description = "附件")
private String annex;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 主体跟进管理 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SubjectFollowManagementRespVO extends SubjectFollowManagementBaseVO {
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23298")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 主体跟进管理更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SubjectFollowManagementUpdateReqVO extends SubjectFollowManagementBaseVO {
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23298")
@NotNull(message = "主键id不能为空")
private Long id;
}

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.contract;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.yunxi.scm.module.xxjj.controller.admin.contract.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contract.ContractDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface ContractConvert {
ContractConvert INSTANCE = Mappers.getMapper(ContractConvert.class);
ContractDO convert(ContractCreateReqVO bean);
ContractDO convert(ContractUpdateReqVO bean);
ContractRespVO convert(ContractDO bean);
List<ContractRespVO> convertList(List<ContractDO> list);
PageResult<ContractRespVO> convertPage(PageResult<ContractDO> page);
List<ContractExcelVO> convertList02(List<ContractDO> list);
}

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.contractinfo;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo.ContractInfoDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface ContractInfoConvert {
ContractInfoConvert INSTANCE = Mappers.getMapper(ContractInfoConvert.class);
ContractInfoDO convert(ContractInfoCreateReqVO bean);
ContractInfoDO convert(ContractInfoUpdateReqVO bean);
ContractInfoRespVO convert(ContractInfoDO bean);
List<ContractInfoRespVO> convertList(List<ContractInfoDO> list);
PageResult<ContractInfoRespVO> convertPage(PageResult<ContractInfoDO> page);
List<ContractInfoExcelVO> convertList02(List<ContractInfoDO> list);
}

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.subjectfollowmanagement;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface SubjectFollowManagementConvert {
SubjectFollowManagementConvert INSTANCE = Mappers.getMapper(SubjectFollowManagementConvert.class);
SubjectFollowManagementDO convert(SubjectFollowManagementCreateReqVO bean);
SubjectFollowManagementDO convert(SubjectFollowManagementUpdateReqVO bean);
SubjectFollowManagementRespVO convert(SubjectFollowManagementDO bean);
List<SubjectFollowManagementRespVO> convertList(List<SubjectFollowManagementDO> list);
PageResult<SubjectFollowManagementRespVO> convertPage(PageResult<SubjectFollowManagementDO> page);
List<SubjectFollowManagementExcelVO> convertList02(List<SubjectFollowManagementDO> list);
}

@ -0,0 +1,91 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.contract;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("xxjj_contract")
@KeySequence("xxjj_contract_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContractDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*
* {@link TODO contract_status }
*/
private String contractStatus;
/**
*
*
* {@link TODO contract_type }
*/
private String contractType;
/**
*
*/
private Long contractTemplateId;
/**
*
*/
private Long contractNumber;
/**
*
*/
private String contractName;
/**
* /id
*/
private Long subject;
/**
* id
*/
private Long deptId;
/**
*
*/
private String contractNo;
/**
*
*/
private String contractSigned;
/**
*
*/
private LocalDateTime contractSignedTime;
/**
* 线
*/
private Long businessId;
/**
*
*
* {@link TODO contract_business_type }
*/
private String businessType;
/**
*
*/
private LocalDateTime declarationTime;
}

@ -0,0 +1,130 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("xxjj_contract_info")
@KeySequence("xxjj_contract_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContractInfoDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
* id
*/
private Long contractInfo;
/**
* 0 1 2 3 4 5 6
*/
private String currency;
/**
* 0 1
*/
private String procurementModel;
/**
* 0 1
*/
private String pricingModel;
/**
*
*/
private LocalDateTime contractPeriodTime;
/**
*
*/
private LocalDateTime deliveryTime;
/**
* 0 1 2
*/
private String deliveryModel;
/**
*
*/
private String deliveryLocation;
/**
* 0 1 2 3
*/
private String deliveryMethod;
/**
* 0 1 2 3 4
*/
private String modeTransport;
/**
* 0 1
*/
private String costBearingMian;
/**
*
*/
private BigDecimal totalAmount;
/**
*
*/
private String amountCapitalization;
/**
*
*/
private String contractRequirement;
/**
*
*/
private String remark;
/**
*
*/
private String contractAppendices;
/**
*
*/
private String ancillaryDocuments;
/**
*
*/
private String contractLabel;
/**
*
*/
private String contractAgreement;
/**
*
*/
private String securityProtocol;
/**
*
*/
private String extendedField;
/**
* 0 1
*/
private String bidding;
/**
* 2
*/
private String remark2;
/**
* 3
*/
private String remark3;
}

@ -0,0 +1,85 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("xxjj_subject_follow_management")
@KeySequence("xxjj_subject_follow_management_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SubjectFollowManagementDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* id
*/
private Long businessId;
/**
* (0 1 2)
*/
private String businessType;
/**
*
*/
private String title;
/**
*
*/
private String idCard;
/**
*
*/
private LocalDateTime startTime;
/**
*
*/
private LocalDateTime endTime;
/**
*
*/
private String responsible;
/**
*
*/
private String partake;
/**
*
*/
private String mark;
/**
* (0 1 2 3)
*/
private String urgency;
/**
* (0 15 215 330 41)
*/
private String remindType;
/**
*
*/
private String description;
/**
*
*/
private String annex;
}

@ -0,0 +1,58 @@
package com.yunxi.scm.module.xxjj.dal.mysql.contract;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.scm.module.xxjj.dal.dataobject.contract.ContractDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.contract.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ContractMapper extends BaseMapperX<ContractDO> {
default PageResult<ContractDO> selectPage(ContractPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ContractDO>()
.eqIfPresent(ContractDO::getContractStatus, reqVO.getContractStatus())
.eqIfPresent(ContractDO::getContractType, reqVO.getContractType())
.eqIfPresent(ContractDO::getContractTemplateId, reqVO.getContractTemplateId())
.eqIfPresent(ContractDO::getContractNumber, reqVO.getContractNumber())
.likeIfPresent(ContractDO::getContractName, reqVO.getContractName())
.eqIfPresent(ContractDO::getSubject, reqVO.getSubject())
.eqIfPresent(ContractDO::getDeptId, reqVO.getDeptId())
.eqIfPresent(ContractDO::getContractNo, reqVO.getContractNo())
.eqIfPresent(ContractDO::getContractSigned, reqVO.getContractSigned())
.betweenIfPresent(ContractDO::getContractSignedTime, reqVO.getContractSignedTime())
.eqIfPresent(ContractDO::getBusinessId, reqVO.getBusinessId())
.eqIfPresent(ContractDO::getBusinessType, reqVO.getBusinessType())
.betweenIfPresent(ContractDO::getDeclarationTime, reqVO.getDeclarationTime())
.betweenIfPresent(ContractDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ContractDO::getId));
}
default List<ContractDO> selectList(ContractExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<ContractDO>()
.eqIfPresent(ContractDO::getContractStatus, reqVO.getContractStatus())
.eqIfPresent(ContractDO::getContractType, reqVO.getContractType())
.eqIfPresent(ContractDO::getContractTemplateId, reqVO.getContractTemplateId())
.eqIfPresent(ContractDO::getContractNumber, reqVO.getContractNumber())
.likeIfPresent(ContractDO::getContractName, reqVO.getContractName())
.eqIfPresent(ContractDO::getSubject, reqVO.getSubject())
.eqIfPresent(ContractDO::getDeptId, reqVO.getDeptId())
.eqIfPresent(ContractDO::getContractNo, reqVO.getContractNo())
.eqIfPresent(ContractDO::getContractSigned, reqVO.getContractSigned())
.betweenIfPresent(ContractDO::getContractSignedTime, reqVO.getContractSignedTime())
.eqIfPresent(ContractDO::getBusinessId, reqVO.getBusinessId())
.eqIfPresent(ContractDO::getBusinessType, reqVO.getBusinessType())
.betweenIfPresent(ContractDO::getDeclarationTime, reqVO.getDeclarationTime())
.betweenIfPresent(ContractDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ContractDO::getId));
}
}

@ -0,0 +1,80 @@
package com.yunxi.scm.module.xxjj.dal.mysql.contractinfo;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo.ContractInfoDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ContractInfoMapper extends BaseMapperX<ContractInfoDO> {
default PageResult<ContractInfoDO> selectPage(ContractInfoPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ContractInfoDO>()
.eqIfPresent(ContractInfoDO::getContractInfo, reqVO.getContractInfo())
.eqIfPresent(ContractInfoDO::getCurrency, reqVO.getCurrency())
.eqIfPresent(ContractInfoDO::getProcurementModel, reqVO.getProcurementModel())
.eqIfPresent(ContractInfoDO::getPricingModel, reqVO.getPricingModel())
.betweenIfPresent(ContractInfoDO::getContractPeriodTime, reqVO.getContractPeriodTime())
.betweenIfPresent(ContractInfoDO::getDeliveryTime, reqVO.getDeliveryTime())
.eqIfPresent(ContractInfoDO::getDeliveryModel, reqVO.getDeliveryModel())
.eqIfPresent(ContractInfoDO::getDeliveryLocation, reqVO.getDeliveryLocation())
.eqIfPresent(ContractInfoDO::getDeliveryMethod, reqVO.getDeliveryMethod())
.eqIfPresent(ContractInfoDO::getModeTransport, reqVO.getModeTransport())
.eqIfPresent(ContractInfoDO::getCostBearingMian, reqVO.getCostBearingMian())
.eqIfPresent(ContractInfoDO::getTotalAmount, reqVO.getTotalAmount())
.eqIfPresent(ContractInfoDO::getAmountCapitalization, reqVO.getAmountCapitalization())
.eqIfPresent(ContractInfoDO::getContractRequirement, reqVO.getContractRequirement())
.eqIfPresent(ContractInfoDO::getRemark, reqVO.getRemark())
.eqIfPresent(ContractInfoDO::getContractAppendices, reqVO.getContractAppendices())
.eqIfPresent(ContractInfoDO::getAncillaryDocuments, reqVO.getAncillaryDocuments())
.eqIfPresent(ContractInfoDO::getContractLabel, reqVO.getContractLabel())
.eqIfPresent(ContractInfoDO::getContractAgreement, reqVO.getContractAgreement())
.eqIfPresent(ContractInfoDO::getSecurityProtocol, reqVO.getSecurityProtocol())
.eqIfPresent(ContractInfoDO::getExtendedField, reqVO.getExtendedField())
.eqIfPresent(ContractInfoDO::getBidding, reqVO.getBidding())
.eqIfPresent(ContractInfoDO::getRemark2, reqVO.getRemark2())
.eqIfPresent(ContractInfoDO::getRemark3, reqVO.getRemark3())
.betweenIfPresent(ContractInfoDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ContractInfoDO::getId));
}
default List<ContractInfoDO> selectList(ContractInfoExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<ContractInfoDO>()
.eqIfPresent(ContractInfoDO::getContractInfo, reqVO.getContractInfo())
.eqIfPresent(ContractInfoDO::getCurrency, reqVO.getCurrency())
.eqIfPresent(ContractInfoDO::getProcurementModel, reqVO.getProcurementModel())
.eqIfPresent(ContractInfoDO::getPricingModel, reqVO.getPricingModel())
.betweenIfPresent(ContractInfoDO::getContractPeriodTime, reqVO.getContractPeriodTime())
.betweenIfPresent(ContractInfoDO::getDeliveryTime, reqVO.getDeliveryTime())
.eqIfPresent(ContractInfoDO::getDeliveryModel, reqVO.getDeliveryModel())
.eqIfPresent(ContractInfoDO::getDeliveryLocation, reqVO.getDeliveryLocation())
.eqIfPresent(ContractInfoDO::getDeliveryMethod, reqVO.getDeliveryMethod())
.eqIfPresent(ContractInfoDO::getModeTransport, reqVO.getModeTransport())
.eqIfPresent(ContractInfoDO::getCostBearingMian, reqVO.getCostBearingMian())
.eqIfPresent(ContractInfoDO::getTotalAmount, reqVO.getTotalAmount())
.eqIfPresent(ContractInfoDO::getAmountCapitalization, reqVO.getAmountCapitalization())
.eqIfPresent(ContractInfoDO::getContractRequirement, reqVO.getContractRequirement())
.eqIfPresent(ContractInfoDO::getRemark, reqVO.getRemark())
.eqIfPresent(ContractInfoDO::getContractAppendices, reqVO.getContractAppendices())
.eqIfPresent(ContractInfoDO::getAncillaryDocuments, reqVO.getAncillaryDocuments())
.eqIfPresent(ContractInfoDO::getContractLabel, reqVO.getContractLabel())
.eqIfPresent(ContractInfoDO::getContractAgreement, reqVO.getContractAgreement())
.eqIfPresent(ContractInfoDO::getSecurityProtocol, reqVO.getSecurityProtocol())
.eqIfPresent(ContractInfoDO::getExtendedField, reqVO.getExtendedField())
.eqIfPresent(ContractInfoDO::getBidding, reqVO.getBidding())
.eqIfPresent(ContractInfoDO::getRemark2, reqVO.getRemark2())
.eqIfPresent(ContractInfoDO::getRemark3, reqVO.getRemark3())
.betweenIfPresent(ContractInfoDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ContractInfoDO::getId));
}
}

@ -0,0 +1,58 @@
package com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowmanagement;
import java.util.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface SubjectFollowManagementMapper extends BaseMapperX<SubjectFollowManagementDO> {
default PageResult<SubjectFollowManagementDO> selectPage(SubjectFollowManagementPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<SubjectFollowManagementDO>()
.eqIfPresent(SubjectFollowManagementDO::getBusinessId, reqVO.getBusinessId())
.eqIfPresent(SubjectFollowManagementDO::getBusinessType, reqVO.getBusinessType())
.eqIfPresent(SubjectFollowManagementDO::getTitle, reqVO.getTitle())
.eqIfPresent(SubjectFollowManagementDO::getIdCard, reqVO.getIdCard())
.betweenIfPresent(SubjectFollowManagementDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(SubjectFollowManagementDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(SubjectFollowManagementDO::getResponsible, reqVO.getResponsible())
.eqIfPresent(SubjectFollowManagementDO::getPartake, reqVO.getPartake())
.eqIfPresent(SubjectFollowManagementDO::getMark, reqVO.getMark())
.eqIfPresent(SubjectFollowManagementDO::getUrgency, reqVO.getUrgency())
.eqIfPresent(SubjectFollowManagementDO::getRemindType, reqVO.getRemindType())
.eqIfPresent(SubjectFollowManagementDO::getDescription, reqVO.getDescription())
.eqIfPresent(SubjectFollowManagementDO::getAnnex, reqVO.getAnnex())
.betweenIfPresent(SubjectFollowManagementDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(SubjectFollowManagementDO::getId));
}
default List<SubjectFollowManagementDO> selectList(SubjectFollowManagementExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<SubjectFollowManagementDO>()
.eqIfPresent(SubjectFollowManagementDO::getBusinessId, reqVO.getBusinessId())
.eqIfPresent(SubjectFollowManagementDO::getBusinessType, reqVO.getBusinessType())
.eqIfPresent(SubjectFollowManagementDO::getTitle, reqVO.getTitle())
.eqIfPresent(SubjectFollowManagementDO::getIdCard, reqVO.getIdCard())
.betweenIfPresent(SubjectFollowManagementDO::getStartTime, reqVO.getStartTime())
.betweenIfPresent(SubjectFollowManagementDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(SubjectFollowManagementDO::getResponsible, reqVO.getResponsible())
.eqIfPresent(SubjectFollowManagementDO::getPartake, reqVO.getPartake())
.eqIfPresent(SubjectFollowManagementDO::getMark, reqVO.getMark())
.eqIfPresent(SubjectFollowManagementDO::getUrgency, reqVO.getUrgency())
.eqIfPresent(SubjectFollowManagementDO::getRemindType, reqVO.getRemindType())
.eqIfPresent(SubjectFollowManagementDO::getDescription, reqVO.getDescription())
.eqIfPresent(SubjectFollowManagementDO::getAnnex, reqVO.getAnnex())
.betweenIfPresent(SubjectFollowManagementDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(SubjectFollowManagementDO::getId));
}
}

@ -1,6 +1,5 @@
package com.yunxi.scm.module.xxjj.service.businessline;
import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO;
import com.yunxi.scm.module.xxjj.dal.mysql.customer.CustomerMapper;
import com.yunxi.scm.module.xxjj.dal.mysql.warehouse.WarehouseMapper;

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.contract;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.contract.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contract.ContractDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface ContractService {
/**
*
*
* @param createReqVO
* @return
*/
Long createContract(@Valid ContractCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateContract(@Valid ContractUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteContract(Long id);
/**
*
*
* @param id
* @return
*/
ContractDO getContract(Long id);
/**
*
*
* @param ids
* @return
*/
List<ContractDO> getContractList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<ContractDO> getContractPage(ContractPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<ContractDO> getContractList(ContractExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.contract;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.yunxi.scm.module.xxjj.controller.admin.contract.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contract.ContractDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.contract.ContractConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.contract.ContractMapper;
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class ContractServiceImpl implements ContractService {
@Resource
private ContractMapper contractMapper;
@Override
public Long createContract(ContractCreateReqVO createReqVO) {
// 插入
ContractDO contract = ContractConvert.INSTANCE.convert(createReqVO);
contractMapper.insert(contract);
// 返回
return contract.getId();
}
@Override
public void updateContract(ContractUpdateReqVO updateReqVO) {
// 校验存在
validateContractExists(updateReqVO.getId());
// 更新
ContractDO updateObj = ContractConvert.INSTANCE.convert(updateReqVO);
contractMapper.updateById(updateObj);
}
@Override
public void deleteContract(Long id) {
// 校验存在
validateContractExists(id);
// 删除
contractMapper.deleteById(id);
}
private void validateContractExists(Long id) {
if (contractMapper.selectById(id) == null) {
throw exception(CONTRACT_NOT_EXISTS);
}
}
@Override
public ContractDO getContract(Long id) {
return contractMapper.selectById(id);
}
@Override
public List<ContractDO> getContractList(Collection<Long> ids) {
return contractMapper.selectBatchIds(ids);
}
@Override
public PageResult<ContractDO> getContractPage(ContractPageReqVO pageReqVO) {
return contractMapper.selectPage(pageReqVO);
}
@Override
public List<ContractDO> getContractList(ContractExportReqVO exportReqVO) {
return contractMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.contractinfo;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo.ContractInfoDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface ContractInfoService {
/**
*
*
* @param createReqVO
* @return
*/
Long createContractInfo(@Valid ContractInfoCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateContractInfo(@Valid ContractInfoUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteContractInfo(Long id);
/**
*
*
* @param id
* @return
*/
ContractInfoDO getContractInfo(Long id);
/**
*
*
* @param ids
* @return
*/
List<ContractInfoDO> getContractInfoList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<ContractInfoDO> getContractInfoPage(ContractInfoPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<ContractInfoDO> getContractInfoList(ContractInfoExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.contractinfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo.ContractInfoDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.contractinfo.ContractInfoConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.contractinfo.ContractInfoMapper;
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class ContractInfoServiceImpl implements ContractInfoService {
@Resource
private ContractInfoMapper contractInfoMapper;
@Override
public Long createContractInfo(ContractInfoCreateReqVO createReqVO) {
// 插入
ContractInfoDO contractInfo = ContractInfoConvert.INSTANCE.convert(createReqVO);
contractInfoMapper.insert(contractInfo);
// 返回
return contractInfo.getId();
}
@Override
public void updateContractInfo(ContractInfoUpdateReqVO updateReqVO) {
// 校验存在
validateContractInfoExists(updateReqVO.getId());
// 更新
ContractInfoDO updateObj = ContractInfoConvert.INSTANCE.convert(updateReqVO);
contractInfoMapper.updateById(updateObj);
}
@Override
public void deleteContractInfo(Long id) {
// 校验存在
validateContractInfoExists(id);
// 删除
contractInfoMapper.deleteById(id);
}
private void validateContractInfoExists(Long id) {
if (contractInfoMapper.selectById(id) == null) {
throw exception(CONTRACT_INFO_NOT_EXISTS);
}
}
@Override
public ContractInfoDO getContractInfo(Long id) {
return contractInfoMapper.selectById(id);
}
@Override
public List<ContractInfoDO> getContractInfoList(Collection<Long> ids) {
return contractInfoMapper.selectBatchIds(ids);
}
@Override
public PageResult<ContractInfoDO> getContractInfoPage(ContractInfoPageReqVO pageReqVO) {
return contractInfoMapper.selectPage(pageReqVO);
}
@Override
public List<ContractInfoDO> getContractInfoList(ContractInfoExportReqVO exportReqVO) {
return contractInfoMapper.selectList(exportReqVO);
}
}

@ -13,7 +13,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
import java.util.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.material.MaterialDO;
import com.yunxi.scm.module.xxjj.convert.material.MaterialConvert;

@ -1,6 +1,5 @@
package com.yunxi.scm.module.xxjj.service.materialcategory;
import com.yunxi.scm.framework.common.enums.CommonStatusEnum;
import com.yunxi.scm.module.xxjj.controller.admin.materialcategory.vo.MaterialCategoryCreateReqVO;
import com.yunxi.scm.module.xxjj.controller.admin.materialcategory.vo.MaterialCategoryListReqVO;
import com.yunxi.scm.module.xxjj.controller.admin.materialcategory.vo.MaterialCategoryUpdateReqVO;

@ -9,7 +9,7 @@ import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.yunxi.scm.module.xxjj.controller.admin.materialtype.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.materialtype.MaterialTypeDO;
import com.yunxi.scm.framework.common.pojo.PageResult;

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.subjectfollowmanagement;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface SubjectFollowManagementService {
/**
*
*
* @param createReqVO
* @return
*/
Long createSubjectFollowManagement(@Valid SubjectFollowManagementCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateSubjectFollowManagement(@Valid SubjectFollowManagementUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteSubjectFollowManagement(Long id);
/**
*
*
* @param id
* @return
*/
SubjectFollowManagementDO getSubjectFollowManagement(Long id);
/**
*
*
* @param ids
* @return
*/
List<SubjectFollowManagementDO> getSubjectFollowManagementList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<SubjectFollowManagementDO> getSubjectFollowManagementPage(SubjectFollowManagementPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<SubjectFollowManagementDO> getSubjectFollowManagementList(SubjectFollowManagementExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.subjectfollowmanagement;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.subjectfollowmanagement.SubjectFollowManagementConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowmanagement.SubjectFollowManagementMapper;
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class SubjectFollowManagementServiceImpl implements SubjectFollowManagementService {
@Resource
private SubjectFollowManagementMapper subjectFollowManagementMapper;
@Override
public Long createSubjectFollowManagement(SubjectFollowManagementCreateReqVO createReqVO) {
// 插入
SubjectFollowManagementDO subjectFollowManagement = SubjectFollowManagementConvert.INSTANCE.convert(createReqVO);
subjectFollowManagementMapper.insert(subjectFollowManagement);
// 返回
return subjectFollowManagement.getId();
}
@Override
public void updateSubjectFollowManagement(SubjectFollowManagementUpdateReqVO updateReqVO) {
// 校验存在
validateSubjectFollowManagementExists(updateReqVO.getId());
// 更新
SubjectFollowManagementDO updateObj = SubjectFollowManagementConvert.INSTANCE.convert(updateReqVO);
subjectFollowManagementMapper.updateById(updateObj);
}
@Override
public void deleteSubjectFollowManagement(Long id) {
// 校验存在
validateSubjectFollowManagementExists(id);
// 删除
subjectFollowManagementMapper.deleteById(id);
}
private void validateSubjectFollowManagementExists(Long id) {
if (subjectFollowManagementMapper.selectById(id) == null) {
throw exception(SUBJECT_FOLLOW_MANAGEMENT_NOT_EXISTS);
}
}
@Override
public SubjectFollowManagementDO getSubjectFollowManagement(Long id) {
return subjectFollowManagementMapper.selectById(id);
}
@Override
public List<SubjectFollowManagementDO> getSubjectFollowManagementList(Collection<Long> ids) {
return subjectFollowManagementMapper.selectBatchIds(ids);
}
@Override
public PageResult<SubjectFollowManagementDO> getSubjectFollowManagementPage(SubjectFollowManagementPageReqVO pageReqVO) {
return subjectFollowManagementMapper.selectPage(pageReqVO);
}
@Override
public List<SubjectFollowManagementDO> getSubjectFollowManagementList(SubjectFollowManagementExportReqVO exportReqVO) {
return subjectFollowManagementMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,12 @@
<?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.yunxi.scm.module.xxjj.dal.mysql.contract.ContractMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?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.yunxi.scm.module.xxjj.dal.mysql.contractinfo.ContractInfoMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?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.yunxi.scm.module.xxjj.dal.mysql.subjectfollowmanagement.SubjectFollowManagementMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.brandlibrary;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.brandlibrary.BrandLibraryDO;
import com.yunxi.scm.module.xxjj.dal.mysql.brandlibrary.BrandLibraryMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link BrandLibraryServiceImpl}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.businessline;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO;
import com.yunxi.scm.module.xxjj.dal.mysql.businessline.BusinessLineMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link BusinessLineServiceImpl}

@ -0,0 +1,255 @@
package com.yunxi.scm.module.xxjj.service.contract;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.contract.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contract.ContractDO;
import com.yunxi.scm.module.xxjj.dal.mysql.contract.ContractMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link ContractServiceImpl}
*
* @author
*/
@Import(ContractServiceImpl.class)
public class ContractServiceImplTest extends BaseDbUnitTest {
@Resource
private ContractServiceImpl contractService;
@Resource
private ContractMapper contractMapper;
@Test
public void testCreateContract_success() {
// 准备参数
ContractCreateReqVO reqVO = randomPojo(ContractCreateReqVO.class);
// 调用
Long contractId = contractService.createContract(reqVO);
// 断言
assertNotNull(contractId);
// 校验记录的属性是否正确
ContractDO contract = contractMapper.selectById(contractId);
assertPojoEquals(reqVO, contract);
}
@Test
public void testUpdateContract_success() {
// mock 数据
ContractDO dbContract = randomPojo(ContractDO.class);
contractMapper.insert(dbContract);// @Sql: 先插入出一条存在的数据
// 准备参数
ContractUpdateReqVO reqVO = randomPojo(ContractUpdateReqVO.class, o -> {
o.setId(dbContract.getId()); // 设置更新的 ID
});
// 调用
contractService.updateContract(reqVO);
// 校验是否更新正确
ContractDO contract = contractMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, contract);
}
@Test
public void testUpdateContract_notExists() {
// 准备参数
ContractUpdateReqVO reqVO = randomPojo(ContractUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> contractService.updateContract(reqVO), CONTRACT_NOT_EXISTS);
}
@Test
public void testDeleteContract_success() {
// mock 数据
ContractDO dbContract = randomPojo(ContractDO.class);
contractMapper.insert(dbContract);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbContract.getId();
// 调用
contractService.deleteContract(id);
// 校验数据不存在了
assertNull(contractMapper.selectById(id));
}
@Test
public void testDeleteContract_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> contractService.deleteContract(id), CONTRACT_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetContractPage() {
// mock 数据
ContractDO dbContract = randomPojo(ContractDO.class, o -> { // 等会查询到
o.setContractStatus(null);
o.setContractType(null);
o.setContractTemplateId(null);
o.setContractNumber(null);
o.setContractName(null);
o.setSubject(null);
o.setDeptId(null);
o.setContractNo(null);
o.setContractSigned(null);
o.setContractSignedTime(null);
o.setBusinessId(null);
o.setBusinessType(null);
o.setDeclarationTime(null);
o.setCreateTime(null);
});
contractMapper.insert(dbContract);
// 测试 contractStatus 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractStatus(null)));
// 测试 contractType 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractType(null)));
// 测试 contractTemplateId 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractTemplateId(null)));
// 测试 contractNumber 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractNumber(null)));
// 测试 contractName 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractName(null)));
// 测试 subject 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setSubject(null)));
// 测试 deptId 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setDeptId(null)));
// 测试 contractNo 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractNo(null)));
// 测试 contractSigned 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractSigned(null)));
// 测试 contractSignedTime 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractSignedTime(null)));
// 测试 businessId 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setBusinessId(null)));
// 测试 businessType 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setBusinessType(null)));
// 测试 declarationTime 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setDeclarationTime(null)));
// 测试 createTime 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setCreateTime(null)));
// 准备参数
ContractPageReqVO reqVO = new ContractPageReqVO();
reqVO.setContractStatus(null);
reqVO.setContractType(null);
reqVO.setContractTemplateId(null);
reqVO.setContractNumber(null);
reqVO.setContractName(null);
reqVO.setSubject(null);
reqVO.setDeptId(null);
reqVO.setContractNo(null);
reqVO.setContractSigned(null);
reqVO.setContractSignedTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setBusinessId(null);
reqVO.setBusinessType(null);
reqVO.setDeclarationTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<ContractDO> pageResult = contractService.getContractPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbContract, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetContractList() {
// mock 数据
ContractDO dbContract = randomPojo(ContractDO.class, o -> { // 等会查询到
o.setContractStatus(null);
o.setContractType(null);
o.setContractTemplateId(null);
o.setContractNumber(null);
o.setContractName(null);
o.setSubject(null);
o.setDeptId(null);
o.setContractNo(null);
o.setContractSigned(null);
o.setContractSignedTime(null);
o.setBusinessId(null);
o.setBusinessType(null);
o.setDeclarationTime(null);
o.setCreateTime(null);
});
contractMapper.insert(dbContract);
// 测试 contractStatus 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractStatus(null)));
// 测试 contractType 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractType(null)));
// 测试 contractTemplateId 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractTemplateId(null)));
// 测试 contractNumber 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractNumber(null)));
// 测试 contractName 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractName(null)));
// 测试 subject 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setSubject(null)));
// 测试 deptId 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setDeptId(null)));
// 测试 contractNo 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractNo(null)));
// 测试 contractSigned 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractSigned(null)));
// 测试 contractSignedTime 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setContractSignedTime(null)));
// 测试 businessId 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setBusinessId(null)));
// 测试 businessType 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setBusinessType(null)));
// 测试 declarationTime 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setDeclarationTime(null)));
// 测试 createTime 不匹配
contractMapper.insert(cloneIgnoreId(dbContract, o -> o.setCreateTime(null)));
// 准备参数
ContractExportReqVO reqVO = new ContractExportReqVO();
reqVO.setContractStatus(null);
reqVO.setContractType(null);
reqVO.setContractTemplateId(null);
reqVO.setContractNumber(null);
reqVO.setContractName(null);
reqVO.setSubject(null);
reqVO.setDeptId(null);
reqVO.setContractNo(null);
reqVO.setContractSigned(null);
reqVO.setContractSignedTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setBusinessId(null);
reqVO.setBusinessType(null);
reqVO.setDeclarationTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<ContractDO> list = contractService.getContractList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbContract, list.get(0));
}
}

@ -0,0 +1,337 @@
package com.yunxi.scm.module.xxjj.service.contractinfo;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.contractinfo.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.contractinfo.ContractInfoDO;
import com.yunxi.scm.module.xxjj.dal.mysql.contractinfo.ContractInfoMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
import java.util.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* {@link ContractInfoServiceImpl}
*
* @author
*/
@Import(ContractInfoServiceImpl.class)
public class ContractInfoServiceImplTest extends BaseDbUnitTest {
@Resource
private ContractInfoServiceImpl contractInfoService;
@Resource
private ContractInfoMapper contractInfoMapper;
@Test
public void testCreateContractInfo_success() {
// 准备参数
ContractInfoCreateReqVO reqVO = randomPojo(ContractInfoCreateReqVO.class);
// 调用
Long contractInfoId = contractInfoService.createContractInfo(reqVO);
// 断言
assertNotNull(contractInfoId);
// 校验记录的属性是否正确
ContractInfoDO contractInfo = contractInfoMapper.selectById(contractInfoId);
assertPojoEquals(reqVO, contractInfo);
}
@Test
public void testUpdateContractInfo_success() {
// mock 数据
ContractInfoDO dbContractInfo = randomPojo(ContractInfoDO.class);
contractInfoMapper.insert(dbContractInfo);// @Sql: 先插入出一条存在的数据
// 准备参数
ContractInfoUpdateReqVO reqVO = randomPojo(ContractInfoUpdateReqVO.class, o -> {
o.setId(dbContractInfo.getId()); // 设置更新的 ID
});
// 调用
contractInfoService.updateContractInfo(reqVO);
// 校验是否更新正确
ContractInfoDO contractInfo = contractInfoMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, contractInfo);
}
@Test
public void testUpdateContractInfo_notExists() {
// 准备参数
ContractInfoUpdateReqVO reqVO = randomPojo(ContractInfoUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> contractInfoService.updateContractInfo(reqVO), CONTRACT_INFO_NOT_EXISTS);
}
@Test
public void testDeleteContractInfo_success() {
// mock 数据
ContractInfoDO dbContractInfo = randomPojo(ContractInfoDO.class);
contractInfoMapper.insert(dbContractInfo);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbContractInfo.getId();
// 调用
contractInfoService.deleteContractInfo(id);
// 校验数据不存在了
assertNull(contractInfoMapper.selectById(id));
}
@Test
public void testDeleteContractInfo_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> contractInfoService.deleteContractInfo(id), CONTRACT_INFO_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetContractInfoPage() {
// mock 数据
ContractInfoDO dbContractInfo = randomPojo(ContractInfoDO.class, o -> { // 等会查询到
o.setContractInfo(null);
o.setCurrency(null);
o.setProcurementModel(null);
o.setPricingModel(null);
o.setContractPeriodTime(null);
o.setDeliveryTime(null);
o.setDeliveryModel(null);
o.setDeliveryLocation(null);
o.setDeliveryMethod(null);
o.setModeTransport(null);
o.setCostBearingMian(null);
o.setTotalAmount(null);
o.setAmountCapitalization(null);
o.setContractRequirement(null);
o.setRemark(null);
o.setContractAppendices(null);
o.setAncillaryDocuments(null);
o.setContractLabel(null);
o.setContractAgreement(null);
o.setSecurityProtocol(null);
o.setExtendedField(null);
o.setBidding(null);
o.setRemark2(null);
o.setRemark3(null);
o.setCreateTime(null);
});
contractInfoMapper.insert(dbContractInfo);
// 测试 contractInfo 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractInfo(null)));
// 测试 currency 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setCurrency(null)));
// 测试 procurementModel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setProcurementModel(null)));
// 测试 pricingModel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setPricingModel(null)));
// 测试 contractPeriodTime 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractPeriodTime(null)));
// 测试 deliveryTime 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryTime(null)));
// 测试 deliveryModel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryModel(null)));
// 测试 deliveryLocation 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryLocation(null)));
// 测试 deliveryMethod 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryMethod(null)));
// 测试 modeTransport 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setModeTransport(null)));
// 测试 costBearingMian 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setCostBearingMian(null)));
// 测试 totalAmount 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setTotalAmount(null)));
// 测试 amountCapitalization 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setAmountCapitalization(null)));
// 测试 contractRequirement 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractRequirement(null)));
// 测试 remark 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setRemark(null)));
// 测试 contractAppendices 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractAppendices(null)));
// 测试 ancillaryDocuments 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setAncillaryDocuments(null)));
// 测试 contractLabel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractLabel(null)));
// 测试 contractAgreement 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractAgreement(null)));
// 测试 securityProtocol 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setSecurityProtocol(null)));
// 测试 extendedField 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setExtendedField(null)));
// 测试 bidding 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setBidding(null)));
// 测试 remark2 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setRemark2(null)));
// 测试 remark3 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setRemark3(null)));
// 测试 createTime 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setCreateTime(null)));
// 准备参数
ContractInfoPageReqVO reqVO = new ContractInfoPageReqVO();
reqVO.setContractInfo(null);
reqVO.setCurrency(null);
reqVO.setProcurementModel(null);
reqVO.setPricingModel(null);
reqVO.setContractPeriodTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setDeliveryTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setDeliveryModel(null);
reqVO.setDeliveryLocation(null);
reqVO.setDeliveryMethod(null);
reqVO.setModeTransport(null);
reqVO.setCostBearingMian(null);
reqVO.setTotalAmount(null);
reqVO.setAmountCapitalization(null);
reqVO.setContractRequirement(null);
reqVO.setRemark(null);
reqVO.setContractAppendices(null);
reqVO.setAncillaryDocuments(null);
reqVO.setContractLabel(null);
reqVO.setContractAgreement(null);
reqVO.setSecurityProtocol(null);
reqVO.setExtendedField(null);
reqVO.setBidding(null);
reqVO.setRemark2(null);
reqVO.setRemark3(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<ContractInfoDO> pageResult = contractInfoService.getContractInfoPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbContractInfo, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetContractInfoList() {
// mock 数据
ContractInfoDO dbContractInfo = randomPojo(ContractInfoDO.class, o -> { // 等会查询到
o.setContractInfo(null);
o.setCurrency(null);
o.setProcurementModel(null);
o.setPricingModel(null);
o.setContractPeriodTime(null);
o.setDeliveryTime(null);
o.setDeliveryModel(null);
o.setDeliveryLocation(null);
o.setDeliveryMethod(null);
o.setModeTransport(null);
o.setCostBearingMian(null);
o.setTotalAmount(null);
o.setAmountCapitalization(null);
o.setContractRequirement(null);
o.setRemark(null);
o.setContractAppendices(null);
o.setAncillaryDocuments(null);
o.setContractLabel(null);
o.setContractAgreement(null);
o.setSecurityProtocol(null);
o.setExtendedField(null);
o.setBidding(null);
o.setRemark2(null);
o.setRemark3(null);
o.setCreateTime(null);
});
contractInfoMapper.insert(dbContractInfo);
// 测试 contractInfo 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractInfo(null)));
// 测试 currency 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setCurrency(null)));
// 测试 procurementModel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setProcurementModel(null)));
// 测试 pricingModel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setPricingModel(null)));
// 测试 contractPeriodTime 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractPeriodTime(null)));
// 测试 deliveryTime 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryTime(null)));
// 测试 deliveryModel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryModel(null)));
// 测试 deliveryLocation 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryLocation(null)));
// 测试 deliveryMethod 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setDeliveryMethod(null)));
// 测试 modeTransport 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setModeTransport(null)));
// 测试 costBearingMian 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setCostBearingMian(null)));
// 测试 totalAmount 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setTotalAmount(null)));
// 测试 amountCapitalization 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setAmountCapitalization(null)));
// 测试 contractRequirement 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractRequirement(null)));
// 测试 remark 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setRemark(null)));
// 测试 contractAppendices 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractAppendices(null)));
// 测试 ancillaryDocuments 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setAncillaryDocuments(null)));
// 测试 contractLabel 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractLabel(null)));
// 测试 contractAgreement 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setContractAgreement(null)));
// 测试 securityProtocol 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setSecurityProtocol(null)));
// 测试 extendedField 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setExtendedField(null)));
// 测试 bidding 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setBidding(null)));
// 测试 remark2 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setRemark2(null)));
// 测试 remark3 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setRemark3(null)));
// 测试 createTime 不匹配
contractInfoMapper.insert(cloneIgnoreId(dbContractInfo, o -> o.setCreateTime(null)));
// 准备参数
ContractInfoExportReqVO reqVO = new ContractInfoExportReqVO();
reqVO.setContractInfo(null);
reqVO.setCurrency(null);
reqVO.setProcurementModel(null);
reqVO.setPricingModel(null);
reqVO.setContractPeriodTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setDeliveryTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setDeliveryModel(null);
reqVO.setDeliveryLocation(null);
reqVO.setDeliveryMethod(null);
reqVO.setModeTransport(null);
reqVO.setCostBearingMian(null);
reqVO.setTotalAmount(null);
reqVO.setAmountCapitalization(null);
reqVO.setContractRequirement(null);
reqVO.setRemark(null);
reqVO.setContractAppendices(null);
reqVO.setAncillaryDocuments(null);
reqVO.setContractLabel(null);
reqVO.setContractAgreement(null);
reqVO.setSecurityProtocol(null);
reqVO.setExtendedField(null);
reqVO.setBidding(null);
reqVO.setRemark2(null);
reqVO.setRemark3(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<ContractInfoDO> list = contractInfoService.getContractInfoList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbContractInfo, list.get(0));
}
}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.customer;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO;
import com.yunxi.scm.module.xxjj.dal.mysql.customer.CustomerMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link CustomerServiceImpl}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.enterprisecontract;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.enterprisecontract.EnterpriseCon
import com.yunxi.scm.module.xxjj.dal.mysql.enterprisecontract.EnterpriseContractMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link EnterpriseContractServiceImpl}

@ -13,7 +13,6 @@ import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.material.vo.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
@ -24,7 +23,6 @@ import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**

@ -13,7 +13,6 @@ import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.materialbrand.vo.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
@ -24,7 +23,6 @@ import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**

@ -13,7 +13,6 @@ import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.materialindustry.vo.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
@ -24,7 +23,6 @@ import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.materialquality;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.materialquality.MaterialQualityD
import com.yunxi.scm.module.xxjj.dal.mysql.materialquality.MaterialQualityMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link MaterialQualityServiceImpl}

@ -13,7 +13,6 @@ import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.materialtype.vo.*;
import com.yunxi.scm.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
@ -24,7 +23,6 @@ import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.productionprocesses;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.productionprocesses.ProductionPr
import com.yunxi.scm.module.xxjj.dal.mysql.productionprocesses.ProductionProcessesMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link ProductionProcessesServiceImpl}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.qualityinspection;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.qualityinspection.QualityInspect
import com.yunxi.scm.module.xxjj.dal.mysql.qualityinspection.QualityInspectionMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link QualityInspectionServiceImpl}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.subjectbasic;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.subjectbasic.SubjectBasicDO;
import com.yunxi.scm.module.xxjj.dal.mysql.subjectbasic.SubjectBasicMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link SubjectBasicServiceImpl}

@ -0,0 +1,255 @@
package com.yunxi.scm.module.xxjj.service.subjectfollowmanagement;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO;
import com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowmanagement.SubjectFollowManagementMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link SubjectFollowManagementServiceImpl}
*
* @author
*/
@Import(SubjectFollowManagementServiceImpl.class)
public class SubjectFollowManagementServiceImplTest extends BaseDbUnitTest {
@Resource
private SubjectFollowManagementServiceImpl subjectFollowManagementService;
@Resource
private SubjectFollowManagementMapper subjectFollowManagementMapper;
@Test
public void testCreateSubjectFollowManagement_success() {
// 准备参数
SubjectFollowManagementCreateReqVO reqVO = randomPojo(SubjectFollowManagementCreateReqVO.class);
// 调用
Long subjectFollowManagementId = subjectFollowManagementService.createSubjectFollowManagement(reqVO);
// 断言
assertNotNull(subjectFollowManagementId);
// 校验记录的属性是否正确
SubjectFollowManagementDO subjectFollowManagement = subjectFollowManagementMapper.selectById(subjectFollowManagementId);
assertPojoEquals(reqVO, subjectFollowManagement);
}
@Test
public void testUpdateSubjectFollowManagement_success() {
// mock 数据
SubjectFollowManagementDO dbSubjectFollowManagement = randomPojo(SubjectFollowManagementDO.class);
subjectFollowManagementMapper.insert(dbSubjectFollowManagement);// @Sql: 先插入出一条存在的数据
// 准备参数
SubjectFollowManagementUpdateReqVO reqVO = randomPojo(SubjectFollowManagementUpdateReqVO.class, o -> {
o.setId(dbSubjectFollowManagement.getId()); // 设置更新的 ID
});
// 调用
subjectFollowManagementService.updateSubjectFollowManagement(reqVO);
// 校验是否更新正确
SubjectFollowManagementDO subjectFollowManagement = subjectFollowManagementMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, subjectFollowManagement);
}
@Test
public void testUpdateSubjectFollowManagement_notExists() {
// 准备参数
SubjectFollowManagementUpdateReqVO reqVO = randomPojo(SubjectFollowManagementUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> subjectFollowManagementService.updateSubjectFollowManagement(reqVO), SUBJECT_FOLLOW_MANAGEMENT_NOT_EXISTS);
}
@Test
public void testDeleteSubjectFollowManagement_success() {
// mock 数据
SubjectFollowManagementDO dbSubjectFollowManagement = randomPojo(SubjectFollowManagementDO.class);
subjectFollowManagementMapper.insert(dbSubjectFollowManagement);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbSubjectFollowManagement.getId();
// 调用
subjectFollowManagementService.deleteSubjectFollowManagement(id);
// 校验数据不存在了
assertNull(subjectFollowManagementMapper.selectById(id));
}
@Test
public void testDeleteSubjectFollowManagement_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> subjectFollowManagementService.deleteSubjectFollowManagement(id), SUBJECT_FOLLOW_MANAGEMENT_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetSubjectFollowManagementPage() {
// mock 数据
SubjectFollowManagementDO dbSubjectFollowManagement = randomPojo(SubjectFollowManagementDO.class, o -> { // 等会查询到
o.setBusinessId(null);
o.setBusinessType(null);
o.setTitle(null);
o.setIdCard(null);
o.setStartTime(null);
o.setEndTime(null);
o.setResponsible(null);
o.setPartake(null);
o.setMark(null);
o.setUrgency(null);
o.setRemindType(null);
o.setDescription(null);
o.setAnnex(null);
o.setCreateTime(null);
});
subjectFollowManagementMapper.insert(dbSubjectFollowManagement);
// 测试 businessId 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setBusinessId(null)));
// 测试 businessType 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setBusinessType(null)));
// 测试 title 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setTitle(null)));
// 测试 idCard 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setIdCard(null)));
// 测试 startTime 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setStartTime(null)));
// 测试 endTime 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setEndTime(null)));
// 测试 responsible 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setResponsible(null)));
// 测试 partake 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setPartake(null)));
// 测试 mark 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setMark(null)));
// 测试 urgency 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setUrgency(null)));
// 测试 remindType 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setRemindType(null)));
// 测试 description 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setDescription(null)));
// 测试 annex 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setAnnex(null)));
// 测试 createTime 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setCreateTime(null)));
// 准备参数
SubjectFollowManagementPageReqVO reqVO = new SubjectFollowManagementPageReqVO();
reqVO.setBusinessId(null);
reqVO.setBusinessType(null);
reqVO.setTitle(null);
reqVO.setIdCard(null);
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setResponsible(null);
reqVO.setPartake(null);
reqVO.setMark(null);
reqVO.setUrgency(null);
reqVO.setRemindType(null);
reqVO.setDescription(null);
reqVO.setAnnex(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<SubjectFollowManagementDO> pageResult = subjectFollowManagementService.getSubjectFollowManagementPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbSubjectFollowManagement, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetSubjectFollowManagementList() {
// mock 数据
SubjectFollowManagementDO dbSubjectFollowManagement = randomPojo(SubjectFollowManagementDO.class, o -> { // 等会查询到
o.setBusinessId(null);
o.setBusinessType(null);
o.setTitle(null);
o.setIdCard(null);
o.setStartTime(null);
o.setEndTime(null);
o.setResponsible(null);
o.setPartake(null);
o.setMark(null);
o.setUrgency(null);
o.setRemindType(null);
o.setDescription(null);
o.setAnnex(null);
o.setCreateTime(null);
});
subjectFollowManagementMapper.insert(dbSubjectFollowManagement);
// 测试 businessId 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setBusinessId(null)));
// 测试 businessType 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setBusinessType(null)));
// 测试 title 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setTitle(null)));
// 测试 idCard 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setIdCard(null)));
// 测试 startTime 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setStartTime(null)));
// 测试 endTime 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setEndTime(null)));
// 测试 responsible 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setResponsible(null)));
// 测试 partake 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setPartake(null)));
// 测试 mark 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setMark(null)));
// 测试 urgency 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setUrgency(null)));
// 测试 remindType 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setRemindType(null)));
// 测试 description 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setDescription(null)));
// 测试 annex 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setAnnex(null)));
// 测试 createTime 不匹配
subjectFollowManagementMapper.insert(cloneIgnoreId(dbSubjectFollowManagement, o -> o.setCreateTime(null)));
// 准备参数
SubjectFollowManagementExportReqVO reqVO = new SubjectFollowManagementExportReqVO();
reqVO.setBusinessId(null);
reqVO.setBusinessType(null);
reqVO.setTitle(null);
reqVO.setIdCard(null);
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setResponsible(null);
reqVO.setPartake(null);
reqVO.setMark(null);
reqVO.setUrgency(null);
reqVO.setRemindType(null);
reqVO.setDescription(null);
reqVO.setAnnex(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<SubjectFollowManagementDO> list = subjectFollowManagementService.getSubjectFollowManagementList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbSubjectFollowManagement, list.get(0));
}
}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.supplier;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.supplier.SupplierDO;
import com.yunxi.scm.module.xxjj.dal.mysql.supplier.SupplierMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link SupplierServiceImpl}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.unitlibrary;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.unitlibrary.UnitLibraryDO;
import com.yunxi.scm.module.xxjj.dal.mysql.unitlibrary.UnitLibraryMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link UnitLibraryServiceImpl}

@ -2,7 +2,6 @@ package com.yunxi.scm.module.xxjj.service.warehouse;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@ -13,20 +12,15 @@ import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO;
import com.yunxi.scm.module.xxjj.dal.mysql.warehouse.WarehouseMapper;
import com.yunxi.scm.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link WarehouseServiceImpl}

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

Loading…
Cancel
Save