站长信息
jeffery.xu
jeffery.xu

软件工程师

欢迎访问我的个人笔记网站!我是一名热爱技术的开发者,专注于Web开发和技术分享。

811495111@qq.com
18521510875
筛选

个人笔记

Gore修改内容
工作笔记
1 植入报告导出
Implant Report Export
上次CR的一个需求变更:病历号导出的excel表格里面显示完整还是显示****1234按照当前用户系统界面上展示的结果来
A requirement change from last CR: The excel table for exporting the medical record number shows complete or ****1234 according to the results displayed on the current user system interface
2 GSP报表
GSP Reports
QA提出把所有GSP报表字段描述里的“有效期”改成“失效日期”。GSP报表包括:验收管理、入库记录、贮存管理、检查管理、销售管理、出库管理、复核管理、售后退回管理、报损管理。同时E-Order下的经销商发货报表的有效期也同步改成失效日期
QA proposed to change "expiry date" to "expiration date" in all GSP report field descriptions. GSP reports include: Acceptance management, inbound records, storage management, inspection management, sales management, outbound management, review management, post-sale return management, and loss reporting management. At the same time, the validity period of the dealer shipping report under E-Order is also changed to expiration date
3 供货企业资质预警功能
Supplier qualification warning function
1.增加供货企业资质预警:当供货企业资质证书的自然有效期至跟当前时间比分别是30天和1天的时候,会发送邮件提醒RA和 QA;
2. 生产企业资质预警暂不关闭
1 Add supply enterprise qualification warning: When the natural validity period of the supply enterprise qualification certificate is 30 days and 1 day respectively from the current time, an email will be sent to alert RA and QA;
2 The production enterprise qualification warning will not be turned off for the time being
4 暂存订单折扣金额锁定
The discount amount of the temporarily stored orders is locked
1.新增暂存订单折扣金额锁定表,暂存采购单时记录有补偿金额抵扣的订单信息。删除暂存订单时,解锁之前锁定的补偿金额。
2.已有锁定补偿金额的暂存订单,不允许新增、修改、删除订购的产品信息。只能整单做删除。
3.在新增订单或编辑无锁定补偿金额的暂存订单时,系统在计算当前订单的补偿金额需要先去除
1中其它订单锁定的补偿金额
4.包括总部采购订单录入和经销商采购订单录入功能同步修改
1. Add a table for locking discount amounts for temporary orders, which records the information of orders with compensation amount deductions when temporarily storing purchase orders. When deleting a temporary order, unlock the previously locked compensation amount.
2 For a temporary order with a locked compensation amount, it is not allowed to add, modify, or delete the ordered product information. Only the entire order can be deleted.
3. When adding a new order or editing a temporary order without a locked compensation amount, the system needs to remove the compensation amount locked in other orders in 1 before calculating the compensation amount for the current order
4. Including the simultaneous modification of headquarters purchase order entry and dealer purchase order entry functions
5 总部用户邮件提醒的链接调整
Link adjustment for email alerts from headquarters users
因戈尔内部员工登录方式从pingone换成了Entra,登录方式有所不一样,所以需要把总部用户系统接受到的通知所有邮件里面的链接换成https://myapplications.microsoft.com
For gore staff login mode changed from pingone Entra, login way is different, so need to accept headquarters user system to inform all the inside of the email link for https://myapplications.microsoft.com
6 发送订单给仓库
Send the order to the warehouse
1. 创建一个邮件组:HTDK Order,用于发送订单信息给仓库(维护方式与现在一样,该功能不需要开发,只需要在现在的【邮件组管理】菜单去维护即可)
2. 我们在订单审批界面增加一个勾选框,勾选框的内容是【发邮件给仓库】,默认是不勾选的。Melody在审批订单的时候根据实际情况勾选该勾选框   
3. 基于第2点增加判断,如该笔订单的【发邮件给仓库】勾选了且CS点击了审批通过,在审批通过完成后同步推送邮件给HTDK。如【发邮件给仓库】勾选了但是操作的是审批拒绝或者返回,则不发送邮件。
4. 订单审批界面增加【CS填写给仓库的备注】字段,
不管是否勾选了【发邮件给仓库】均为非必填,Melody在审批订单时根据实际情况填写该内容
5.考虑到以上功能是三个业务线共用且目前只for B277的订单,所以【发邮件给仓库】的勾选框和【CS填写给仓库的备注】均为非必填项,CS审批的时候根据实际情况操作
1 Create a mail group: HTDK Order for sending order information to the warehouse (the maintenance method is the same as it is now. This feature does not need to be developed and can be maintained in the current [Mail Group Management] menu)
2. We add a checkbox to the order approval interface, with the content of the checkbox being [Email to the Warehouse], which is unchecked by default. Melody will check the box when approving orders based on the actual situation
3 Add a judgment based on point 2, such as the [Email to Warehouse] option for this order is checked and CS clicks approval, then send an email to HTDK simultaneously after approval is completed. If [Email to Warehouse] is checked but the operation is a rejection or return of approval, no email will be sent.
4 Add a [CS Note to warehouse] field to the order approval interface, which is not required regardless of whether [Email to Warehouse] is checked or not, Melody fills in this content based on the actual situation when approving the order
5. Considering that the above functions are shared by the three business lines and currently only for B277 orders, the checkbox for "Email to Warehouse" and the "CS Notes to Warehouse" are both non-required fields, and CS will operate according to the actual situation during the approval process
7 人工返利附件下载
Download of the manual rebate attachment
经销商下载人工返利附件报错
Dealers have reported an error when downloading the manual rebate attachment
8 补偿类型选项框查询功能
Compensation type option box query function
完善一下补偿申请录入界面(总部+经销商)和人工返利的补偿类型选项框的查询功能(即在选项界面的上方增加补偿代码、补偿名称的查询条件)
Refine the query functionality of the compensation type option box for compensation claims (headquarters + dealer) and manual rebates (i.e. add a query area above the option interface)
9 经销商系统 经销商系统所有查询功能如有可以用【经销商名称】查询的,把【经销商名称】查询提交去掉
10 退货报表打印功能 退货报表打印功能把打印报表的仓库地址和联系人删掉,包括B185跟B277的

 

