admin-web/src/api/stock/transfer.js
@@ -8,6 +8,16 @@ data, }); } // åæ®å¯¼å ¥ export function transferImport(data) { return request({ url: '/pc/l/wh/form/transfer/import', method: 'post', data, }); } // å表 export function transferList(params) { return request({ admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
@@ -331,6 +331,7 @@ operatorName: [{required: true, message: '请填åé¢å人', trigger: 'blur'}], tel: [{required: true, message: '请填åèç³»çµè¯', trigger: 'blur'}], createTime: [{required: true, message: 'è¯·éæ©ååæ¶é´', trigger: 'change'}], // å¢å äºååçä¸é´æµç¨ï¼è¥åæåºå·æ¤æµç¨ï¼ä¸è½½åååï¼ä¸ä¼ åååï¼å注æprocureDoc procureDoc: [{required: true, message: '请ä¸ä¼ å®¡æ¹æç»', trigger: 'change'}], baseCategoryIds: [{required: true, message: 'è¯·éæ©', trigger: 'change'}], baseGoodsTemplateId: [{required: true, message: 'è¯·éæ©', trigger: 'change'},{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}], @@ -557,7 +558,7 @@ .catch((err) => { this.loading = false console.log('create err', err); this.$message.error('ä¿å失败'); //this.$message.error('ä¿å失败'); }); } else { this.$message.error('æ ¡éªæªéè¿ï¼è¯·æ£æ¥ã'); admin-web/src/views/departmentitem/itemdis/distribution/index.vue
@@ -21,8 +21,21 @@ <div class="card-header-left"> <span>åååå·ï¼</span> <span class="value">{{ item.businessFormCode }}</span> <span style="padding-left: 30px">ååç¶æï¼</span> <span style="color: red" v-if="item.states === 0" class="value">æªåå</span> <span v-if="item.states === 2" class="value">å·²åå</span> </div> <div class="card-header-right"> <!-- 导åºåå --> <el-button v-if="item.states === 0" name="ä¸è½½" site="form" type="primary" size="mini" @click="handleDetail(item)"> ä¸è½½ </el-button> <el-button v-if="item.states === 0" name="ä¸ä¼ " site="form" type="primary" size="mini" @click="handleUploadPage(item)"> ä¸ä¼ </el-button> <el-button name="æ¥ç详æ " site="form" type="primary" size="mini" @click="handleDetail(item)"> æ¥ç详æ </el-button> @@ -32,7 +45,7 @@ <div class="box"><span class="span-two">é¨é¨ï¼</span>{{ item.inWarehouseName }}</div> <div class="box"><span class="span-two">åå人ï¼</span>{{ item.outOperatorName }}</div> <div class="box"> <span class="span-two">ååæ¶é´ï¼</span>{{ item.createTime | formatTime }} <span class="span-two">ååæ¶é´ï¼</span>{{ item.inTime | formatTime }} </div> </div> <div class="card-end"> @@ -67,6 +80,16 @@ </el-row> </el-card> </el-container> <!-- ä¸ä¼ åååæä»¶--> <uploadPage v-if="uploadPageSetting.show" :setting="uploadPageSetting" ref="uploadRef" @close="uploadPageSetting.show = false" @search="refreshData" ></uploadPage> <!--æ·»å /ç¼è¾å¼¹çª--> <edit v-if="editSetting.show" @@ -91,13 +114,14 @@ import myImport from '@/views/components/myImport'; import edit from './edit'; import detail from './detail'; import uploadPage from './uploadPage'; import listPage from '@/views/mixins/listPage'; import {getUserDetail} from "@/utils/auth"; export default { name: 'index', mixins: [listPage], components: {MyButton, myImport, edit, detail}, components: {MyButton, myImport, edit, detail,uploadPage}, data() { return { loading: false, admin-web/src/views/departmentitem/itemdis/distribution/uploadPage.vue
New file @@ -0,0 +1,185 @@ <template> <win-md class="stock-detail" title="å¯¼å ¥åååæä»¶" @close="close" :width="'800px'" :loading="loading"> <upload ref="uploadRef" :values="fileList" :settings="uploadSettings" @on-change="uploadChange"></upload> <el-button name="ç¡®å®åå" style="float: right;margin-right: 50px;margin-top: 20px" site="form" type="primary" size="mini" @click="distribute()"> ç¡®å®åå </el-button> </win-md> </template> <script> import winMd from '@/components/win/win-md'; import * as DateFormatter from '@/utils/DateFormatter'; import {getDownUrl, getUploadUrl} from '@/utils/base'; import Viewer from 'viewerjs'; import 'viewerjs/dist/viewer.css'; import de from "element-ui/src/locale/lang/de"; import upload from '@/components/upload/index'; let viewer = null; import {transferAdd, transferImport} from '@/api/stock/transfer'; export default { computed: { de() { return de } }, components: {winMd,upload}, props: { setting: { type: Object, default: () => { }, }, }, data() { return { procureDoc:"", uploadSettings: { title: 'ä¸ä¼ ', max: 20, // æå¤§å¤§å°ï¼åä½M num: 10, // æ¯æä¸ä¼ å¾çä¸ªæ° tip: '', // æç¤º é»è®¤ï¼`åªè½ä¸ä¼ ${this.defaultSettings.num}个${this.defaultSettings.accept}æä»¶ï¼ä¸ä¸è¶ è¿${this.defaultSettings.max}kb` uploadUrl: getUploadUrl(), // ä¸ä¼ è·¯å¾ multiple: true, // æ¯å¦æ¯ææ¹éä¸ä¼ disabled: false, // æ¯å¦ç¦ç¨ }, loading: true, fileList: [], detail: { baseCategoryName: '', businessFormCode: '', goodsTemplateName: '', procureDoc: '', agencyId: '', agencyName: '', states: '', createName: '', time: '', procureGoods: [{}, {}], fileKey: Math.random(), }, }; }, filters: { formatTime(time) { if (!time) return '-'; return DateFormatter.LongToDateTime(time); }, formatPrice(price) { return price / 100 } }, created() { this.loading = false this.fileList = [] }, methods: { initPreviewImg() { if (viewer != null) { viewer.destroy(); } const ViewerDom = document.querySelector('#uploadPreviewImages'); viewer = new Viewer(ViewerDom, {}); }, handlePreview(file) { if (!this.checkImg(file.name)) { return false; } let index = 0; for (let i = 0; i < this.fileList.length; i++) { const f = this.fileList[i]; if (this.checkImg(f.name)) { if (file.id == f.id) { break; } index++; } } // this.fileList.forEach((f, i) => { // if (file.uid == f.uid) { // index = i // } // }) // document.querySelector('#uploadPreviewImages').children[0].click() viewer.view(index); }, checkImg(name) { const suffix = name.substring(name.lastIndexOf('.'), name.length); const imgArray = ['.jpg', '.jpeg', '.png', '.bmp']; if (imgArray.indexOf(suffix) < 0) { return false; } return true; }, getUrl(path) { if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') { return path; } else { return getDownUrl() + path; } }, close() { this.$emit('close'); }, // ä¸ä¼ uploadChange() { let arr = this.$refs.uploadRef.fileList; let procureDoc = JSON.stringify(arr); console.log(procureDoc) this.procureDoc = procureDoc; let pro = this.setting.id console.log(pro) }, /** * ç¡®å®åå */ distribute(){ let id = this.setting.id let procureDoc = this.procureDoc if(id == null || procureDoc === ''){ this.$message.error('请ä¸ä¼ å¾çï¼'); return } let opTime = DateFormatter.formatDate(new Date(), 'yyyyMMddhhmmss'); transferImport({"idStr":id,"procureDoc":procureDoc,"opTime":opTime,"type":"1"}) .then((res) => { this.loading = false this.$message.success('ä¿åæåï¼'); this.close(); this.$emit('search'); }) .catch((err) => { this.loading = false console.log('edit err', err); this.$message.error('ä¿å失败'); }); } }, }; </script> <style lang="scss" scoped> @import url(../../../../styles/store.scss); .card3 { padding: 10px; margin-top: 10px; border-radius: 2px; background: #ffffff; } </style> admin-web/src/views/mixins/listPage.js
@@ -16,6 +16,12 @@ orgId: '', show: false, }, uploadPageSetting: { title: 'ä¸ä¼ 页é¢', id: '', orgId: '', show: false, }, detailSetting: { title: '详æ ', id: '', @@ -81,6 +87,12 @@ this.detailSetting.title = '详æ '; this.detailSetting.show = true; }, // å¯¼å ¥ handleUploadPage(row) { this.uploadPageSetting.id = row.id; this.uploadPageSetting.title = 'å¯¼å ¥'; this.uploadPageSetting.show = true; }, // å页 handleSizeChange(pageSize) { this.pageSize = pageSize; admin-web/src/views/stock/transfer/transferApplication/edit.vue
@@ -237,7 +237,7 @@ rules: { outAgencyId: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], createTime: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], procureDoc: [{ required: true, message: '请ä¸ä¼ è°æ¨æç»', trigger: 'change' }], // procureDoc: [{ required: true, message: '请ä¸ä¼ è°æ¨æç»', trigger: 'change' }], baseCategoryIds: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], baseGoodsTemplateId: [{ required: true, message: 'è¯·éæ©', trigger: 'change' },{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }], modelsIds: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], admin-web/src/views/stock/transfer/transferApplication/index.vue
@@ -21,7 +21,8 @@ <div class="card-header-left"> <span>è°æ¨åå·ï¼</span> <span class="value">{{ item.businessFormCode }}</span> <div v-if="item.states == 0" class="states states-warning">å¾ åºåº</div> <div v-if="item.states == 0 && item.procureDoc !=null" class="states states-warning">å¾ åºåº</div> <div v-if="item.states == 0 && item.procureDoc ==null" class="states states-warning">å¾ æäº¤</div> <div v-if="item.states == 1" class="states states-warning">å¾ æ¥æ¶</div> <div v-if="item.states == 2" class="states states-success">å·²æ¥æ¶</div> <div v-if="item.states == 4" class="states states-info">å·²æ¤é</div> @@ -35,6 +36,22 @@ @click="handleIncome(item)" >å ¥åº</el-button > <el-button v-if="item.states == 0 && item.procureDoc ==null" site="form" type="primary" size="mini" @click="handleExport('transferExport',`è°æ¨å-${item.businessFormCode}`, {id:item.id,type:0})" >ä¸è½½ </el-button > <el-button v-if="item.states == 0 && item.procureDoc ==null" site="form" type="primary" size="mini" @click="handleUploadPage(item)" >ä¸ä¼ </el-button > <el-button v-if="item.states == 0" site="form" @@ -103,6 +120,16 @@ </el-row> </el-card> </el-container> <!-- ä¸ä¼ åååæä»¶--> <uploadPage v-if="uploadPageSetting.show" :setting="uploadPageSetting" ref="uploadRef" @close="uploadPageSetting.show = false" @search="refreshData" ></uploadPage> <!--æ·»å /ç¼è¾å¼¹çª--> <edit v-if="editSetting.show" @@ -129,11 +156,14 @@ import listPage from '@/views/mixins/listPage'; import transfer from '@/views/mixins/transfer'; import SettingIplatform from '@/utils/settingIplatform'; import uploadPage from './uploadPage'; import * as dataExport from "@/api/exportExcel"; import {downLoad} from "@/utils/base"; export default { name: 'index', mixins: [listPage, transfer], components: { MyButton, myImport, edit, detail }, components: { MyButton, myImport, edit, detail,uploadPage }, data() { return { loading: false, @@ -255,6 +285,37 @@ }); }); }, // å¯¼å ¥ handleUploadPage(row) { this.uploadPageSetting.id = row.id; this.uploadPageSetting.title = 'å¯¼å ¥'; this.uploadPageSetting.show = true; }, /** * 导åºè°æ¨å ¥åºå * @param api * @param fileName * @param params */ handleExport(api, fileName, params) { let loading = this.$loading({ lock: true, text: '导åºä¸ï¼è¯·ç¨å...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)', }); // å¤ææ»æ¡æ°æ¯å¦å¤§äºæå¤§æ¯ææ¡æ° dataExport[api](params) .then((res) => { console.log(res) downLoad(res) this.$message.success('å¯¼åºæåï¼'); loading.close(); }) .catch(() => { loading.close(); }); }, }, }; </script> admin-web/src/views/stock/transfer/transferApplication/uploadPage.vue
New file @@ -0,0 +1,185 @@ <template> <win-md class="stock-detail" title="ä¸ä¼ è°æ¨æç»" @close="close" :width="'800px'" :loading="loading"> <upload ref="uploadRef" :values="fileList" :settings="uploadSettings" @on-change="uploadChange"></upload> <el-button name="ä¸ä¼ è°æ¨æç»" style="float: right;margin-right: 50px;margin-top: 20px" site="form" type="primary" size="mini" @click="allocationProcedures()"> ä¸ä¼ è°æ¨æç» </el-button> </win-md> </template> <script> import winMd from '@/components/win/win-md'; import * as DateFormatter from '@/utils/DateFormatter'; import {getDownUrl, getUploadUrl} from '@/utils/base'; import Viewer from 'viewerjs'; import 'viewerjs/dist/viewer.css'; import de from "element-ui/src/locale/lang/de"; import upload from '@/components/upload/index'; let viewer = null; import {transferAdd, transferImport} from '@/api/stock/transfer'; export default { computed: { de() { return de } }, components: {winMd,upload}, props: { setting: { type: Object, default: () => { }, }, }, data() { return { procureDoc:"", uploadSettings: { title: 'ä¸ä¼ ', max: 20, // æå¤§å¤§å°ï¼åä½M num: 2, // æ¯æä¸ä¼ å¾çä¸ªæ° tip: '', // æç¤º é»è®¤ï¼`åªè½ä¸ä¼ ${this.defaultSettings.num}个${this.defaultSettings.accept}æä»¶ï¼ä¸ä¸è¶ è¿${this.defaultSettings.max}kb` uploadUrl: getUploadUrl(), // ä¸ä¼ è·¯å¾ multiple: true, // æ¯å¦æ¯ææ¹éä¸ä¼ disabled: false, // æ¯å¦ç¦ç¨ }, loading: true, fileList: [], detail: { baseCategoryName: '', businessFormCode: '', goodsTemplateName: '', procureDoc: '', agencyId: '', agencyName: '', states: '', createName: '', time: '', procureGoods: [{}, {}], fileKey: Math.random(), }, }; }, filters: { formatTime(time) { if (!time) return '-'; return DateFormatter.LongToDateTime(time); }, formatPrice(price) { return price / 100 } }, created() { this.loading = false this.fileList = [] }, methods: { initPreviewImg() { if (viewer != null) { viewer.destroy(); } const ViewerDom = document.querySelector('#uploadPreviewImages'); viewer = new Viewer(ViewerDom, {}); }, handlePreview(file) { if (!this.checkImg(file.name)) { return false; } let index = 0; for (let i = 0; i < this.fileList.length; i++) { const f = this.fileList[i]; if (this.checkImg(f.name)) { if (file.id == f.id) { break; } index++; } } // this.fileList.forEach((f, i) => { // if (file.uid == f.uid) { // index = i // } // }) // document.querySelector('#uploadPreviewImages').children[0].click() viewer.view(index); }, checkImg(name) { const suffix = name.substring(name.lastIndexOf('.'), name.length); const imgArray = ['.jpg', '.jpeg', '.png', '.bmp']; if (imgArray.indexOf(suffix) < 0) { return false; } return true; }, getUrl(path) { if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') { return path; } else { return getDownUrl() + path; } }, close() { this.$emit('close'); }, // ä¸ä¼ uploadChange() { let arr = this.$refs.uploadRef.fileList; let procureDoc = JSON.stringify(arr); console.log(procureDoc) this.procureDoc = procureDoc; let pro = this.setting.id console.log(pro) }, /** * ç¡®å®åå */ allocationProcedures(){ let id = this.setting.id let procureDoc = this.procureDoc if(id == null || procureDoc === ''){ this.$message.error('请ä¸ä¼ å¾çï¼'); return } //let opTime = DateFormatter.formatDate(new Date(), 'yyyyMMddhhmmss'); transferImport({"idStr":id,"procureDoc":procureDoc,"type":"0"}) .then((res) => { this.loading = false this.$message.success('ä¿åæåï¼'); this.close(); this.$emit('search'); }) .catch((err) => { this.loading = false console.log('edit err', err); this.$message.error('ä¿å失败'); }); } }, }; </script> <style lang="scss" scoped> @import url(../../../../styles/store.scss); .card3 { padding: 10px; margin-top: 10px; border-radius: 2px; background: #ffffff; } </style> admin-web/src/views/stock/transfer/transferissue/index.vue
@@ -18,17 +18,15 @@ <div class="card-header-left"> <span>è°æ¨åå·ï¼</span> <span class="value">{{ item.businessFormCode }}</span> <div v-if="item.states == 0" class="states states-warning">å¾ åºåº</div> <div v-if="item.states == 0 && item.procureDoc !=null" class="states states-warning">å¾ åºåº</div> <div v-if="item.states == 0 && item.procureDoc ==null" class="states states-warning">å¾ æäº¤</div> <div v-if="item.states == 1" class="states states-warning">å¾ æ¥æ¶</div> <div v-if="item.states == 2" class="states states-success">å·²æ¥æ¶</div> <div v-if="item.states == 4" class="states states-info">å·²æ¤é</div> </div> <div class="card-header-right"> <!-- <el-button v-if="item.states == 1" site="form" type="success" size="mini" >导åºè°æ¨åºåºå</el-button >--> <el-button v-if="item.states == 0" v-if="item.states == 0 && item.procureDoc !=null" site="form" type="success" size="mini" consum-base/src/main/java/com/consum/base/controller/LWhFormTransferController.java
@@ -9,19 +9,18 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.consum.base.util.ExcelStyleUtil; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.ObjectUtils; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import com.consum.base.BaseController; import com.consum.base.core.WhBusinessEnum; import com.consum.base.core.type.StatesType; @@ -62,7 +61,6 @@ import com.walker.infrastructure.utils.CollectionUtils; import com.walker.infrastructure.utils.DateUtils; import com.walker.web.ResponseValue; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.hutool.core.util.ReflectUtil; @@ -104,6 +102,7 @@ @ApiOperation(value = "åæ®æ°å¢", notes = "åæ®æ°å¢") @ApiImplicitParam(name = "param", value = "åæ®æ°å¢", required = true, dataType = "LWhFormTransferParam") @PostMapping("/add") @Transactional(rollbackFor = Exception.class) public ResponseValue add() throws Exception { LWhFormTransferParam param = CommonUtil.getObjFromReqBody(LWhFormTransferParam.class); LWhFormTransferParam param2 = new LWhFormTransferParam(); @@ -118,24 +117,31 @@ if (CollectionUtils.isEmpty(transferGoods)) { return ResponseValue.error("è°æ¨åä¸è½ä¸ºç©º"); } long id = this.lWhFormTransferService.add(param, this.getSysInfo()); long id = this.lWhFormTransferService.add(param, this.getSysInfo(), StrUtil.isEmpty(param.getProcureDoc())); if(id == -1L){ return ResponseValue.error("æ¨ä¸æ¯åºç®¡å"); } if(id == -2L){ return ResponseValue.error("ä»åºä¸åå¨"); } Integer transferBusinessType = param.getTransferBusinessType(); // é¨é¨ååä¸å¡éè¦å¤ç if (transferBusinessType == 1) { // todo æå æ°é»è¾ if (transferBusinessType == 1 && !StrUtil.isEmpty(param.getProcureDoc())) { // å åºåºï¼åå ¥åº // åºåºå 设置åºåºä»åº List<LWhProcureModel> modelByForm = lWhProcureModelService.getModelByForm(WhBusinessEnum.BUMENFENFA, id); Set<Long> baseModelIds = modelByForm.stream().map(LWhProcureModel::getBaseGoodsModelsId).collect(Collectors.toSet()); modelByForm.stream().map(LWhProcureModel::getBaseGoodsModelsId).collect(Collectors.toSet()); FinSysTenantUser sysTenantUser = this.getSysInfo(); String agencyId = sysTenantUser.getTenantId(); List<BaseWarehouse> baseWarehouseList = baseWarehouseService.getBaseWareHouseList(Long.valueOf(agencyId), StatesType.NORMAL.getValue()); baseWarehouseService.getBaseWareHouseList(Long.valueOf(agencyId), StatesType.NORMAL.getValue()); Set<Long> wareHouseIds = baseWarehouseList.stream().map(BaseWarehouse::getId).collect(Collectors.toSet()); // éè¿è°æ¨åä¸çåå·idæ¥è¯¢åºè¯¥åå·ç©åæå¨çä»åºä½ç½® List<GoodsInfoDTO> goodsInfoDTOS = lWhGoodsService.queryGoodsInfo(baseModelIds, wareHouseIds,null); List<GoodsInfoDTO> goodsInfoDTOS = lWhGoodsService.queryGoodsInfo(baseModelIds, wareHouseIds, null); GoodsInfoDTO goodsInfoDTO = goodsInfoDTOS.stream().findFirst().orElse(null); if (ObjectUtils.isEmpty(goodsInfoDTO)) { return ResponseValue.error("该åå·æ²¡æåºåå¯ä½¿ç¨"); @@ -147,27 +153,101 @@ lWhFormTransfer.setOutWarehouseId(wareHouseId); lWhFormTransfer.setOutWarehouseName(warehouseName); lWhFormTransferService.update(lWhFormTransfer); lWhFormTransferCoreService.doTransferOutPutNew(id, getCurrentUser(), WhBusinessEnum.BUMENFENFA); Long l = lWhFormTransferCoreService.doTransferOutPutNew(id, getCurrentUser(), WhBusinessEnum.BUMENFENFA); if(l == -1L){ return ResponseValue.error("ä»åºæ°éä¸è¶³"); } lWhFormTransferCoreService.doTransferInPut(id, getCurrentUser(), param.getOperatorName()); } return ResponseValue.success(); } /** * ä¸ä¼ åååï¼æµç¨ä¿®æ¹ï¼ * * @param idStr è°æ¨åid json * @return * @throws Exception */ @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "è°æ¨åid", required = true, dataType = "Long"),}) @Transactional(rollbackFor = Exception.class) @PostMapping("import") public ResponseValue upload(@RequestBody String idStr) throws Exception { Map<String, Object> map = JSONObject.parseObject(idStr, Map.class); String type = map.get("type").toString(); Long id = Convert.toLong(map.get("idStr")); String procureDoc = map.get("procureDoc").toString(); // [è°æ¨] if ("0".equals(type)) { // ä¿®æ¹ LWhFormTransfer addLWhFormTransfer = new LWhFormTransfer(); addLWhFormTransfer.setId(id); addLWhFormTransfer.setProcureDoc(procureDoc); int update = lWhFormTransferService.update(addLWhFormTransfer); if (update < 1) { return ResponseValue.error(); } return ResponseValue.success(); } // [åå] Long opTime = Convert.toLong(map.get("opTime")); // ä¿®æ¹è¡¨çæä»¶é»è¾ LWHFromTransferExtendVO lwhFromTransferExtendVO = lWhFormTransferService.getById(id); // ä¿®æ¹ LWhFormTransfer addLWhFormTransfer = new LWhFormTransfer(); addLWhFormTransfer.setId(id); addLWhFormTransfer.setProcureDoc(procureDoc); addLWhFormTransfer.setInTime(opTime); addLWhFormTransfer.setOutputTime(opTime); int update = lWhFormTransferService.update(addLWhFormTransfer); if (update < 1) { return ResponseValue.error(); } // 主ååé»è¾ // å åºåºï¼åå ¥åº // åºåºå 设置åºåºä»åº List<LWhProcureModel> modelByForm = lWhProcureModelService.getModelByForm(WhBusinessEnum.BUMENFENFA, id); Set<Long> baseModelIds = modelByForm.stream().map(LWhProcureModel::getBaseGoodsModelsId).collect(Collectors.toSet()); FinSysTenantUser sysTenantUser = this.getSysInfo(); String agencyId = sysTenantUser.getTenantId(); List<BaseWarehouse> baseWarehouseList = baseWarehouseService.getBaseWareHouseList(Long.valueOf(agencyId), StatesType.NORMAL.getValue()); Set<Long> wareHouseIds = baseWarehouseList.stream().map(BaseWarehouse::getId).collect(Collectors.toSet()); // éè¿è°æ¨åä¸çåå·idæ¥è¯¢åºè¯¥åå·ç©åæå¨çä»åºä½ç½® List<GoodsInfoDTO> goodsInfoDTOS = lWhGoodsService.queryGoodsInfo(baseModelIds, wareHouseIds, null); GoodsInfoDTO goodsInfoDTO = goodsInfoDTOS.stream().findFirst().orElse(null); if (ObjectUtils.isEmpty(goodsInfoDTO)) { return ResponseValue.error("该åå·æ²¡æåºåå¯ä½¿ç¨"); } Long wareHouseId = goodsInfoDTO.getWarehouseId(); String warehouseName = goodsInfoDTO.getWarehouseName(); LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(id); lWhFormTransfer.setOutWarehouseId(wareHouseId); lWhFormTransfer.setOutWarehouseName(warehouseName); lWhFormTransferService.update(lWhFormTransfer); lWhFormTransferCoreService.doTransferOutPutNew(id, getCurrentUser(), WhBusinessEnum.BUMENFENFA); lWhFormTransferCoreService.doTransferInPut(id, getCurrentUser(), lwhFromTransferExtendVO.getOperatorName()); return ResponseValue.success(); } /** * @Description å表æ¥è¯¢(è°æ¨æç») * @Author å¢åºé³ * @Date 2023/10/30 * <p> * 1.æ¥è¯¢è°æ¨å * <p> * 2.æ¥è¯¢ç©ååå· * <p> * 1.æ¥è¯¢è°æ¨å * <p> * 2.æ¥è¯¢ç©ååå· */ @ApiOperation(value = "åæ®å表æ¥è¯¢", notes = "åæ®å表æ¥è¯¢") @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页ç ", required = true, dataType = "int"), @ApiImplicitParam(name = "size", value = "æ¯é¡µæ¡æ°", required = true, dataType = "int"), @ApiImplicitParam(name = "param", value = "æ¡ä»¶åæ°", required = true, dataType = "TransferQry"),}) @ApiImplicitParam(name = "size", value = "æ¯é¡µæ¡æ°", required = true, dataType = "int"), @ApiImplicitParam(name = "param", value = "æ¡ä»¶åæ°", required = true, dataType = "TransferQry"),}) @GetMapping("/list") public ResponseValue queryFormTransferList() { TransferQry param = CommonUtil.getObjFromReq(TransferQry.class); @@ -190,7 +270,7 @@ // æ¥è¯¢åå·æ°é List<GoodsTemplateCountVO> goodsTemplateCount = lWhProcureModelService.getGoodsTemplateCountByBusinessId(item.getId()); lWhProcureModelService.getGoodsTemplateCountByBusinessId(item.getId()); formTransferVO.setFromTransferTemplateInfoList(goodsTemplateCount); result.add(formTransferVO); @@ -293,16 +373,16 @@ List<LWhProcureModel> modelByForm = lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, id); Set<Long> baseModelIds = modelByForm.stream().map(LWhProcureModel::getBaseGoodsModelsId).collect(Collectors.toSet()); modelByForm.stream().map(LWhProcureModel::getBaseGoodsModelsId).collect(Collectors.toSet()); FinSysTenantUser sysTenantUser = this.getSysInfo(); String agencyId = sysTenantUser.getTenantId(); List<BaseWarehouse> baseWarehouseList = baseWarehouseService.getBaseWareHouseList(Long.valueOf(agencyId), StatesType.NORMAL.getValue()); baseWarehouseService.getBaseWareHouseList(Long.valueOf(agencyId), StatesType.NORMAL.getValue()); Set<Long> wareHouseIds = baseWarehouseList.stream().map(BaseWarehouse::getId).collect(Collectors.toSet()); // éè¿è°æ¨åä¸çåå·idæ¥è¯¢åºè¯¥åå·ç©åæå¨çä»åºä½ç½® List<GoodsInfoDTO> goodsInfoDTOS = lWhGoodsService.queryGoodsInfo(baseModelIds, wareHouseIds,1); List<GoodsInfoDTO> goodsInfoDTOS = lWhGoodsService.queryGoodsInfo(baseModelIds, wareHouseIds, 1); GoodsInfoDTO goodsInfoDTO = goodsInfoDTOS.stream().findFirst().orElse(null); if (ObjectUtils.isEmpty(goodsInfoDTO)) { return ResponseValue.error("该åå·æ²¡æåºåå¯ä½¿ç¨"); @@ -320,26 +400,30 @@ @ApiOperation(value = "è°æ¨å导åº", notes = "è°æ¨å导åº") @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "è°æ¨åid", required = true, dataType = "Long"), @ApiImplicitParam(name = "type", value = "导åºç±»å 1 å ¥åº 2 åºåº", required = true, dataType = "Integer"),}) @ApiImplicitParam(name = "type", value = "导åºç±»å 1 å ¥åº 2 åºåº", required = true, dataType = "Integer"),}) @GetMapping("/list/export") public ResponseValue<String> export(Long id, Integer type, HttpServletResponse response) throws Exception { TemplateExportParams params; String fileName; if (type == 1) { if (type == 0) { params = new TemplateExportParams("import/è°æ¨å ¥åºå.xls"); fileName = "è°æ¨å ¥åºå"; }else if (type == 1) { params = new TemplateExportParams("import/è°æ¨å ¥åºå1.xls"); fileName = "è°æ¨å ¥åºå"; } else { params = new TemplateExportParams("import/è°æ¨åºåºå.xls"); fileName = "è°æ¨åºåºå"; } params.setHeadingStartRow(2); params.setStyle(ExcelStyleUtil.class); List<TransferExcelTemplate> export = this.lWhFormTransferService.export(id, type); int countNum = export.stream().filter(item -> item.getNum() != null).mapToInt(TransferExcelTemplate::getNum).sum(); export.stream().filter(item -> item.getNum() != null).mapToInt(TransferExcelTemplate::getNum).sum(); double totalAmount = export.stream().filter(item -> item.getTotalAmount() != null) .mapToDouble(TransferExcelTemplate::getAmount).sum(); .mapToDouble(TransferExcelTemplate::getAmount).sum(); Optional<TransferExcelTemplate> first = export.stream().findFirst(); TransferExcelTemplate entity = first.get(); String businessFormCode = entity.getBusinessFormCode(); @@ -385,7 +469,7 @@ param.setOutAgencyId(Long.valueOf(tenantId)); } GenericPager<Map<String, Object>> transferInfoDetailsVoGenericPager = this.lWhFormTransferService.queryTransferInfo(param); this.lWhFormTransferService.queryTransferInfo(param); return ResponseValue.success(transferInfoDetailsVoGenericPager); } @@ -408,7 +492,7 @@ } Map<Long, List<ProcureModelInfoParam>> collect = param.getRecordInfoList().stream() .collect(Collectors.groupingBy(ProcureModelInfoParam::getBaseGoodModelId)); .collect(Collectors.groupingBy(ProcureModelInfoParam::getBaseGoodModelId)); for (Map.Entry<Long, List<ProcureModelInfoParam>> entry : collect.entrySet()) { Long baseGoodModelId = entry.getKey(); @@ -441,7 +525,7 @@ // 设置ä¸ä¸å¨ç¨æ°é Long oldProcureModelId = item.getOldProcureModelId(); LWhProcureModelUser oldInfo = lWhProcureModelUserService.get(new LWhProcureModelUser(oldProcureModelId)); lWhProcureModelUserService.get(new LWhProcureModelUser(oldProcureModelId)); lWhProcureModelUser.setUseCount(oldInfo.getUseCount()); procureModelUserList.add(lWhProcureModelUser); } @@ -476,52 +560,52 @@ } List<GoodsUseRecordVO> goodsUseRecordList = useRecordDTOList.stream() .collect(Collectors.groupingBy(UseRecordDTO::getId)).entrySet().stream().map(entry -> { Long id = entry.getKey(); List<UseRecordDTO> useRecordList = entry.getValue(); UseRecordDTO useRecordDto = useRecordList.get(0); .collect(Collectors.groupingBy(UseRecordDTO::getId)).entrySet().stream().map(entry -> { Long id = entry.getKey(); List<UseRecordDTO> useRecordList = entry.getValue(); UseRecordDTO useRecordDto = useRecordList.get(0); GoodsUseRecordVO goodsUseRecordVO = new GoodsUseRecordVO(); goodsUseRecordVO.setId(id); goodsUseRecordVO.setUpdateUserName(useRecordDto.getUpdateUserName()); goodsUseRecordVO.setUpdateTime(useRecordDto.getUpdateTime()); GoodsUseRecordVO goodsUseRecordVO = new GoodsUseRecordVO(); goodsUseRecordVO.setId(id); goodsUseRecordVO.setUpdateUserName(useRecordDto.getUpdateUserName()); goodsUseRecordVO.setUpdateTime(useRecordDto.getUpdateTime()); List<UseRecordSkuVO> useRecordSkuList = useRecordList.stream().collect(Collectors.groupingBy(UseRecordDTO::getProcureModelId)).values() .stream().map(recordList -> { UseRecordDTO useRecordDTO = recordList.get(0); UseRecordSkuVO useRecordSkuVO = new UseRecordSkuVO(); useRecordSkuVO.setBaseGoodModelId(useRecordDTO.getBaseGoodsModelsId()); useRecordSkuVO.setBaseGoodModelName(useRecordDTO.getBaseGoodsModelsName()); useRecordSkuVO.setUnit(useRecordDTO.getUnit()); useRecordSkuVO.setProcureModelId(useRecordDTO.getProcureModelId()); List<UseRecordSkuVO> useRecordSkuList = useRecordList.stream().collect(Collectors.groupingBy(UseRecordDTO::getProcureModelId)).values() .stream().map(recordList -> { UseRecordDTO useRecordDTO = recordList.get(0); UseRecordSkuVO useRecordSkuVO = new UseRecordSkuVO(); useRecordSkuVO.setBaseGoodModelId(useRecordDTO.getBaseGoodsModelsId()); useRecordSkuVO.setBaseGoodModelName(useRecordDTO.getBaseGoodsModelsName()); useRecordSkuVO.setUnit(useRecordDTO.getUnit()); useRecordSkuVO.setProcureModelId(useRecordDTO.getProcureModelId()); List<RecordUserInfoVO> recordUserInfoList = recordList.stream().map(userInfo -> { RecordUserInfoVO recordUserInfoVO = new RecordUserInfoVO(); recordUserInfoVO.setOldProcureModelId(userInfo.getOldProcureModelId()); recordUserInfoVO.setUseName(userInfo.getUseName()); recordUserInfoVO.setPhone(userInfo.getPhone()); recordUserInfoVO.setNum(userInfo.getNum()); return recordUserInfoVO; }).collect(Collectors.toList()); List<RecordUserInfoVO> recordUserInfoList = recordList.stream().map(userInfo -> { RecordUserInfoVO recordUserInfoVO = new RecordUserInfoVO(); recordUserInfoVO.setOldProcureModelId(userInfo.getOldProcureModelId()); recordUserInfoVO.setUseName(userInfo.getUseName()); recordUserInfoVO.setPhone(userInfo.getPhone()); recordUserInfoVO.setNum(userInfo.getNum()); return recordUserInfoVO; }).collect(Collectors.toList()); useRecordSkuVO.setRecordUserInfos(recordUserInfoList); return useRecordSkuVO; }).collect(Collectors.toList()); useRecordSkuVO.setRecordUserInfos(recordUserInfoList); return useRecordSkuVO; }).collect(Collectors.toList()); goodsUseRecordVO.setRecordSkuDtoList(useRecordSkuList); return goodsUseRecordVO; goodsUseRecordVO.setRecordSkuDtoList(useRecordSkuList); return goodsUseRecordVO; }).sorted(Comparator.comparing(GoodsUseRecordVO::getUpdateTime, Comparator.nullsFirst(Long::compareTo)) .reversed()) .collect(Collectors.toList()); }).sorted(Comparator.comparing(GoodsUseRecordVO::getUpdateTime, Comparator.nullsFirst(Long::compareTo)) .reversed()) .collect(Collectors.toList()); return ResponseValue.success(goodsUseRecordList); } @ApiOperation(value = "æ¥è¯¢é¨é¨ä¸çååå", notes = "æ¥è¯¢é¨é¨ä¸çååå") @ApiImplicitParams({ @ApiImplicitParam(name = "agencyId", value = "æºæid", required = true, dataType = "Long", paramType = "query")}) @ApiImplicitParam(name = "agencyId", value = "æºæid", required = true, dataType = "Long", paramType = "query")}) @GetMapping("/query/transfList") public ResponseValue queryDepartmentTransferOrderList() { consum-base/src/main/java/com/consum/base/service/LWhFormTransferService.java
@@ -14,7 +14,7 @@ public interface LWhFormTransferService extends BaseService { long add(LWhFormTransferParam param, FinSysTenantUser sysInfo) throws Exception; long add(LWhFormTransferParam param, FinSysTenantUser sysInfo,boolean isHaveDoc) throws Exception; GenericPager<LWhFormTransfer> queryFormTransferList(TransferQry param); consum-base/src/main/java/com/consum/base/service/core/LWhFormTransferCoreService.java
@@ -230,7 +230,8 @@ log.error("åºåºå¤±è´¥ï¼åå·{} çæ°éä¸è¶³ï¼éè¦è°æ¨{}个ï¼ä»åºä¸ç°å{}个", baseGoodsModelsId, counts, goodsModelNum); // æå¨åæ» TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw new RuntimeException("åºåºå¤±è´¥!åå·æ°éä¸è¶³"); //throw new RuntimeException("åºåºå¤±è´¥!åå·æ°éä¸è¶³"); return -1L; } whGoodsRecord.setInitialCount(goodsModelNum); whGoodsRecord.setEndCount(goodsModelNum - counts); consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferServiceImpl.java
@@ -13,6 +13,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.util.CollectionUtils; @@ -96,7 +97,8 @@ * @Author å¢åºé³ * @Date 2023/10/30 */ public long add(LWhFormTransferParam param, FinSysTenantUser sysInfo) throws Exception { @Transactional(rollbackFor = Exception.class) public long add(LWhFormTransferParam param, FinSysTenantUser sysInfo,boolean isHaveDoc) throws Exception { // 1.æ°å¢è°æ¨åè®°å½ LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(); // è°æ¨åid @@ -123,7 +125,8 @@ BaseWarehouse warehouse = baseWarehouseService.getWarehouseByAgencyId(Long.valueOf(tenantId), null); if (warehouse == null) { log.error("ä»åºä¸åå¨"); throw new Exception("ä»åºä¸åå¨"); //throw new Exception("ä»åºä¸åå¨"); return -2L; } lWhFormTransfer.setInWarehouseId(warehouse.getId()); lWhFormTransfer.setInWarehouseName(warehouse.getWarehouseName()); @@ -142,7 +145,8 @@ List<BaseWarehouseManager> managerList = baseWarehouseManagerService.select(manager); if (CollectionUtils.isEmpty(managerList)) { log.error("è¯¥ç¨æ·ä¸æ¯åºç®¡å"); throw new Exception("è¯¥ç¨æ·ä¸æ¯åºç®¡å"); //throw new Exception("è¯¥ç¨æ·ä¸æ¯åºç®¡å"); return -1L; } BaseWarehouseManager baseWarehouseManager = managerList.stream().findFirst().orElse(null); Long baseWarehouseId = baseWarehouseManager.getBaseWarehouseId(); @@ -154,7 +158,11 @@ lWhFormTransfer.setInWarehouseId(param.getDepartmentId()); lWhFormTransfer.setInWarehouseName(param.getDepartmentName()); lWhFormTransfer.setInOperatorName(param.getOperatorName()); lWhFormTransfer.setInTime(param.getCreateTime()); if(!isHaveDoc){ lWhFormTransfer.setInTime(param.getCreateTime()); } lWhFormTransfer.setOutWarehouseType(WareHouseType.TENANT.getValue()); lWhFormTransfer.setOutWarehouseId(warehouse.getId()); @@ -162,7 +170,10 @@ lWhFormTransfer.setOutOperatorId(sysInfo.getId()); lWhFormTransfer.setOutOperatorName(sysInfo.getUserName()); lWhFormTransfer.setOutputTime(param.getCreateTime()); if(!isHaveDoc) { lWhFormTransfer.setOutputTime(param.getCreateTime()); } lWhFormTransfer.setTel(param.getTel()); } consum-base/src/main/java/com/consum/base/util/ExcelStyleUtil.java
New file @@ -0,0 +1,187 @@ package com.consum.base.util; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams; import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; import org.apache.poi.ss.usermodel.*; /** * åè½æè¿°: Excelæ ·å¼è®¾ç½® * * @author lxk * @date 2024/5/8 13:41 * @version 1.0 **/ public class ExcelStyleUtil implements IExcelExportStyler { private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT"); private static final short FONT_SIZE_TEN = 10; private static final short FONT_SIZE_ELEVEN = 11; private static final short FONT_SIZE_TWELVE = 12; // æ é¢å¤´æ ·å¼ private CellStyle headerStyle; // æ°æ®åæ 颿 ·å¼ private CellStyle titleStyle; // æ°æ®è¡æ ·å¼ private CellStyle styles; public ExcelStyleUtil(Workbook workbook) { this.init(workbook); } /** * åå§åæ ·å¼ * * @param workbook */ private void init(Workbook workbook) { this.headerStyle = initHeaderStyle(workbook); this.titleStyle = initTitleStyle(workbook); this.styles = initStyles(workbook); } /** * æ é¢å¤´æ ·å¼ * * @param color * @return */ @Override public CellStyle getHeaderStyle(short color) { return headerStyle; } /** * æ°æ®åæ 颿 ·å¼ * * @param color * @return */ @Override public CellStyle getTitleStyle(short color) { return titleStyle; } /** * æ°æ®è¡æ ·å¼ * * @param parity 表示å¥å¶è¡ * @param excelExportEntity æ°æ®å 容 * @return */ @Override public CellStyle getStyles(boolean parity, ExcelExportEntity excelExportEntity) { return styles; } /** * æ°æ®è¡æ ·å¼ * * @param cell åå æ ¼ * @param dataRow æ°æ®è¡ * @param excelExportEntity æ°æ®å 容 * @param obj 对象 * @param data æ°æ® * @return */ @Override public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity excelExportEntity, Object obj, Object data) { return getStyles(true, excelExportEntity); } /** * 模æ¿ä½¿ç¨çæ ·å¼è®¾ç½® * * @param b * @param excelForEachParams * @return */ @Override public CellStyle getTemplateStyles(boolean b, ExcelForEachParams excelForEachParams) { return null; } /** * åå§å--æ é¢å¤´æ ·å¼ * * @param workbook * @return */ private CellStyle initHeaderStyle(Workbook workbook) { CellStyle style = getBaseCellStyle(workbook); style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true)); return style; } /** * åå§å--æ°æ®åæ 颿 ·å¼ * * @param workbook * @return */ private CellStyle initTitleStyle(Workbook workbook) { CellStyle style = getBaseCellStyle(workbook); style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false)); // èæ¯è² style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); return style; } /** * åå§å--æ°æ®è¡æ ·å¼ * * @param workbook * @return */ private CellStyle initStyles(Workbook workbook) { CellStyle style = getBaseCellStyle(workbook); style.setFont(getFont(workbook, FONT_SIZE_TEN, false)); style.setDataFormat(STRING_FORMAT); return style; } /** * åºç¡æ ·å¼ * * @return */ private CellStyle getBaseCellStyle(Workbook workbook) { CellStyle style = workbook.createCellStyle(); // ä¸è¾¹æ¡ style.setBorderBottom(BorderStyle.THIN); // å·¦è¾¹æ¡ style.setBorderLeft(BorderStyle.THIN); // ä¸è¾¹æ¡ style.setBorderTop(BorderStyle.THIN); // å³è¾¹æ¡ style.setBorderRight(BorderStyle.THIN); // æ°´å¹³å± ä¸ style.setAlignment(HorizontalAlignment.CENTER); // ä¸ä¸å± ä¸ style.setVerticalAlignment(VerticalAlignment.CENTER); // 设置èªå¨æ¢è¡ style.setWrapText(true); return style; } /** * å使 ·å¼ * * @param size åä½å¤§å° * @param isBold æ¯å¦å ç² * @return */ private Font getFont(Workbook workbook, short size, boolean isBold) { Font font = workbook.createFont(); // å使 ·å¼ font.setFontName("å®ä½"); // æ¯å¦å ç² font.setBold(isBold); // åä½å¤§å° font.setFontHeightInPoints(size); return font; } } deploy-jar-single/src/main/resources/import/µ÷²¦Èë¿âµ¥.xlsBinary files differ
deploy-jar-single/src/main/resources/import/µ÷²¦Èë¿âµ¥1.xlsBinary files differ
deploy-jar-single/src/main/resources/import/µ÷²¦Èë¿âµ¥old.xlsBinary files differ