From 6a3b2748565ea8f1ff0ca1062a5bece673c25f09 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Wed, 10 Sep 2025 09:12:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(sip):=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=95=86=E7=BC=96=E7=A0=81=E7=94=9F=E6=88=90=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加生成代理商编码的方法 generateCode - 在插入和更新代理商信息时,根据所在省份自动生成编码 - 优化了编码的格式,使用 "AGT-" 前缀和四位顺序号 - 增加了对省份为空和未配置的情况的异常处理 --- .../controller/system/SysUserController.java | 14 +- .../libs/validate/jquery.validate.extend.js | 8 + .../templates/inventory/info/info.html | 47 +++- .../templates/inventory/info/innerLog.html | 1 + .../templates/inventory/info/outerLog.html | 1 + .../templates/inventory/inner/add.html | 9 +- .../templates/inventory/outer/edit.html | 7 +- .../templates/layout/product-list.html | 2 +- .../templates/project/order/add.html | 40 ++- .../templates/project/order/edit.html | 52 ++-- .../templates/project/order/order.html | 15 +- .../project/order/orderApproveLog.html | 81 ++++++ .../templates/system/customer/info.html | 44 ++- .../templates/system/partner/add.html | 18 +- .../templates/system/partner/edit.html | 16 +- .../templates/system/user/resetPwd.html | 29 ++ .../system/vendor/vendorQueryStatic.html | 219 +++++++++++++++ .../templates/warehouse/info/edit.html | 7 +- ruoyi-common/pom.xml | 13 + .../common/utils/mail}/TemplateMailUtil.java | 12 +- ruoyi-sip/pom.xml | 14 +- .../sip/controller/ExternalController.java | 4 +- .../controller/InventoryInfoController.java | 30 +- .../ProjectOrderInfoController.java | 38 ++- .../sip/controller/VendorInfoController.java | 2 +- .../com/ruoyi/sip/domain/InventoryOuter.java | 1 + .../com/ruoyi/sip/domain/ProductInfo.java | 3 + .../ruoyi/sip/domain/ProjectOrderInfo.java | 1 + .../ruoyi/sip/mapper/PartnerInfoMapper.java | 2 + .../ruoyi/sip/mapper/ProductInfoMapper.java | 2 + .../sip/service/IProductInfoService.java | 2 + .../service/impl/CustomerInfoServiceImpl.java | 4 +- .../impl/InventoryOuterServiceImpl.java | 3 +- .../service/impl/PartnerInfoServiceImpl.java | 39 ++- .../service/impl/ProductInfoServiceImpl.java | 6 + .../impl/ProjectOrderInfoServiceImpl.java | 48 +++- .../mapper/inventory/InventoryOuterMapper.xml | 3 + .../mapper/manage/CustomerInfoMapper.xml | 2 +- .../mapper/sip/ProjectOrderInfoMapper.xml | 264 +++++++++--------- .../mapper/system/PartnerInfoMapper.xml | 6 + .../mapper/system/ProductInfoMapper.xml | 36 +++ 41 files changed, 917 insertions(+), 228 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/templates/project/order/orderApproveLog.html create mode 100644 ruoyi-admin/src/main/resources/templates/system/vendor/vendorQueryStatic.html rename {ruoyi-sip/src/main/java/com/ruoyi/sip/utils => ruoyi-common/src/main/java/com/ruoyi/common/utils/mail}/TemplateMailUtil.java (87%) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 0a8bd450..797f05f2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -1,7 +1,11 @@ package com.ruoyi.web.controller.system; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; + +import cn.hutool.core.lang.Dict; +import com.ruoyi.common.utils.mail.TemplateMailUtil; import org.apache.commons.lang3.ArrayUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -228,13 +232,19 @@ public class SysUserController extends BaseController userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); user.setSalt(ShiroUtils.randomSalt()); - user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); + String realPassword = user.getPassword(); + user.setPassword(passwordService.encryptPassword(user.getLoginName(), realPassword, user.getSalt())); if (userService.resetUserPwd(user) > 0) { + SysUser dbUser = userService.selectUserById(user.getUserId()); + if (dbUser!=null && StringUtils.isNotEmpty(dbUser.getEmail())){ + TemplateMailUtil.sendTemplateMail(Collections.singletonList(dbUser.getEmail()),"密码重置", TemplateMailUtil.MailTemplate.PASSWORD_RESET, Dict.of("password", realPassword)); + } if (ShiroUtils.getUserId().longValue() == user.getUserId().longValue()) { - setSysUser(userService.selectUserById(user.getUserId())); + setSysUser(dbUser); } + return success(); } return error(); diff --git a/ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js b/ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js index 42d53850..b1a5fb58 100644 --- a/ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js +++ b/ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js @@ -21,6 +21,14 @@ $(document).ready(function(){ var tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位 return this.optional(element) || (tel.test(value)); },"请填写正确的座机号码"); + // 手机号码验证身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$) + jQuery.validator.addMethod("isTelNumber",function(value,element) { + debugger + var length = value.length; + const phone = /^1[3-9]\d{9}$/; + const tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位 + return this.optional(element)||(length === 11 && phone.test(value)) || (tel.test(value)); + },"请填写正确的手机号或座机号"); // 姓名校验 jQuery.validator.addMethod("isName",function(value,element) { var name = /^[\u4e00-\u9fa5]{2,6}$/; diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/info.html b/ruoyi-admin/src/main/resources/templates/inventory/info/info.html index 7e8e1365..35cb35ed 100644 --- a/ruoyi-admin/src/main/resources/templates/inventory/info/info.html +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/info.html @@ -24,7 +24,24 @@
  • - + +
  • + +
  • + + + +
  •  搜索 @@ -93,11 +110,18 @@ field: 'productName', title: '产品名称' }, + { + field: 'warehouseName', + title: '仓库', + }, { field: 'availableCount', title: '实时库存', formatter: function (value, row, index) { - let showValue= value ??0; + let showValue = value ?? 0; + if (showValue >= 0 && (row.inventoryCount ?? 0) > 0) { + showValue = row.inventoryCount + } let showHtml='' if (value>200){ showHtml= `${showValue}` @@ -125,8 +149,8 @@ align: 'center', formatter: function(value, row, index) { var actions = []; - actions.push('入库记录 '); - actions.push(`出库记录`); + actions.push('入库记录 '); + actions.push(`出库记录`); return actions.join(''); } }] @@ -134,12 +158,19 @@ $.table.init(options); }); - function showInnerLog(productCode){ - var url = prefix + "/innerLog/" + productCode; + function showInnerLog(productCode, warehouseId) { + if (!warehouseId) { + $.modal.errorMsg("仓库不能为空"); + } + var url = prefix + "/innerLog/" + productCode + "/" + warehouseId; $.modal.openFull("入库记录表", url); } - function showOuterLog(productCode){ - var url = prefix + "/outerLog/" + productCode; + + function showOuterLog(productCode, warehouseId) { + if (!warehouseId) { + $.modal.errorMsg("仓库不能为空"); + } + var url = prefix + "/outerLog/" + productCode + "/" + warehouseId; $.modal.openFull("入库记录表", url); } diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html b/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html index dfe7ff9d..80a97b80 100644 --- a/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/innerLog.html @@ -9,6 +9,7 @@
    +
    diff --git a/ruoyi-admin/src/main/resources/templates/inventory/info/outerLog.html b/ruoyi-admin/src/main/resources/templates/inventory/info/outerLog.html index 0b30ce8f..370371b2 100644 --- a/ruoyi-admin/src/main/resources/templates/inventory/info/outerLog.html +++ b/ruoyi-admin/src/main/resources/templates/inventory/info/outerLog.html @@ -9,6 +9,7 @@
    +
    diff --git a/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html b/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html index 859b5faa..5672d145 100644 --- a/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html +++ b/ruoyi-admin/src/main/resources/templates/inventory/inner/add.html @@ -180,7 +180,7 @@
    - +
    @@ -213,6 +213,11 @@ } }) } + // 限制productSn只能输入数字和字母 + function validateProductSn(input) { + // 只允许数字和字母 + input.value = input.value.replace(/[^a-zA-Z0-9]/g, ''); + } function clearAddInventory(){ $('#productCodeQuery').val('') $('#addInventory input[type="text"]').each(function() { @@ -451,7 +456,7 @@ align: 'center', formatter: function (value, row, index) { var actions = []; - actions.push('删除'); + actions.push('删除'); return actions.join(''); } }] diff --git a/ruoyi-admin/src/main/resources/templates/inventory/outer/edit.html b/ruoyi-admin/src/main/resources/templates/inventory/outer/edit.html index 0f657be3..00517089 100644 --- a/ruoyi-admin/src/main/resources/templates/inventory/outer/edit.html +++ b/ruoyi-admin/src/main/resources/templates/inventory/outer/edit.html @@ -686,10 +686,13 @@ } function updateStatus(id, outerCode, orderCode,productCode) { - $.operate.post(deliveryPrefix + '/status', {id: id, outerCode: outerCode, orderCode: orderCode,productCode:productCode}, res => { - refreshTable(); + $.modal.confirm("请确认sn码的准确性,当日24点后无法更改", function () { + $.operate.post(deliveryPrefix + '/status', {id: id, outerCode: outerCode, orderCode: orderCode,productCode:productCode}, res => { + refreshTable(); + }) }) + } function refreshTable() { diff --git a/ruoyi-admin/src/main/resources/templates/layout/product-list.html b/ruoyi-admin/src/main/resources/templates/layout/product-list.html index 299e4c98..582d211a 100644 --- a/ruoyi-admin/src/main/resources/templates/layout/product-list.html +++ b/ruoyi-admin/src/main/resources/templates/layout/product-list.html @@ -313,7 +313,7 @@ - + diff --git a/ruoyi-admin/src/main/resources/templates/project/order/add.html b/ruoyi-admin/src/main/resources/templates/project/order/add.html index 800c6e0e..7bd13bc1 100644 --- a/ruoyi-admin/src/main/resources/templates/project/order/add.html +++ b/ruoyi-admin/src/main/resources/templates/project/order/add.html @@ -173,7 +173,7 @@ 联系方式* - + @@ -252,7 +252,7 @@ 联系方式* - + @@ -280,9 +280,25 @@ 联系方式* - + - + + 收货地址* + + + + + + 收货人 + + Email + + 联系方式* + + + + 其他特别说明 @@ -346,7 +362,21 @@ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/system/customer/info.html b/ruoyi-admin/src/main/resources/templates/system/customer/info.html index d577cbe2..c820a59c 100644 --- a/ruoyi-admin/src/main/resources/templates/system/customer/info.html +++ b/ruoyi-admin/src/main/resources/templates/system/customer/info.html @@ -42,14 +42,23 @@
  • - - +
  • +
  • + +
    + +
    + +
  •  搜索 @@ -87,7 +96,34 @@ var editFlag = [[${@permission.hasPermi('system:customer:edit')}]]; var removeFlag = [[${@permission.hasPermi('system:customer:remove')}]]; var prefix = ctx + "system/customer"; + function changeBg() { + if ($('[name="bgProperty"]').val() != 'YYS') { + let datas = [[${@dict.getType('bg_hysy')}]] + let str = `` + datas.forEach((ele) => { + str += ` ` + }) + $('#industryTypeBox').html(` + + `) + } else { + let datas = [[${@dict.getType('bg_yys')}]] + let str = `` + datas.forEach((ele) => { + str += ` ` + }) + $('#industryTypeBox').html(` + + `) + } + } $(function () { var options = { url: prefix + "/list", diff --git a/ruoyi-admin/src/main/resources/templates/system/partner/add.html b/ruoyi-admin/src/main/resources/templates/system/partner/add.html index 11a88091..7c5e5701 100644 --- a/ruoyi-admin/src/main/resources/templates/system/partner/add.html +++ b/ruoyi-admin/src/main/resources/templates/system/partner/add.html @@ -12,9 +12,9 @@
    - +
    - +
    @@ -140,9 +140,23 @@ $.modal.alertWarning("请选择一个用户"); return; } + let $name = $('[name="contactEmail"]'); + if (!$name.val()) { + $name.val(rows[0].email); + } $('[name="systemUserId"]').val(rows[0].userId); $('[name="systemUserName"]').val(rows[0].userName); + let $contactPerson = $('[name="contactPerson"]'); + if (!$contactPerson.val()) { + $contactPerson.val(rows[0].userName); + } + let $contactPhone = $('[name="contactPhone"]'); + if (!$contactPhone.val()) { + + $contactPhone.val(rows[0].phonenumber); + } + $.modal.close(index); } diff --git a/ruoyi-admin/src/main/resources/templates/system/partner/edit.html b/ruoyi-admin/src/main/resources/templates/system/partner/edit.html index 420b20b1..3f9edde5 100644 --- a/ruoyi-admin/src/main/resources/templates/system/partner/edit.html +++ b/ruoyi-admin/src/main/resources/templates/system/partner/edit.html @@ -11,7 +11,7 @@
    - +
    @@ -136,9 +136,23 @@ $.modal.alertWarning("请选择一个用户"); return; } + let $name = $('[name="contactEmail"]'); + if (!$name.val()) { + $name.val(rows[0].email); + } $('[name="systemUserId"]').val(rows[0].userId); $('[name="systemUserName"]').val(rows[0].userName); + let $contactPerson = $('[name="contactPerson"]'); + if (!$contactPerson.val()) { + $contactPerson.val(rows[0].userName); + } + let $contactPhone = $('[name="contactPhone"]'); + if (!$contactPhone.val()) { + + $contactPhone.val(rows[0].phonenumber); + } + $.modal.close(index); } diff --git a/ruoyi-admin/src/main/resources/templates/system/user/resetPwd.html b/ruoyi-admin/src/main/resources/templates/system/user/resetPwd.html index fb57bd88..6a6bdeb8 100644 --- a/ruoyi-admin/src/main/resources/templates/system/user/resetPwd.html +++ b/ruoyi-admin/src/main/resources/templates/system/user/resetPwd.html @@ -28,6 +28,35 @@ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html b/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html index 1ab54f1d..5d4c96c3 100644 --- a/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html +++ b/ruoyi-admin/src/main/resources/templates/warehouse/info/edit.html @@ -17,10 +17,13 @@
    - +
    - +
    +
    diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index ef68762f..b0e86e29 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -105,6 +105,19 @@ easyexcel 2.2.6 + + cn.hutool + hutool-core + + + cn.hutool + hutool-extra + + + com.google.zxing + core + 3.5.1 + \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java similarity index 87% rename from ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java index 06f76c0a..40da8640 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/utils/TemplateMailUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java @@ -1,6 +1,7 @@ -package com.ruoyi.sip.utils; +package com.ruoyi.common.utils.mail; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.resource.InputStreamResource; import cn.hutool.core.lang.Dict; import cn.hutool.extra.mail.Mail; @@ -12,7 +13,6 @@ import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine; import com.ruoyi.common.utils.spring.SpringUtils; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import java.util.List; @@ -42,6 +42,10 @@ public class TemplateMailUtil { * @Date 2025/07/29 09:55 */ public static void sendTemplateMail(List toEmail, String title, MailTemplate path, Dict dict) { + sendTemplateMail(toEmail, title, path, dict, null); + } + + public static void sendTemplateMail(List toEmail, String title, MailTemplate path, Dict dict, List toCssEmail) { String enabled = SpringUtils.getProperty("unis.mail.enabled", "false"); if (!Boolean.parseBoolean(enabled)) { log.warn("邮件发送开关未开启"); @@ -62,6 +66,9 @@ public class TemplateMailUtil { .setTitle(title) .setContent(result) .setHtml(true); + if (CollUtil.isNotEmpty(toCssEmail)) { + mail.setCcs(toCssEmail.toArray(new String[0])); + } mail.addImage("signature",imageResource.getStream()); mail.send(); } catch (Exception e) { @@ -77,6 +84,7 @@ public class TemplateMailUtil { */ ORDER_DELIVERY("mailOrderDeliveryTemplate.html","供应商通知发货单"), ORDER_PARTNER("mailPartnerTemplate.html","代理商商通知"), + PASSWORD_RESET("passwordTemplate.html", "密码重置"), ; diff --git a/ruoyi-sip/pom.xml b/ruoyi-sip/pom.xml index 01cf7e63..4f2aec39 100644 --- a/ruoyi-sip/pom.xml +++ b/ruoyi-sip/pom.xml @@ -31,19 +31,7 @@ org.projectlombok lombok - - cn.hutool - hutool-core - - - cn.hutool - hutool-extra - - - com.google.zxing - core - 3.5.1 - + org.flowable flowable-spring-boot-starter diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ExternalController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ExternalController.java index 1b06993c..4f407b5b 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ExternalController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ExternalController.java @@ -54,7 +54,7 @@ public class ExternalController { if (!API_KEY.equals(apiKey)) { return AjaxResult.error("鉴权失败"); } - return AjaxResult.success(orderInfoService.getOrderInfo(dto)); + return AjaxResult.success(projectOrderInfoService.getOrderInfo(dto)); } @GetMapping("/v1/number/info") @@ -66,6 +66,6 @@ public class ExternalController { if (!API_KEY.equals(apiKey)){ return AjaxResult.error("鉴权失败"); } - return AjaxResult.success(deliveryListService.getNumberInfo(dto)); + return AjaxResult.success(deliveryService.getNumberInfo(dto)); } } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java index acc08389..d2f50c1e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/InventoryInfoController.java @@ -5,12 +5,8 @@ import java.util.List; import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.utils.ShiroUtils; -import com.ruoyi.sip.domain.ProductInfo; -import com.ruoyi.sip.domain.ProjectInfo; -import com.ruoyi.sip.domain.VendorInfo; -import com.ruoyi.sip.service.IInventoryAuthService; -import com.ruoyi.sip.service.IProductInfoService; -import com.ruoyi.sip.service.IVendorInfoService; +import com.ruoyi.sip.domain.*; +import com.ruoyi.sip.service.*; import liquibase.pro.packaged.A; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -23,8 +19,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.sip.domain.InventoryInfo; -import com.ruoyi.sip.service.IInventoryInfoService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -48,11 +42,17 @@ public class InventoryInfoController extends BaseController private IProductInfoService productInfoService; @Autowired private IInventoryAuthService inventoryAuthService; + @Autowired + private IOmsWarehouseInfoService warehouseInfoService; @RequiresPermissions("inventory:info:view") @GetMapping() - public String info() + public String info(ModelMap mmap) { + OmsWarehouseInfo queryWarehouseParam = new OmsWarehouseInfo(); + queryWarehouseParam.setWarehouseStatus(OmsWarehouseInfo.WarehouseStatusEnum.NORMAL.getValue()); + mmap.put("warehouseList", warehouseInfoService.selectOmsWarehouseInfoList(queryWarehouseParam)); + mmap.put("vendorList", inventoryAuthService.currentVendor()); return prefix + "/info"; } @@ -89,7 +89,7 @@ public class InventoryInfoController extends BaseController info.setProductCodeList(productCodeList); } startPage(); - List list = productInfoService.selectProductInfoList(info); + List list = productInfoService.listInventory(info); return getDataTable(list); } @@ -153,17 +153,19 @@ public class InventoryInfoController extends BaseController { return toAjax(inventoryInfoService.updateInventoryInfo(inventoryInfo)); } - @GetMapping("/innerLog/{productCode}") - public String innerLog(@PathVariable("productCode") String productCode, ModelMap mmap) { + @GetMapping("/innerLog/{productCode}/{warehouseId}") + public String innerLog(@PathVariable("productCode") String productCode,@PathVariable("warehouseId") Long warehouseId, ModelMap mmap) { mmap.put("productCode", productCode); + mmap.put("warehouseId", warehouseId); return prefix + "/innerLog"; } - @GetMapping("/outerLog/{productCode}") - public String outerLog(@PathVariable("productCode") String productCode, ModelMap mmap) { + @GetMapping("/outerLog/{productCode}/{warehouseId}") + public String outerLog(@PathVariable("productCode") String productCode,@PathVariable("warehouseId") Long warehouseId, ModelMap mmap) { mmap.put("productCode", productCode); + mmap.put("warehouseId", warehouseId); return prefix + "/outerLog"; } /** diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java index ab25b24f..9720b700 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java @@ -13,6 +13,7 @@ import java.util.Map; import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; @@ -203,12 +204,43 @@ public class ProjectOrderInfoController extends BaseController List todoCompletedList = todoService.selectTodoCompletedList(todo); mmap.put("approveLog", todoCompletedList); //判断商务角色 并且是产品或自己审批 - boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) ? + boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ? ("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName())) - : true; - mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business")) && updateFlag); + : (boolean) mmap.get("canUpdate"); + mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag); return prefix + "/edit"; } + /** + * 修改订单管理 + */ + + @GetMapping("/approveLog/{id}") + public String approveLog(@PathVariable("id") Long id, ModelMap mmap) + { + ProjectOrderInfo projectOrderInfo = projectOrderInfoService.selectProjectOrderInfoById(id); + mmap.put("projectOrderInfo", projectOrderInfo); + mmap.put("user", ShiroUtils.getSysUser()); + mmap.put("canUpdate", ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) ||ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus())); +// boolean showFileFlag=!ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) +// && !ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus()) +// && !"1".equals(projectOrderInfo.getProcessTemplate()); + mmap.put("showFileFlag", true); + + ProjectOrderFileLog fileLog = new ProjectOrderFileLog(); + fileLog.setOrderId(projectOrderInfo.getId()); + fileLog.setFileType(ProjectOrderFileLog.FileTypeEnum.CONTRACT_BAK.getCode()); + mmap.put("orderBakFile", projectOrderFileLogService.mapBakFile(fileLog)); + Todo todo = new Todo(); + todo.setBusinessKey(projectOrderInfo.getOrderCode()); + List todoCompletedList = todoService.selectTodoCompletedList(todo); + mmap.put("approveLog", todoCompletedList); + //判断商务角色 并且是产品或自己审批 + boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ? + ("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName())) + : (boolean) mmap.get("canUpdate"); + mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag); + return prefix + "/orderApproveLog"; + } @GetMapping("/view/{id}") public String viewDetail(@PathVariable("id") Long id, ModelMap mmap) { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java index 7e6fb714..f2e5669d 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/VendorInfoController.java @@ -69,7 +69,7 @@ public class VendorInfoController extends BaseController public String partnerQuery(@RequestParam(value = "code",required = false)String code, ModelMap modelMap) { modelMap.put("code",code); - return prefix + "/vendorQuery"; + return prefix + "/vendorQueryStatic"; } @GetMapping("/list/query") @ResponseBody diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryOuter.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryOuter.java index 00ef41a8..09676c5b 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryOuter.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/InventoryOuter.java @@ -83,6 +83,7 @@ public class InventoryOuter extends BaseEntity /** 发货时间选择(0:立即发货 1:自定义) */ // @Excel(name = "发货时间选择(0:立即发货 1:自定义)") private String deliveryTimeType; + private Long warehouseId; private List detailList; diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java index c15de286..446c5133 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java @@ -68,6 +68,9 @@ public class ProductInfo extends BaseEntity private String vendorName; private Long availableCount; private Long cumulativeCount; + private Long inventoryCount; + private Long warehouseId; + private String warehouseName; @Getter public enum ProductTypeEnum { /** diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java index 1515d5ee..e2545794 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java @@ -103,6 +103,7 @@ public class ProjectOrderInfo extends BaseEntity { */ // @Excel(name = "进货商商务接口人姓名") private String businessPerson; + private Boolean showLog; /** * 邮箱 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/PartnerInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/PartnerInfoMapper.java index 542da8de..a3ff77a5 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/PartnerInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/PartnerInfoMapper.java @@ -62,4 +62,6 @@ public interface PartnerInfoMapper public int selectCountByCode(PartnerInfo partnerInfo); List listByOrderCode(List orderCodeList); + + int selectMaxByPrefix(String string); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java index 4bcf3625..7f82d5e0 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java @@ -77,4 +77,6 @@ public interface ProductInfoMapper List authProductCode(VendorInfo productInfo); void updateCount(List values); + + List listInventory(ProductInfo info); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java index 3a469e2b..f8622635 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProductInfoService.java @@ -71,4 +71,6 @@ public interface IProductInfoService void updateCount(List values); + List listInventory(ProductInfo info); + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CustomerInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CustomerInfoServiceImpl.java index e5637c04..2db35e90 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CustomerInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CustomerInfoServiceImpl.java @@ -63,7 +63,7 @@ public class CustomerInfoServiceImpl implements ICustomerInfoService public int insertCustomerInfo(CustomerInfo customerInfo) { customerInfo.setCreateBy(ShiroUtils.getUserId().toString()); - customerInfo.setCustomerCode(generateCode(customerInfo.getProvince())); + customerInfo.setCustomerCode(generateCode(customerInfo.getProvince())); int i = customerInfoMapper.selectCountByCode(customerInfo); if (i > 0){ throw new ServiceException("客户编码已存在"); @@ -80,7 +80,7 @@ public class CustomerInfoServiceImpl implements ICustomerInfoService cnarea.setLevel("1"); List cnareas = cnareaService.queryAll(cnarea); if (CollUtil.isEmpty(cnareas)) { - throw new ServiceException("省市未配置,生成订单编号出错,请联系管理员"); + throw new ServiceException("省市未配置,生成客户编码出错,请联系管理员"); } String shortCode = cnareas.get(0).getShortCode(); StringBuilder result = new StringBuilder(); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryOuterServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryOuterServiceImpl.java index 9c1054de..1868fdc6 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryOuterServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/InventoryOuterServiceImpl.java @@ -3,7 +3,6 @@ package com.ruoyi.sip.service.impl; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.function.Function; import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; @@ -17,7 +16,7 @@ import com.ruoyi.sip.domain.*; import com.ruoyi.sip.dto.inventory.ProductWarehouseInfo; import com.ruoyi.sip.mapper.InventoryOuterDetailMapper; import com.ruoyi.sip.service.*; -import com.ruoyi.sip.utils.TemplateMailUtil; +import com.ruoyi.common.utils.mail.TemplateMailUtil; import com.ruoyi.sip.vo.OuterDeliveryProductVo; import com.ruoyi.sip.vo.OuterDeliveryVo; import com.ruoyi.sip.vo.OuterViewVo; diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/PartnerInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/PartnerInfoServiceImpl.java index 558b94d2..a0599298 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/PartnerInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/PartnerInfoServiceImpl.java @@ -6,6 +6,10 @@ import java.util.List; import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.Cnarea; +import com.ruoyi.sip.domain.CustomerInfo; +import com.ruoyi.sip.service.ICnareaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.sip.mapper.PartnerInfoMapper; @@ -24,7 +28,8 @@ public class PartnerInfoServiceImpl implements IPartnerInfoService { @Autowired private PartnerInfoMapper partnerInfoMapper; - + @Autowired + private ICnareaService cnareaService; /** * 查询供应商管理 * @@ -67,6 +72,9 @@ public class PartnerInfoServiceImpl implements IPartnerInfoService public int insertPartnerInfo(PartnerInfo partnerInfo) { partnerInfo.setCreateBy(ShiroUtils.getUserId().toString()); + //生成编码 + partnerInfo.setPartnerCode(generateCode(partnerInfo.getProvince())); + int i = partnerInfoMapper.selectCountByCode(partnerInfo); if (i>0){ throw new ServiceException("该编码已存在"); @@ -74,6 +82,29 @@ public class PartnerInfoServiceImpl implements IPartnerInfoService return partnerInfoMapper.insertPartnerInfo(partnerInfo); } + private String generateCode(String province) { + if (StringUtils.isEmpty(province)) { + throw new ServiceException("客户所属省为空,无法生成代理商编码"); + } + Cnarea cnarea = new Cnarea(); + cnarea.setName(province); + cnarea.setLevel("1"); + List cnareas = cnareaService.queryAll(cnarea); + if (CollUtil.isEmpty(cnareas)) { + throw new ServiceException("省市未配置,生成代理商编码出错,请联系管理员"); + } + String shortCode = cnareas.get(0).getShortCode(); + StringBuilder result = new StringBuilder(); + result.append("AGT-"); + result.append(shortCode); + result.append("-"); + int count = partnerInfoMapper.selectMaxByPrefix(result.toString()); + // 生成顺序编码,不足四位补零 + String sequence = String.format("%04d", count + 1); + result.append(sequence); + return result.toString(); + } + /** * 修改供应商管理 * @@ -84,6 +115,12 @@ public class PartnerInfoServiceImpl implements IPartnerInfoService public int updatePartnerInfo(PartnerInfo partnerInfo) { partnerInfo.setUpdateBy(ShiroUtils.getUserId().toString()); + // 如果省份发生变化,需要重新生成客户编码 + PartnerInfo existsInfo = partnerInfoMapper.selectPartnerInfoById(partnerInfo.getId()); + if (existsInfo != null && !existsInfo.getProvince().equals(partnerInfo.getProvince())) { + String newPartnerCode = generateCode(partnerInfo.getProvince()); + partnerInfo.setPartnerCode(newPartnerCode); + } int i = partnerInfoMapper.selectCountByCode(partnerInfo); if (i>0){ throw new ServiceException("该编码已存在"); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java index d842d0f9..eddf2ff8 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProductInfoServiceImpl.java @@ -148,4 +148,10 @@ public class ProductInfoServiceImpl implements IProductInfoService public void updateCount(List values) { productInfoMapper.updateCount(values); } + + @Override + public List listInventory(ProductInfo info) { + + return productInfoMapper.listInventory(info); + } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java index 67071746..78687df9 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java @@ -26,6 +26,7 @@ import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sip.domain.*; import com.ruoyi.sip.dto.ApiDataQueryDto; import com.ruoyi.sip.flowable.domain.Todo; @@ -38,7 +39,7 @@ import com.ruoyi.sip.service.*; import com.ruoyi.sip.flowable.service.DeleteFlowableProcessInstanceCmd; import com.ruoyi.sip.flowable.service.TodoCommonTemplate; import com.ruoyi.sip.flowable.service.TodoService; -import com.ruoyi.sip.utils.TemplateMailUtil; +import com.ruoyi.common.utils.mail.TemplateMailUtil; import com.ruoyi.sip.vo.OrderInfoVo; import com.ruoyi.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; @@ -104,6 +105,9 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To @Autowired private TaskService taskService; + + private static final List CSS_EMAIL_LIST = Arrays.asList("wangxiaojun@pcitech.com", "sunxuepu@pcitech.com", "huiwang@pcitech.com", "zhaoqian1@pcitech.com", "pci-ict@pcitech.com"); + @Autowired private IBuApproveConfigService approveConfigService; @Value("${unis.order.endHour:96}") @@ -215,7 +219,33 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To */ @Override public List selectProjectOrderInfoList(ProjectOrderInfo projectOrderInfo) { - return projectOrderInfoMapper.selectProjectOrderInfoList(projectOrderInfo); + SysUser sysUser = getSysUser(); + boolean showLog = false; + if (sysUser.getDept() != null && sysUser.getDept().getAncestors().startsWith("0,100,200")) { + StringBuilder authSql = new StringBuilder(); + if ("总代".equals(sysUser.getDept().getDeptName())) { + //总代 + authSql.append(" and ( "); + authSql.append(" t1.order_channel = 1 "); + authSql.append(" )"); + } else { + showLog = true; + authSql.append(" and t1.partner_code in ("); + authSql.append(" select partner_code from partner_info where system_user_id = ").append(sysUser.getUserId()); + authSql.append(" )"); + } + projectOrderInfo.setParams(new HashMap() {{ + put("authSql", authSql.toString()); + }}); + } + + + List projectOrderInfos = projectOrderInfoMapper.selectProjectOrderInfoList(projectOrderInfo); + for (ProjectOrderInfo orderInfo : projectOrderInfos) { + //省代看总代合同 + orderInfo.setShowLog(showLog && "1".equals(orderInfo.getOrderChannel())); + } + return projectOrderInfos; } /** @@ -1142,7 +1172,7 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To return null; } - private void sendPartnerMail(List toEmail, ProjectOrderInfo projectOrderInfo){ + public void sendPartnerMail(List toEmail, ProjectOrderInfo projectOrderInfo){ if (CollUtil.isEmpty(toEmail)){ log.info("发货邮件发送失败,收件人为空"); return; @@ -1150,8 +1180,16 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To String templateTile="{}-紫光汇智云桌面-{}-进供货执行通知"; String title = StringUtils.format(templateTile, projectOrderInfo.getOrderCode(), projectOrderInfo.getProjectName()); - TemplateMailUtil.sendTemplateMail(toEmail,title, - TemplateMailUtil.MailTemplate.ORDER_PARTNER,Dict.create()); + String activeProfile = SpringUtils.getActiveProfile(); + if ("dev".equals(activeProfile)){ + //开发环境不抄送领导 + TemplateMailUtil.sendTemplateMail(toEmail,title, + TemplateMailUtil.MailTemplate.ORDER_PARTNER,Dict.create()); + }else{ + TemplateMailUtil.sendTemplateMail(toEmail,title, + TemplateMailUtil.MailTemplate.ORDER_PARTNER,Dict.create(),CSS_EMAIL_LIST); + } + } @Override diff --git a/ruoyi-sip/src/main/resources/mapper/inventory/InventoryOuterMapper.xml b/ruoyi-sip/src/main/resources/mapper/inventory/InventoryOuterMapper.xml index 6d2d8b60..7d022265 100644 --- a/ruoyi-sip/src/main/resources/mapper/inventory/InventoryOuterMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/inventory/InventoryOuterMapper.xml @@ -96,6 +96,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and t1.delivery_status = #{deliveryStatus} and t1.contact_address = #{contactAddress} and t1.delivery_time = #{deliveryTime} + and t1.outer_code in (select outer_code from oms_inventory_outer_detail + where warehouse_id=#{warehouseId}) + and t1.delivery_time_type = #{deliveryTimeType} diff --git a/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml index 818cf2e1..20246edf 100644 --- a/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml @@ -71,7 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select ifnull(max(SUBSTR(customer_code FROM LENGTH(#{prefix}) + 1 FOR 4)), 0) from customer_info - WHERE customer_code like concat(#{prefix}, '%'); + WHERE customer_code like concat(#{prefix}, '%') and LENGTH(ifnull(SUBSTR(customer_code FROM LENGTH(#{prefix}) + 1 FOR 4), '0000'))=4 diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml index 97b5dcdd..7ea9f571 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml @@ -67,141 +67,145 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + insert into partner_info diff --git a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml index cca0d33f..805576a7 100644 --- a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml @@ -110,6 +110,42 @@ +