医院销售代表更新
工作笔记

今天更新医院销售代表

经销商授权申请审批流程优化需求
工作笔记

经销商授权申请审批流程优化需求,见如下详细说明。

2.1 经销商申请授权单时,下拉框选择的客户区域由现在的东南西北四项,在增加一个CL区域选项。

2.2 CE审批时,客户区域下拉框选择项也增加一个CL区域。允许CE做客户区域的内容修改。默认根据经销商提交订单的区域进行内容显示。审批条件修改,单据中的经销商所属类型+客户区域与CE审批人员负责的经销商类型+授权区域相同,才展示带CE审批的数据允许CE审批。

2.3 CMD审批调整,客户区域下拉框选择项也增加一个CL区域,默认根据经销商提交订单的区域进行内容显示。不允许修改。审批条件修改,单据中的经销商所属类型+客户区域与CMD审批人员负责的经销商类型+授权区域相同,才展示对应待审批数据允许CMD人员审批。

2.4 RMD审批调整,客户区域下拉框选择项也增加一个CL区域,默认根据经销商提交订单的区域进行内容显示。不允许修改。审批条件修改,单据中的经销商所属类型+客户区域与RMD审批人员负责的经销商类型+授权区域相同,才展示对应待审批数据允许RMD人员审批。

2.5 总裁办审批调整,客户区域下拉框选择项也增加一个CL区域,默认根据经销商提交订单的区域进行内容显示。不允许修改。审批条件修改,单据中的经销商所属类型+客户区域与总裁办审批人员负责的经销商类型+授权区域相同,才展示对应待审批数据允许总裁办人员审批。

PS

审批流的那个审批状态  CE待审批、CERutrn 等把CXE换成ComEx

把总裁办审批更改成全国渠道审批

经销商基准价功能修改
工作笔记

一:DMS根据BPCS推送的价格数据做经销商基准价的增补,
  1)根据BPCS推送的经销商+产品+价格数据,如果经销商在基准价功能存在,产品在基准价功能不存在的,需要把此价格数据新增到经销商基准价功能(时间都是当前年份的1月1号到12月31号)。
  2)第一步新增好数据后,把新增数据的经销商+产品+价格数据拿出来,在循环增加数据,从2024年开始截止到当前时间的上一年,每年一条记录。
二:货号升级功能调整
  1)系统需要选择新货号、老货号、年份(年份从2024年开始,到当前年),同时要根据老货号,老货号有的年份才有年份,数据选择完成点击数据同步按钮,系统判断,如果新货号+年份在经销商基准价功能无数据,系统自动按照老货号+年份查询出所有记录复制一份给到新货号。
  2)如果选择的新货号+年份在经销商基准价中已存在数据,系统则按照老货号+经销商+年份更新新货号的价格。
三:功能List列表显示、查询、导出功能增加【创建时间】、【年份】字段、年份取值如下:a. 手工上传:取上传字段。b. BPCS 推送:取生效日的“年份”
四:手工上传数据逻辑调整。保证相同经销商,相同货号,相同年份只有一条记录。如果本次上传的数据经销商+产品+年份在当前功能已存在相同数据,系统直接做价格更新。

DDI功能修改等
工作笔记

1.APOC DMS系统的那个DDI匹配后数据报告功能,需要调整一下。在关联产品匹配表的时候,需要用产品代码、名称、规格、单位、经销商相等做条件

首页需要添加版本号
工作笔记

ADD 改成2.1

APOC 新加 1.0

根据日期撤销TFS签出
工作笔记

param(
    [datetime] $TargetDate = ([datetime]"2025-09-15"),
    [switch] $DoIt = $false,
    [string] $TfExePath = "tf",
    [string] $Root = ".",
    [string[]] $ExcludeExtensions = @(".csproj")  # 可传入多个,例如: -ExcludeExtensions ".csproj",".vbproj"
)

$target = $TargetDate.Date
Write-Host "Root: $Root"
Write-Host "TargetDate: $target"
Write-Host "Dry-run: $(-not $DoIt)"
Write-Host "TfExePath: $TfExePath"
Write-Host "Exclude extensions: $($ExcludeExtensions -join ', ')"
Write-Host ""

try {
    $items = Get-ChildItem -Path $Root -Recurse -File -ErrorAction Stop
} catch {
    Write-Error "Scan failed: $_"
    exit 1
}

# 过滤:按 LastWriteTime 且排除指定扩展(不区分大小写)
$excludeSet = $ExcludeExtensions | ForEach-Object { $_.ToLowerInvariant() }
$matched = $items |
    Where-Object {
        ($_.LastWriteTime.Date -eq $target) -and
        (-not ($excludeSet -contains ($_.Extension.ToLowerInvariant())))
    } |
    Select-Object -ExpandProperty FullName

if (-not $matched -or $matched.Count -eq 0) {
    Write-Host "No files found with LastWriteTime = $target (after excluding extensions)." -ForegroundColor Yellow
    exit 0
}

Write-Host "Found $($matched.Count) files. Sample:" -ForegroundColor Green
$matched | Select-Object -First 20 | ForEach-Object { Write-Host $_ }

if (-not $DoIt) {
    Write-Host ""
    Write-Host "Dry-run mode. To execute undo, re-run with -DoIt." -ForegroundColor Yellow
    Write-Host "Example (dry-run):"
    Write-Host "  powershell -ExecutionPolicy Bypass -File .\scripts\undo-by-lastwritetime.ps1 -TargetDate 2025-09-15 -Root .."
    Write-Host "Example (execute):"
    Write-Host "  powershell -ExecutionPolicy Bypass -File .\scripts\undo-by-lastwritetime.ps1 -TargetDate 2025-09-15 -Root .. -DoIt"
    Write-Host "如果要排除更多扩展: -ExcludeExtensions \".csproj\",\".vbproj\""
    exit 0
}

# 验证 tf.exe 可用
try {
    Get-Command $TfExePath -ErrorAction Stop | Out-Null
} catch {
    Write-Error "tf.exe not found. Run in Developer Command Prompt for VS or provide -TfExePath."
    exit 1
}

$counts = @{Undone = 0; NoPending = 0; Failed = 0}

foreach ($f in $matched) {
    Write-Host "Undoing: $f" -NoNewline
    try {
        $out = & $TfExePath undo "$f" /noprompt 2>&1
        if ($LASTEXITCODE -eq 0 -and ($out -match "Undo" -or $out -match "undo successful" -or $out -match "Undoed")) {
            Write-Host " -> Undone" -ForegroundColor Green
            $counts.Undone++
        } elseif ($out -match "No pending changes" -or $out -match "no pending changes" -or $out -match "No changes found") {
            Write-Host " -> No pending changes" -ForegroundColor Yellow
            $counts.NoPending++
        } else {
            Write-Host " -> Result: $out" -ForegroundColor Cyan
            $counts.Failed++
        }
    } catch {
        Write-Host " -> Failed: $_" -ForegroundColor Red
        $counts.Failed++
    }
}

Write-Host ""
Write-Host ("Summary: Undone: {0}`nNoPending: {1}`nFailed: {2}" -f $counts.Undone, $counts.NoPending, $counts.Failed)

SOI客户经销商关联提示调整
工作笔记

需调整经销商报错提示

平台商核算单价导入导入sql
工作笔记

USE [SOI_ADD]
GO
/****** Object:  StoredProcedure [dbo].[SP_BI_WSDealerPriceImport]    Script Date: 2025/12/18 11:14:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[SP_BI_WSDealerPriceImport]
(
    @userid int,
    @TempTable NVARCHAR(100)
)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @rows INT, @temp NVARCHAR(4000), @rows1 INT;
    DECLARE @t TABLE (x INT PRIMARY KEY, y NVARCHAR(1000) COLLATE Chinese_PRC_CI_AS);
    DECLARE @totalnum INT;
    DECLARE @count INT;

    CREATE TABLE #DataTemp
    (
        [PKID] int IDENTITY(1,1) NOT NULL,
        [省份] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
        [产品编码] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
        [产品名称] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
        [单价]  nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
        [生效日期]  nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
        [截止日期] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
        [FK_Province] int,
        [FK_Product] int
    );

    DECLARE @sql nvarchar(4000);
    SET @sql = 'insert #DataTemp select ltrim(rtrim([省份])),ltrim(rtrim([产品编码])),ltrim(rtrim([产品名称])),[单价],[生效日期],[截止日期],0,0 from ' + @TempTable;
    EXEC(@sql);

    SET @temp = '';

    -- 基本校验
    SELECT @rows = COUNT(*) FROM #DataTemp;
    IF (@rows = 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'临时表中没有数据,请确认Excel文档格式正确!');
        SELECT x,y FROM @t;
        RETURN;
    END

    SELECT @rows = COUNT(*) FROM #DataTemp WHERE [省份] IS NULL OR [省份] = '';
    IF (@rows > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'省份不能为空');
        SELECT x,y FROM @t;
        RETURN;
    END

    SELECT @rows = COUNT(*) FROM #DataTemp WHERE [产品编码] IS NULL OR [产品编码] = '';
    IF (@rows > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'产品编码不能为空');
        SELECT x,y FROM @t;
        RETURN;
    END

    SELECT @rows = COUNT(*) FROM #DataTemp WHERE [单价] IS NULL OR [单价] = '';
    IF (@rows > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'单价不能为空');
        SELECT x,y FROM @t;
        RETURN;
    END

    SELECT @rows = COUNT(*) FROM #DataTemp WHERE [生效日期] IS NULL OR [生效日期] = '';
    IF (@rows > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'生效日期不能为空');
        SELECT x,y FROM @t;
        RETURN;
    END

    SELECT @rows = COUNT(*) FROM #DataTemp WHERE [截止日期] IS NULL OR [截止日期] = '';
    IF (@rows > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'截止日期不能为空');
        SELECT x,y FROM @t;
        RETURN;
    END

    -- 产品映射
    UPDATE #DataTemp SET FK_Product = (
        SELECT TOP 1 PKID FROM UT_Product WHERE JDECode = #DataTemp.[产品编码] AND IsValid = 1 AND FK_Origin = 3
    );

    DECLARE @problemProductNum INT;
    SELECT @problemProductNum = COUNT(*) FROM #DataTemp WHERE FK_Product IS NULL OR FK_Product = 0;
    IF (@problemProductNum > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'产品在系统中不存在');
        SELECT x,y FROM @t;
        RETURN;
    END

    -- 单价 numeric 校验(保留原有 ISNUMERIC 校验)
    DECLARE @problemPriceNum INT;
    SELECT @problemPriceNum = COUNT(*) FROM #DataTemp WHERE ISNUMERIC([单价]) = 0;
    IF (@problemPriceNum > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'单价必须为数字');
        SELECT x,y FROM @t;
        RETURN;
    END

    -- 日期格式校验 (使用 IsDate)
    DECLARE @problemStartNum INT;
    SELECT @problemStartNum = COUNT(*) FROM #DataTemp WHERE IsDate([生效日期]) = 0;
    IF (@problemStartNum > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'生效日期不正确');
        SELECT x,y FROM @t;
        RETURN;
    END

    DECLARE @problemEndNum INT;
    SELECT @problemEndNum = COUNT(*) FROM #DataTemp WHERE IsDate([截止日期]) = 0;
    IF (@problemEndNum > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'截止日期不正确');
        SELECT x,y FROM @t;
        RETURN;
    END

    DECLARE @problemEffectNum INT;
    SELECT @problemEffectNum = COUNT(*) FROM #DataTemp WHERE CAST([截止日期] AS date) <= CAST([生效日期] AS date);
    IF (@problemEffectNum > 0)
    BEGIN
        INSERT INTO @t VALUES (1, N'生效日期必须小于截止日期');
        SELECT x,y FROM @t;
        RETURN;
    END

    -- 省份映射
    UPDATE #DataTemp SET FK_Province = (
        SELECT TOP(1) PKID FROM SOI_SmallRegion WHERE SmallRegionName = #DataTemp.[省份] AND IsValid = 1
    );

    -- 返回具体省份名
DECLARE @problemDealerNum INT;
SELECT @problemDealerNum = COUNT(*) FROM #DataTemp WHERE (FK_Province IS NULL OR FK_Province = 0);

IF (@problemDealerNum > 0)
BEGIN
    DECLARE @badProvinces NVARCHAR(MAX);

    SELECT @badProvinces = STUFF(
        (
            SELECT DISTINCT ',' + ISNULL([省份], N'(空)')
            FROM #DataTemp
            WHERE FK_Province IS NULL OR FK_Province = 0
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)')
    ,1,1,'');

    INSERT INTO @t VALUES (1, N'以下省份在系统中不存在:' + @badProvinces);
    SELECT x,y FROM @t;
    RETURN;
END

    -- 关键校验:若存在任意一条导入记录,其时间区间完全包含了系统中某条历史记录,则拒绝整个导入
    IF EXISTS (
        SELECT 1
        FROM #DataTemp dt
        JOIN BI_WSDealerPrice b ON b.IsValid = 1 AND b.[ProvinceName] = dt.省份 AND b.FK_Product = dt.FK_Product
        WHERE b.StartTime >= CAST(dt.[生效日期] AS date)
          AND b.EndTime <= CAST(dt.[截止日期] AS date)
          AND NOT (b.StartTime = CAST(dt.[生效日期] AS date) AND b.EndTime = CAST(dt.[截止日期] AS date))
    )
    BEGIN
        INSERT INTO @t VALUES (1, N'导入失败:存在历史记录完全包含在某条导入记录的时间区间内,系统不允许导入。请检查导入数据或历史数据。');
        SELECT x,y FROM @t;
        RETURN;
    END

    -- 开始事务并调整交叉的历史记录,然后 MERGE 导入
    BEGIN TRY
        BEGIN TRANSACTION;

        -- 左侧相交:历史 b.Start < S.Start and b.End between S.Start and S.End => b.End = S.Start -1
        UPDATE b
        SET b.EndTime = DATEADD(day, -1, CAST(dt.[生效日期] AS date))
        FROM BI_WSDealerPrice b
        JOIN #DataTemp dt ON b.[ProvinceName] = dt.省份 AND b.FK_Product = dt.FK_Product
        WHERE b.IsValid = 1
          AND b.StartTime < CAST(dt.[生效日期] AS date)
          AND b.EndTime >= CAST(dt.[生效日期] AS date)
          AND b.EndTime <= CAST(dt.[截止日期] AS date);

        -- 右侧相交:b.Start between S.Start and S.End and b.End > S.End => b.Start = S.End + 1
        UPDATE b
        SET b.StartTime = DATEADD(day, 1, CAST(dt.[截止日期] AS date))
        FROM BI_WSDealerPrice b
        JOIN #DataTemp dt ON b.[ProvinceName] = dt.省份 AND b.FK_Product = dt.FK_Product
        WHERE b.IsValid = 1
          AND b.StartTime >= CAST(dt.[生效日期] AS date)
          AND b.StartTime <= CAST(dt.[截止日期] AS date)
          AND b.EndTime > CAST(dt.[截止日期] AS date);

        -- 跨越导入区间(拆分右段)
        INSERT INTO BI_WSDealerPrice (
            [WS_DealerType],[WS_DealerCode],[WS_DealerName],[FK_BPCSDealer],
            [FK_SDDealer],[ProductCode],[ProductName],[FK_Product],
            [Price],[StartTime],[EndTime],[CreateTime],[FK_CreateUser],[ModifyTime],
            [FK_ModifyUser],[IsValid],[Memo],[ProvinceName]
        )
        SELECT
            b.WS_DealerType, b.WS_DealerCode, b.WS_DealerName, b.FK_BPCSDealer,
            b.FK_SDDealer, b.ProductCode, b.ProductName, b.FK_Product,
            b.Price, DATEADD(day, 1, CAST(dt.[截止日期] AS date)) AS StartTime, b.EndTime,
            GETDATE(), b.FK_CreateUser, GETDATE(), @userid, 1, b.Memo,b.[ProvinceName]
        FROM BI_WSDealerPrice b
        JOIN #DataTemp dt ON b.[ProvinceName] = dt.省份 AND b.FK_Product = dt.FK_Product
        WHERE b.IsValid = 1
          AND b.StartTime < CAST(dt.[生效日期] AS date)
          AND b.EndTime > CAST(dt.[截止日期] AS date);

        -- 左段更新 EndTime = S.Start -1
        UPDATE b
        SET b.EndTime = DATEADD(day, -1, CAST(dt.[生效日期] AS date))
        FROM BI_WSDealerPrice b
        JOIN #DataTemp dt ON b.[ProvinceName] = dt.省份 AND b.FK_Product = dt.FK_Product
        WHERE b.IsValid = 1
          AND b.StartTime < CAST(dt.[生效日期] AS date)
          AND b.EndTime > CAST(dt.[截止日期] AS date);

        -- MERGE 导入(明确列出 SOURCE 字段并使用 CAST 进行转换)
        MERGE INTO BI_WSDealerPrice AS TARGET
        USING (
            SELECT
                省份,
                FK_Product,
                [产品编码] AS ProductCode,
                [产品名称] AS ProductName,
                CAST([单价] AS decimal(18,4)) AS Price,
                CAST([生效日期] AS date) AS StartTime,
                CAST([截止日期] AS date) AS EndTime
            FROM #DataTemp
        ) AS SOURCE
        ON (TARGET.ProvinceName = SOURCE.省份
            AND TARGET.FK_Product = SOURCE.FK_Product
            AND TARGET.StartTime = SOURCE.StartTime
            AND TARGET.EndTime = SOURCE.EndTime)
        WHEN MATCHED THEN
            UPDATE SET
                TARGET.Price = SOURCE.Price,
                TARGET.CreateTime = GETDATE(),
                TARGET.FK_CreateUser = @userid,
                TARGET.ModifyTime = GETDATE(),
                TARGET.FK_ModifyUser = @userid,
                TARGET.IsValid = 1,
                TARGET.Memo = '导入'
        WHEN NOT MATCHED BY TARGET THEN
        INSERT (
            [WS_DealerType],[WS_DealerCode],[WS_DealerName],[FK_BPCSDealer],
            [FK_SDDealer],[ProductCode],[ProductName],[FK_Product],
            [Price],[StartTime],[EndTime],[CreateTime],[FK_CreateUser],[ModifyTime],
            [FK_ModifyUser],[IsValid],[Memo],[ProvinceName]
        )
        VALUES (
            NULL, NULL, NULL, NULL,
            NULL, SOURCE.ProductCode, SOURCE.ProductName, SOURCE.FK_Product,
            SOURCE.Price, SOURCE.StartTime, SOURCE.EndTime, GETDATE(), @userid, GETDATE(), @userid, 1, '导入', SOURCE.省份
        );

        COMMIT TRANSACTION;

        INSERT INTO @t VALUES (0, N'导入成功!');
        SELECT x,y FROM @t;
        RETURN;
    END TRY
    BEGIN CATCH
        DECLARE @ErrNum INT = ERROR_NUMBER();
        DECLARE @ErrSeverity INT = ERROR_SEVERITY();
        DECLARE @ErrState INT = ERROR_STATE();
        DECLARE @ErrProc NVARCHAR(128) = ISNULL(ERROR_PROCEDURE(), N'(NULL)');
        DECLARE @ErrLine INT = ERROR_LINE();
        DECLARE @ErrMsg NVARCHAR(4000) = ERROR_MESSAGE();
        DECLARE @FullMsg NVARCHAR(1000) = N'导入失败,发生异常: 错误号=' + CAST(@ErrNum AS NVARCHAR(20))
            + N', 严重性=' + CAST(@ErrSeverity AS NVARCHAR(10))
            + N', 状态=' + CAST(@ErrState AS NVARCHAR(10))
            + N', 存储过程=' + @ErrProc
            + N', 行=' + CAST(@ErrLine AS NVARCHAR(10))
            + N', 消息=' + LEFT(@ErrMsg, 900); -- 截断以适应 NVARCHAR(1000)

        IF XACT_STATE() <> 0
        BEGIN
            ROLLBACK TRANSACTION;
        END

        INSERT INTO @t VALUES (1, @FullMsg);
        SELECT x,y FROM @t;
        RETURN;
    END CATCH
END

雅培CRDx财务部Q3CR
工作笔记

医院编号管理功能调整

  1. 新增医院总院字段,在新增及修改操作时,业务人员可借助放大镜工具从 DMS 系统医院主数据中选择相关数据,同时支持数据的查询与导出。
  1. 将医院级别字段修改为放大镜形式,并设定为必填项,其数据来源变更为医院等级主数据,且支持查询导出功能。
  1. 增设医院英文名字段,支持手工维护,同时具备查询导出功能。
  1. 修改数据同步功能。点击“数据同步”时,需将当前医院信息同步至SOI系统 “终端信息管理→医院信息维护→医院信息维护” 中。在同步过程中,要增加判断逻辑,仅当 DMS 系统中不存在医院编号时才执行同步操作,若已存在则给出相应提示。此外,同步还需将新增英文名、级别、总院等字段同步至“终端信息管理→医院信息维护→医院信息维护”。
  1. 在“终端信息管理→医院信息维护→医院信息维护”功能中,添加英文名、级别、总院以展示相关数据。
  1. 数据同步时,若在医院编号管理功能里数据未填写总院信息,则默认该医院的总院为其自身,保存时,其外键为SOI_CustomerInfo 表的主键。

经销商与医院关系管理功能调整

  1. 当系统手动停用关联关系时,将停用时间默认值从当前时间 +60 天调整为当前时间。
  1. 调整系统自动停用关联关系的逻辑,把停用时间默认值从当前时间 +60 天改为当前时间。同时,需对仪器签约导入、开票信息导入等功能及相关存储过程进行检查,去除自动创建经销商客户关系的额外代码逻辑,仅保留依据当前导入数据创建经销商与医院关系的相关代码。另外,对于停用关系的代码,将停用时间统一设定为当前时间,不再额外增加 60 天。

去除 DMS 系统自动创建经销商医院客户关系功能

  1. 经销商信息管理模块中的新增修改一、二级经销商关系功能。
  1. 经销商客户关系管理模块中的新增修改经销商医院关系功能。
  1. 机器信息管理模块中的上传仪器签约指标功能。
  1. 年中经销商签约导入功能。

退款审批逻辑调整

退款审批通过后,系统依据已开票退款生成退款预提信息,依据待开票情况生成负数开票明细信息。
新增逻辑:
生成的预提数据或开票数据需与当前退款申请单及退款单中的退款原因及退款备注建立 Mapping 关系,并进行系统存储,同时需新增相应的关系表。

报表功能调整

SOI 相关报表(退款明细报表、开票明细报表、预提明细报表、预提汇总报表)

  1. 在上述三个报表功能的列表页面,新增退款原因字段,支持查询及导出操作。
  1. 在导出数据时,新增退款备注字段的导出功能。
  1. 修复预提导入的数据在预提汇总功能中点击查看按钮时出现的报错问题,确保操作正常无报错。
  1. 创建数据导入功能,具体包括仪开票明细,预提明细增加 VAT 发票信息导入。根据BPCS订单号导入VAT发票号。

DMS 相关报表(开票明细报表、预提明细报表)

  1. 在两个报表功能的列表页面,新增退款原因字段,支持查询及导出。
  1. 在导出数据时,新增退款备注字段的导出功能。
  1. 修改开票明细报表,将原来的预提时间改为BPCS返回时间,修改查询条件和导出。

新增医院 VS 仪器关系报表

新增医院仪器关系报表功能
报表字段: Region、经销商 BPCS 代码、经销商 DMS 代码、经销商名称、BPCS Account、一级经销商代码、一级经销商名称、医院编码、医院名称、仪器编码、仪器名称、近三个月是否有销售、当前年是否有开票、经销商客户关系状态、经销商客户关系停用时间等,同时支持数据的查询与导出。